首页
社区
课程
招聘
[旧帖] [原创][原创]回答有关花指令的那几个问题 0.00雪花
发表于: 2011-10-10 15:55 2679

[旧帖] [原创][原创]回答有关花指令的那几个问题 0.00雪花

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

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 85
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
其实可以那么理解,例如4=1*4==1+1+1+1;总之就是类似迷惑性的代码,做无用功的作用....
2011-10-10 16:06
0
雪    币: 54
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
恩。这就是垃圾指令了...我主要是回答花指令的那篇帖子提的问题,顺道多说了点
2011-10-10 16:17
0
雪    币: 243
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4






受教了,我就是哪个提问的同学
2011-10-10 22:41
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个可以啊,感觉受益很大
2013-2-1 11:07
0
游客
登录 | 注册 方可回帖
返回
//