-
-
[原创]基于IDA Hex-Rays Microcode的函数内联
-
-
[原创]基于IDA Hex-Rays Microcode的函数内联
在IDA Pro中汇编指令只能进行替换,如果需要新增或删减指令需要修复段表比较麻烦,难以通过添加汇编代码,进行反编译。如下如所示:

其中v0, v1被定义为value may be undefined, 再来看一下对应的汇编代码如下如图所示:

其中主要对sub_D32474、sub_D37040和sub_D31CC4这个函数进行观察
先来看看这个三个函数的汇编代码如下图所示:

先看第一部分,合起来就是以下代码:
BL sub_D32474
MOV W0, #0x38 ; '8' ; unsigned __int64
B ._Znwm ; operator new(ulong)
本质上其实就是 ptr = new(0x38),再来看第二部分:
BL sub_D37040
MOVI V0.2D, #0
MOV X19, X0
ADD X20, X0, #0x18
STR XZR, [X0,#0x30]
STP Q0, Q0, [X0]
STR Q0, [X0,#0x20]
RET
这部分参数其实就是ptr, 再来看第三部分:
ADRP X1, #aStartpageui@PAGE ; "startPageUI"
ADRP X2, #aLcomTencentKin@PAGE
ADD X1, X1, #aStartpageui@PAGEOFF
ADD X2, X2, #aLcomTencentKin@PAGEOFF
BL sub_D31CC4
MOV X0, X21
B sub_D31248
不难发现,其通将正常的调用约定,隐匿在函数调用,导致IDA Pro反编译时识别不出来,这个时候正常的想法可以将这种指令进行内联,但是这很麻烦,这里引入IDA Hex-Rays Microcode, 微码的细节可以参考以下文章:
https://bbs.kanxue.com/thread-288865.htm
先来看一下还原效果:

下面介绍如何通过microcode进行实现函数内联
下图是生成微码,成熟度必须选用MMAT_GENERATED,因为成熟度过高会导致,PROP出现问题,得在还没构建数据流的情况下进行插入(本人尝试多次,难以修复,不好调试)

传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 5天前
被belikewater编辑
,原因: