PC端恶意代码的混淆与加壳对抗

前言
之前的实验部分 , 也出现过加壳对抗 , 文中也说了几种工具脱壳和手动脱壳的方法 , 但是之前主要还是针对功能点的分析 。从这里开始 , 主要涉及到的就是逆向对抗了 。
Lab15:花指令
花指令是企图隐藏掉不想被逆向工程的代码块(或其它功能)的一种方法 , 在真实代码中插入一些垃圾代码的同时还保证原有程序的正确执行 , 而程序无法很好地反编译, 难以理解程序内容 , 达到混淆视听的效果 。
__asm { }内联嵌入__emit 0e8h;
当出现这样的语句时 , ida会把E8当作call,然后后面的部分当作调用函数 , 导致出现混淆 。
所以此时一般可以用xor配合跳转语句 , 保证程序的正常运行 。
除此之外 , 也可以加入0E9h等混淆IDA.
call $+5
add [esp],5
retn
当内联嵌入这样的语句时 , 会混淆IDA的流程图 , 这个语句最后的效果相当于一个jmp,等于没有 。
Lab15-1
放入IDA中查看 。

PC端恶意代码的混淆与加壳对抗

文章插图
 
可以看到这里有一个永假跳转 。
这边因为字符开头是E8,会让反编译误认为是Call,这时候把它先转为数据 , 然后把E8排除 , 就出现了原来的代码了 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
PC端恶意代码的混淆与加壳对抗

文章插图
 
接着可以看到下面还有好几处地方一样
PC端恶意代码的混淆与加壳对抗

文章插图
 
用之前的方法修复
可以看到先是判断了参数的个数
PC端恶意代码的混淆与加壳对抗

文章插图
 
之后第一个参数和p比 , 第二个参数和d比 , 第三个参数和q比 , 进行对比 , 最后可以得出当参数是pdq的时候成功 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
Lab15-2
放到IDA中查看 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
可以看到第一个出现返汇编的地方 。
将40115E这一行 , 先变成data,然后把115F变成code , 最后E9转为nop.
PC端恶意代码的混淆与加壳对抗

文章插图
 
PC端恶意代码的混淆与加壳对抗

文章插图
 
PC端恶意代码的混淆与加壳对抗

文章插图
 
之后来到第二处
PC端恶意代码的混淆与加壳对抗

文章插图
 
进行相似的修补 。
PC端恶意代码的混淆与加壳对抗

文章插图
 
继续一样的修补 。
PC端恶意代码的混淆与加壳对抗


推荐阅读