-
-
[旧帖]
[原创][原创]回答有关花指令的那几个问题
0.00雪花
-
发表于:
2011-10-10 15:55
2680
-
[旧帖] [原创][原创]回答有关花指令的那几个问题
0.00雪花
刚才在另一个板块看到一位同学问的关于花指令的问题,本来想直接跟帖作答,发现自己没有权限,微囧...那只能在这试着回答了,希望有所帮助。
花指令的目标主要是为了使得反汇编以后的结果出现错误。而一般的调试工具,是进行静态反汇编,就是静态扫描二进制流,然后根据一定的规则截取再转换为对应的汇编指令并显示出来。而反汇编时有两种方法,线性扫描和递归扫描。具体的内容现在记不清楚,其中的区别在于遇到跳转指令和子程序调用指令时的处理方法不同。线性扫描不进入跳转地址或子函数内部继续反汇编,而递归扫描是要进去再扫描。
这样就可以解释清楚为什么反汇编出来的结果是错误的,那是因为调试器在反汇编的过程中错误的截取了指令,比如跳转指令跳转到了一条指令中间。但是由于这条跳转指令的执行条件永远达不到,所以在执行的过程中不会出现问题。还有比如在指令的中间截取与下一条指令的一半合起来当做一条指令进行了反汇编。但是在执行的时候,比如跳转的地址肯定是一条有效的指令的起始地址。这样说吧,花指令只是“看着错”,但是“做得对”。
花指令在对抗反汇编的过程中是有作用,也只是对静态分析而已。在动态分析的过程中都会被发现&剔除。因此会加入一些垃圾指令,垃圾之灵不同于花指令的地方在于,它是会执行的。反汇编的结果都是正确的,但是不论是在静态分析和动态分析的过程中都不能绕过。必须逐条分析,可能分析了数十条指令了,突然发现他们合起来就是一个入栈和出栈,最后还是等于什么都没做。这样对于破解者的耐心是一个挑战。
以上是我理解的一些内容,欢迎大家拍砖~
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法