首页
社区
课程
招聘
[求助]花指令的困惑
发表于: 2011-10-10 15:11 5849

[求助]花指令的困惑

2011-10-10 15:11
5849

看加密与解密 第二版,得来花指令的基本概念(个人理解):两条指令,在反汇编时会合成一条指令。这样在破解的时候,会因为看了错误的指令,而错误的理解程序,达到干扰解密的目的。判断花指令的依据就是操作的目标代码在反汇编区是否存在,一般的花指令后,合成的指令的指令目的地址会不存在(不能直接通过滚动鼠标看到,通过ctrl+上下箭头键可以)。
现在我有两个问题:
1.花指令,在CPU执行的时候,不会出现错误的执行么?只在反汇编的时候会有?反汇编不能按照CPU执行的状况来反汇编,哪不就不可靠了么?反汇编就整成跟CPU要执行的指令一模一样,为什么不呢?是不是因为是动态反汇编,所以会出现这样的问题呢?如果用静态反汇编,就会反汇编成跟CPU要执行的一模一样了?
2.壳里有很多的call,jmp,jnz所操作的目的指令都是不存在的。这是不是正常的呢?是不是如果是壳,就应该是有很多这样的指令呢,这个判断应该是不对的吧?准确的说法应该是,只要是存在call,jmp,jnz所操作的目的指令不存在,就是有花指令在搞鬼,目的是影响脱壳的。

//小弟水平有限,希望说的您能够明白。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
花指令就是在特定位置插入干扰字段,但是实际运行过程中这些字段会被选择性跳过

由于intel x86 的指令是变长指令(其他的我不清楚,这行不保证正确), 所以指令包含指令头+参数
比如靠便宜计算地址的 调用指令 e8
e8指令的长度是5个字节, 如果指令是这样
address                         inistruction
0x00000000                  e800010000
0x00000005                  xxxxxxxxxxx
。。。。。
0x00000005+0x100      ..........

如上面所示e8指令后面紧跟的32位为偏移量, 这个偏移量加上下一条指令的地址,即为所调用函数的目标地址

而如果你想花掉这段代码比如在e8前再加一格e8-〉 e8e8000100
则你在反汇编时会看到 调试器里面显示为 call  [目标地址为作为e8这条指令地址+5+0x000100e8]   
而真正的执行过程中,该处的第一个e8会被跳过去,会出现你看到的指令和执行结果不一致的现象

而被选作花指令的必须是多字节指令头,比如e8,这样他会使后面真正指令被隐藏, 如果你选择单字节指令如0x90等,或者容易被识破,或者起不到效果

使用花指令关键是选择合适的干扰指令,让他与你的实际指令完美融合(比较少出现破绽的调试器无法正常解析的指令等,这样会漏出破绽), 另一个就是如何跳过干扰指令了,方法很多,自己去找一下

希望对你有帮助
2011-10-10 16:08
1
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
至于壳, 我没真正搞过, 不过应该是这样
壳先将你的可执行代码压缩,然后存储在加了壳的程序某个位置

等到执行的时候,壳程序先于你的程序被调用,

壳将你的真正代码解压,释放到内存

然后壳程序将执行权交给你的执行代码

而你去debug,调试器默认只认为和可执行文件对应的部分是代码, 所以你看到的都是压缩过的东西,不回看出头绪, 而真正执行体是在某个可修改得内存内

不知道这样的理解对不对, 请高手指教
2011-10-10 16:28
0
雪    币: 243
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
感激levizhou的很呢,跟我的理解基本上也差不多,我的问题还是存在。为什么CPU的跟反汇编的不一致?一致了不就爽了!
2011-10-10 17:44
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
反汇编是静态的
就是你的exe文件在被load到内存之后 和硬盘上的东西布局时一样的
调试器只是根据这些东西进行分析 而得到反汇编的结果

而实际运行时有一些东西被动态调整了(这种调整未必会影响执行代码内存布局,但是仍会影响执行顺序)
2011-10-10 17:56
0
雪    币: 243
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
感谢jianghe,感谢levizhou。
花指令是看着错,但做的对。
再次谢之
2011-10-10 22:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习了,感谢!
2011-10-11 20:55
0
游客
登录 | 注册 方可回帖
返回
//