专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
广西药品监管  ·  图解海报 ... ·  7 小时前  
半岛网官微  ·  微信、快手公告:这些账号永久封禁! ·  21 小时前  
半岛网官微  ·  微信、快手公告:这些账号永久封禁! ·  21 小时前  
M姐 数据合规评论  ·  【0620上海】当AI遇见合规:法律人的工作 ... ·  昨天  
M姐 数据合规评论  ·  【0620上海】当AI遇见合规:法律人的工作 ... ·  昨天  
计算机与网络安全  ·  PPT ... ·  昨天  
安徽省应急管理厅  ·  直播预告丨主播走一线 安全伴你行 ·  昨天  
51好读  ›  专栏  ›  看雪学苑

花指令简单总结

看雪学苑  · 公众号  · 互联网安全  · 2025-06-13 17:59

正文

请到「今天看啥」查看全文



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


5.stx/jx


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


6.汇编指令共用opcode

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



创意

1.替换ret指令

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

ret指令的本质: pop eip


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


2.控制标志寄存器跳转

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


3.利用函数返回确定值

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


4.针对反编译

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



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


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



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



清除

nop单字节(E8/E9)


练习题目:https://www.nssctf.cn/problem/2313



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

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



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


nop跨越汇编指令

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



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



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







请到「今天看啥」查看全文