junk-code-demo

type
status
date
slug
tags
summary
category
icon
password

原理

来源于 IDAPro权威指南
线性扫描反汇编
notion image
递归下降反汇编
notion image
这里主要看递归下降反汇编方式
首先明确IDAPro的反汇编均为静态进行。根据条件分支指令可以构造入门的junk instructions如(jz+jnz)或者永真/假条件+jz/jnz类型(注意:后者在构造时需要考虑编译器优化问题)
实际上,根据上面这个跳转问题,就可以构造一种花,在虚假的控制流中间加入诸如破坏栈帧的junk code,导致反编译失败。不过实践应该是没什么用的,毕竟去虚假控制流的最常见思路就是模拟动态执行,顺带就把花拿下了:)
如果能理解这个最基本的例子原理,大概可以找到一种构造反汇编的通式:用构造永真条件跳转逻辑,在产生的虚假的控制流中塞入junk code,使得反汇编失效
然后,配合一些小小的汇编知识,就可以产生奇妙的效果
例如,call指令正常情况下不会指向其他call retn间的地址,但通过asm汇编内联,可以让call指向一个最近的相对地址,同时不维护条件寄存器,通过该条件寄存器控制永真逻辑。当调用retn的时候返回call,下面的条件寄存器会重复修改。中间的代码在IDA优化过程中是假逻辑,但构造运行两次后变为永真。(可能有点抽象,这里写了个小demo
其实基本上看懂这个demo,就能搞明白上面这个通式了,这里修改寄存器、或者其它构造虚假控制流的方法可就多种多样了(疑似是之前看过构造rop链劫持控制流的题,无心之举导致的反编译失效)也没必要深究,遇到之后再分析就行
然后是函数指针篡改,感觉一出现ida很容易抽风,基本上就是动调的时候修就行(除非恶意构造)
最后立个flag,有空把IDA反编译也写一篇ida反编译是真喜欢抽风啊。虽然这俩并不是啥必要学的东西,也不难,但是搞清楚一点确确实实在分析很多垃圾二进制汇编的时候有帮助
上一篇
初探python bytecode
下一篇
cv与一些classify事项记录
Loading...
目录
文章列表
Hi~, I ‘m moyao
reverse
pwn
pentest
iot
android
others
ctf
iOS