YOROTSUKI
发布于 2025-05-03 / 79 阅读
0
0

如何获取APEX部分资产的offset

本篇需要使用到的静态分析工具:Ghirda

在使用Ghirda之前,你需要在你的电脑上安装JDK,因为Ghirda对JDK版本的要求非常宽松,所以我选择贴上一个随机随机的版本

例如:JDK for Windows

开始实操

如果你不会Bypass、Dump process memory之类的操作,那我们只能用一些非常笨的办法获取offset。因为我只想教给别人如何安全的获取apex的资产,所以上述简便办法不会提到xD

第一步:下载Ghirda

Ghirda的github仓库地址:Ghirda by NationalSecurityAgency

下载之后找个地方解压就行

第二步:使用Ghirda加载apex文件

S24.1开始Apex就不再支持DX11了,所以我们只能对r5apex_dx12.exe进行分析

点击ghidraRun.bat,然后点击左上角的File > New Project,创建一个新项目,然后将r5apex_dx12.exe拖到你刚刚创建的那个项目上,之后一路点OK就行

双击你刚刚拖进来的文件,直接点击Analyze(如果你有其他需求可以选择其他你需要的选项),然后等待一小会让Ghirda完成对文件的分析(时间长短取决于你cpu的多核性能)

第三步:寻找offset

在导航栏点击Search -> Memory, 然后搜索 A_DTBL(只是举例, 当你对资产类型熟悉后,你可以使用其他关键词搜索),然后双击搜索结果跳转到对应的静态地址

根据上图,你可以看到这里存在着大量的以A_ 开头的关键词。我们随便选择一个关键词,比如 A_DTBL(对,还是DTBL),让我们丢下A_ 只复制DTBL,继续进入刚才的搜索界面搜索。

双击dtbl(全小写的那个),点击左侧高亮显示的汇编之后右边会显示出这部分函数的伪代码。

在代码中可以看到一个名为"datatable"的变量。我们只需沿着变量赋值链依次查看,当鼠标悬停在每个变量的值上时,很可能会显示一个4位的16进制数值。这个数值通常是原始搜索值的反转形式。例如:

  • 原始值"dtbl"的16进制表示为:64 74 62 6C

  • 那么你需要的值很可能就是它的反转形式:6C 62 74 64

进行简单的格式化一下之后可以则为:0x6474626C(dtbl) -> 0x6C627464(lbtd)

得到该数值之后我们可以将它复制到Legion+或者RSX的源代码中进行有效性测试

相关代码地址:Legion+

至于如何解析、导出相关资产,你可以根据伪代码的调用逻辑来获取相关的结构体或者其他的东西,这部分需要讲的东西实在是太多了,所以我推荐需要做这些的人去学习一下汇编


评论