注:这里有些语言描述参考596K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6%4j5i4c8W2M7U0f1#2y4e0g2Q4x3V1k6i4j5i4c8W2M7W2u0W2N6X3g2J5M7$3g2d9N6h3I4W2M7H3`.`.

将目的so解压到/data/data/com.ct.client/files/
assets/ijm_lib/arm64-v8a/libexec.so
assets/ijm_lib/arm64-v8a/libexecmain.so
libexec.so最先被加载,着手libexec.so
这里先贴出对应栈栈变量对应的含义
.init_proc

这里有个细节就是[SP + 0x28] -> 保存了init_proc的调用者,可以推断后续X30会做文章,由于是init_proc,默认是没有参数的,直接跟进BL sub_987B4

X30 - 0x24 -> 0x9858C:
继续跟进 BL sub_987E8

跟进sub_98888 ->


这里细讲下:这里的X3 指定是LR寄存器保存的值,[X3, 4] -> BL 指令,

也就是说offset = imm26 << 2
init_porc:0x985A0 E0 07 B4 A9 STP X0, X1, [SP,#var_C0]!
+0x4:0x985A4 E2 03 01 A9 STP X2, X0, [SP,#0xC0+var_B0]
+0x8:0x985A8 FE 17 00 F9 STR X30, [SP,#0xC0+var_98]
+0xC:0x985AC 82 00 00 94 BL sub_987B4
+0x10:0x985B0 FE 0F 1F F8 STR X30, [SP,#0xC0+var_D0]!
0x94000082 & 0xFFFFFF = 0x82,这里只需要24位,应该是他们能够保证其在24bit能够表示的范围之内。
继续跟进BL sub_98BC8

对其中的部分函数进行说明
sub_98AF8:
[X1,-4] = BL imm26 << 2
W5 = imm26 & 0xFFFFFF
然后在进行sub_98B00
[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
最后于 2026-7-14 09:21
被belikewater编辑
,原因: