首页
社区
课程
招聘
[原创]基于IDA Hex-Rays Microcode的函数内联
发表于: 6天前 1577

[原创]基于IDA Hex-Rays Microcode的函数内联

6天前
1577


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编辑 ,原因:
上传的附件:
收藏
免费 23
支持
分享
最新回复 (7)
雪    币: 791
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
Tql
5天前
0
雪    币: 155
活跃值: (4576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习。
5天前
0
雪    币: 2790
活跃值: (6186)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
感谢分享
3天前
0
雪    币: 301
活跃值: (1383)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zxc
5
Tql
1天前
0
雪    币: 2928
活跃值: (2290)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
Tql
1天前
0
雪    币: 3799
活跃值: (8903)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
7
microcode就是一坨屎
1天前
0
雪    币: 3799
活跃值: (8903)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
8
microcode就是一坨屎
1天前
0
游客
登录 | 注册 方可回帖
返回