因为给一个程序打启动补丁,之前这个程序没加壳,现在加壳了,区段为vmp1,打启动补丁会被crc,所以试着弄了一下,发现挺简单的
程序拖入OD,然后找到要patch的位置,我要修改这个call
下个访问断点,重新开始,会停下来
停在这里以后,发现,ecx为扫描的地址,esi为储存代码的寄存器,每次扫描一次字节
这时候,我们patch那个call,然后将esi修改为patch前的字节数据,运行起来,发现crc并没有扫到我们的patch
于是构造一个shellcode对代码进行hook
039B0000 - movzx esi,byte ptr [ecx] 039B0003 - push eax 039B0004 - pushfd 039B0005 - mov eax,xxxxxx.dll+5B5CE 039B000A - cmp eax,ecx 039B000C - jne 039B0013 039B000E - mov esi,00000020 039B0013 - add eax,01 039B0016 - cmp eax,ecx 039B0018 - jne 039B001F 039B001A - mov esi,0000002A 039B001F - add eax,01 039B0022 - cmp eax,ecx 039B0024 - jne 039B002B 039B0026 - mov esi,00000005 039B002B - add eax,01 039B002E - cmp eax,ecx 039B0030 - jne 039B0037 039B0032 - mov esi,00000000 039B0037 - popfd 039B0038 - pop eax 039B0039 - xor esi,eax 039B003B - jmp xxxxxx.dll+8809D4
因为我patch四个字节,所以我只加了四个cmp,代码写的可能不是最好的,但是逻辑一眼就可以看懂
最后的效果如下
汇编代码,相信有点基础的都可以看懂,我也就不过多的说了
可能帖子的内容不太符合时代,但是我也是第一次解除壳的crc,没写好或者有建议或者想补充请评论。
[招生]科锐逆向工程师培训(3月6日远程教学报名特惠, 第37期)
最后于 1天前 被刘铠文编辑 ,原因: