首页
社区
课程
招聘
[原创]花指令简单总结
发表于: 2025-5-4 16:58 4922

[原创]花指令简单总结

2025-5-4 16:58
4922

背景

正是因为这两种反汇编的规格和缺陷机制,所以才导致了会有花指令的诞生

花指令简单的说就是在代码中混入一些垃圾数据阻碍静态分析



指令也不一定唯一,比如上面有两种表示call的方式,0x74也能表示jz

OD能被骗过去,但是ida主要采用的是递归扫描的办法(会用线性扫描补充),所以能够正常识别

jnz实际上是fake的,因为jz这个指令,让ida认为jz下面的是另外一个分支,所以这里将jz下面包括jz 全转化为代码

call指令按u,下一行按c,再nop call,把90转为数据,再按c变为nop

这里call指令,其实本质就是jmp&push 下一条指令的地址,但是这里只需要jmp指令,push这条指令是多余的,后续的add指令又会修改下一条指令的地址,造成爆红


易语言自带的花指令,与上面的本质相同

只需要将下面的特征码patch掉就可以了

题目练习:96fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2F1M7%4y4U0N6r3k6Q4x3X3g2U0L8W2)9J5c8X3&6G2N6r3g2Q4x3V1k6K6k6i4c8Q4x3V1j5J5z5e0M7H3

这也是一种常见的花指令,虚拟地址不可能那么大,实际是e9在搞鬼,ida会默认将e9后面的4个字节当成地址,只要nop掉jmp(E9)就好了


clc是清除EFlags寄存器的carry位的标志,而jnb是根据cf==0时跳转的,然而jnb这个分支指令,ida又将后面的部分认作成了另外的分支。

加了一些无效指令导致ida等反编译工具识别错误

call指令的本质:push 函数返回地址然后jmp 函数地址

ret指令的本质: pop eip

所以在call指令之后,函数返回地址存放于esp,可以将值取出,用跳转指令跳转到该地址,即可代替ret指令

这一部分需要精通标志寄存器,每一个操作码都会对相应的标志寄存器产生相应的影响,如果对标志寄存器足够熟练,就可以使用对应的跳转指令构造永恒跳转

有些函数返回值是确定的,比如自己写的函数,返回值可以是任意非零整数;如果故意传入一个不存在的模块名称,那么就会返回一个确定的值NULL;另一方面,某些api函数,一定要调用成功的,而这些api函数基本上只要调用成功就就会返回一个确定的零或者非零值,如MessageBox。这些都可以构造永恒跳转

0x1165 开始的花指令和前面的花指令原来相似,这条花指令会使 IDA 误以为 0x116B 处的指令可能会执行,导致 IDA 的栈分析出现错误

修复方法除了patch 外还有修改 ida 对栈的分析结果

在Options - General菜单中勾上Stack pointer选项可以查看每行指令执行之前的栈帧大小

Alt + K 可以修改某条指令对栈指针的影响,从而消除这条花指令对反编译的影响

练习题目:886K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2F1M7%4y4U0N6r3k6Q4x3X3g2U0L8W2)9J5c8Y4m8J5L8$3u0D9k6h3#2Q4x3V1j5J5x3K6p5K6

在0x401051设置为数据类型(快捷键D),将call 转成硬编码 E8  再将光标放到 db 0E8上 将E8改成 nop(90) 后按C(转化为代码类型)点yes 将硬编码修复成代码

然后向下逐⼀修复 将光标放置在黄色的行上 按C修复 直到没有黄色地址  

最后全选函数,按P生成函数  


jz指令指向下一条指令中间

这个时候让jz正常分析,也就是把中间的nop

如果后面有数据没被分析为code,需要重新分析一下

一般去菜单中的编辑选项修补单字节会比较好把控

像下面这种红色标志离原函数有一定距离又是call+retn组合,400f64又没什么用,还有ret会干扰函数的分析,那就都nop,这是一种暴力破解方法

nop完后看到有%lld,删除函数,修补函数即可反编译


[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 4
支持
分享
最新回复 (6)
雪    币: 3509
活跃值: (6015)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
2
顶一顶
2025-5-6 22:37
0
雪    币: 1414
活跃值: (1657)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
MARK
2025-5-7 16:54
0
雪    币: 1415
活跃值: (1399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark
2025-5-9 09:36
0
雪    币: 3156
活跃值: (3667)
能力值: ( LV8,RANK:147 )
在线值:
发帖
回帖
粉丝
5
mark
2025-5-9 09:37
0
雪    币: 2
活跃值: (93)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2025-5-9 15:57
0
雪    币: 825
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
厉害????????,收藏学习一下
2025-5-10 13:03
0
游客
登录 | 注册 方可回帖
返回