IDA 字符串到函数(ARM,受保护的函数)

逆向工程 艾达 安卓 手臂 职能
2021-06-16 00:19:18

我正在使用具有受保护功能(sub_xxxx 等)的 ARM(android apk:libgame.so)文件。字符串应该与它们的函数有交叉引用,但它们中的大多数引用如下:

 unk_134AB30     DCB 0xD0 ; -            ; DATA XREF: .data:0134AB58o
.data:0134AB31                 DCB    0
.data:0134AB32                 DCB    0
.data:0134AB33                 DCB    0
.data:0134AB34                 DCD aMlinewidth         ; "mLineWidth"
.data:0134AB38                 DCD aF_0                ; "f"

这些是结构吗?如果是这样,我如何获得“mLineWidth”的实际值或函数?

为了到这里,我查看了对字符串的交叉引用,aMlinewidth 引用了它:

 aLinewidth      DCB "lineWidth",0

然后我查看了对“aLinewidth”的交叉引用,并得到了我现在的位置。另一个例子来自:“mCueBallRenderLine”字符串:

aMcueballrender DCB "mCueBallRenderLine",0

然后 aMcueballrender 的交叉引用导致这里:

                 DCD aC_0                ; "c"
.data:01625F88 unk_1625F88     DCB 0x32 ; 2            ; DATA XREF: .data:01626004o
.data:01625F89                 DCB    1
.data:01625F8A                 DCB    0
.data:01625F8B                 DCB    0
.data:01625F8C   

DCD aMcueballrender     ; "mCueBallRenderLine"

, 就其结构而言,这与另一个示例相似。上面看到的所有未知引用 (unk_xxxx) 都会导致这样的事情:

DCD unk_151AB20
.data:0151C2DC                 DCD unk_151B7C0
.data:0151C2E0                 DCD unk_151BED0
.data:0151C2E4                 DCD unk_151A5A0
.data:0151C2E8                 DCD unk_151BDE0
.data:0151C2EC                 DCD unk_151B6C0
.data:0151C2F0                 DCD unk_151AAF0
.data:0151C2F4                 DCD unk_151BE80
.data:0151C2F8                 DCD unk_151BF70
.data:0151C2FC                 DCD unk_151B180
.data:0151C300                 DCD unk_151BF20
.data:0151C304                 DCD unk_151ABA0
.data:0151C308                 DCD unk_151B2E0
.data:0151C30C                 DCD unk_151B270

我试图找到字符串的实际函数/值,但我无法到达它列出 sub_xxxxx 的任何地方。

1个回答
  • 这些 sub_xxx 函数没有被保护,只是被剥离了,这意味着你的可执行文件是在没有调试信息的情况下编译的。
  • 看起来对这些字符串的访问是集中的,并且使用一些您尚未找到的功能完成。
  • 是的,您可以将这些类似组织的定义表示为结构或结构数组。这可能会使您的 RE 工作更轻松。
  • 您引用的最后一个数组也应该从某个地方引用。尝试找到它的引用来源,这可能会为您提供有关数据结构的一些信息。我建议有一个函数,它通过 id 返回这些结构之一或其部分的地址,并且该函数引用您提到的最后一个数组或其部分。

祝你好运。