【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教
【调试环境】:Win2003、OllyDBD、PEiD、LordPE、ImportREC
【脱壳过程】:
前两天有人问我能不能脱一个软件的壳,我试了下,发现是用的 Armadillo CopyM-II+Code Splicing+CC方式加的壳,按看雪论坛的教程走了下,脱壳成功。特写下来作一笔记共享。(附注:XP以下的系统就别看了,2000下不能这么脱)
一、OEP
下断BP WaitForDebugEvent,F9,暂停:
0012BCB8 005058BF /CALL 到 WaitForDebugEvent 来自 MSEND.005058B9
0012BCBC 0012CD90 |pDebugEvent = 0012CD90
0012BCC0 000003E8 \Timeout = 1000. ms
右击堆栈,0012CD90处跟随,然后进代码窗口005058BF ,Ctrl+F,搜索:OR EAX,FFFFFFF8
00505E8F . 83C8 F8 OR EAX,FFFFFFF8
向上找到
00505E43 > 83BD CCF5FFFF>CMP DWORD PTR SS:[EBP-A34],0
00505E4A . 0F8C A8020000 JL MSEND1.005060F8
00505E50 . 8B8D CCF5FFFF MOV ECX,DWORD PTR SS:[EBP-A34]
00505E56 . 3B0D 480F5400 CMP ECX,DWORD PTR DS:[540F48]
00505E5C . 0F8D 96020000 JGE MSEND1.005060F8
00505E62 . 8B95 40F6FFFF MOV EDX,DWORD PTR SS:[EBP-9C0]
在00505E43这里下断点,然后把DWORD PTR SS:[EBP-A34]清0,此时数据窗口中:
0012CDA8 004AF0A0 MSEND1.004AF0A0
二、DUMP
现在继续向下找到这里:
00505F0D . 51 PUSH ECX
00505F0E . E8 2F210000 CALL MSEND1.00508042
00505F13 . 83C4 0C ADD ESP,0C
00505F16 25 FF000000 AND EAX,0FF
//这里打补丁
00505F1B 85C0 TEST EAX,EAX
00505F1D 0F84 D5010000 JE MSEND1.005060F8
00505F23 837D D8 00 CMP DWORD PTR SS:[EBP-28],0
补丁代码:
00505F16 FF85 CCF5FFFF INC DWORD PTR SS:[EBP-A34]
00505F1C C705 4C0F5400>MOV DWORD PTR DS:[540F4C],1
00505F26 ^ E9 18FFFFFF JMP MSEND1.00505E43
然后去005060F8处下断,F9停下,继续打补丁:
005060F8 68 C0080000 PUSH 8C0
005060FD E8 2B31347C CALL kernel32.DebugActiveProcessStop
先保证设置你的OD为实时调试器,然后再运行一下。
这时你看到了什么?OD自动附加到了子进程里面了,并且停在OEP处,这时候就可以把Code Splicing段保存下来了,Alt+M打开内存窗口,找到类型=Priv 访问=RWE的区段,备份到文件。
内存映射, 条目 31
地址=039D0000
大小=00020000 (131072.)
属主= 039D0000 (自身)
区段=
类型=Priv 00021040
访问=RWE
初始访问=RWE
补上Code Splicing
此时LODEPE上场,先DUMP下主程序,然后从磁盘载入刚才保存的Code Splicing段,修正RVA后保存文件。
三、IAT修复
因为这个软件没有使用IAT乱序,所以和一般的方法没什么区别了,用OD打开,下断BP DebugActiveProcess,再附加,IMR修复,一切都是“流水作业”(jingulong语)。
四、CC
这里偶不敢多言,前人早有论述,可惜看不懂,所以基本上是连蒙带猜的,好在CC不算多,改了几处INT3地址
004ADF81 CC INT3
004ADF82 ^ 76 B8 JBE SHORT dumpedm_.004ADF3C
004ADF84 60 PUSHAD
004ADF85 48 DEC EAX
004ADF86 8B0D 70FD4B00 MOV ECX,DWORD PTR DS:[4BFD70]
004ADF8C A1 78FD4B00 MOV EAX,DWORD PTR DS:[4BFD78]
004ADF91 8B15 74FD4B00 MOV EDX,DWORD PTR DS:[4BFD74]
004ADF97 66:83FA 00 CMP DX,0
004ADF9B CC INT3
004ADF9C 2D C700C4F1 SUB EAX,F1C400C7
004ADFA1 0200 ADD AL,BYTE PTR DS:[EAX]
004ADFA3 33C0 XOR EAX,EAX
004ADFA5 C3 RETN
004ADFA6 66:83F9 3C CMP CX,3C
004ADFAA CC INT3
004ADFAB 35 C7002A23 XOR EAX,232A00C7
004ADFB0 3036 XOR BYTE PTR DS:[ESI],DH
004ADFB2 C740 04 236B313>MOV DWORD PTR DS:[EAX+4],32316B23
004ADFB9 66:C740 08 3334 MOV WORD PTR DS:[EAX+8],3433
004ADFBF 33C0 XOR EAX,EAX
004ADFC1 C3 RETN
004ADFC2 66:83F9 32 CMP CX,32
004ADFC6 CC INT3
004ADFC7 3E:C700 C3C0B1A>MOV DWORD PTR DS:[EAX],A6B1C0C3
004ADFCE C740 04 C8EDBCF>MOV DWORD PTR DS:[EAX+4],FEBCEDC8
004ADFD5 66:C740 08 BAC3 MOV WORD PTR DS:[EAX+8],0C3BA
004ADFDB 33C0 XOR EAX,EAX
004ADFDD C3 RETN
改为:
004ADF81 90 NOP
004ADF82 90 NOP
004ADF83 90 NOP
004ADF84 90 NOP
004ADF85 48 DEC EAX
004ADF86 8B0D 70FD4B00 MOV ECX,DWORD PTR DS:[4BFD70]
004ADF8C A1 78FD4B00 MOV EAX,DWORD PTR DS:[4BFD78]
004ADF91 8B15 74FD4B00 MOV EDX,DWORD PTR DS:[4BFD74]
004ADF97 66:83FA 00 CMP DX,0
004ADF9B 75 09 JNZ SHORT dumpedm_.004ADFA6
004ADF9D C700 C4F10200 MOV DWORD PTR DS:[EAX],2F1C4
004ADFA3 33C0 XOR EAX,EAX
004ADFA5 C3 RETN
004ADFA6 66:83F9 3C CMP CX,3C
004ADFAA 75 16 JNZ SHORT dumpedm_.004ADFC2
004ADFAC C700 2A233036 MOV DWORD PTR DS:[EAX],3630232A
004ADFB2 C740 04 236B313>MOV DWORD PTR DS:[EAX+4],32316B23
004ADFB9 66:C740 08 3334 MOV WORD PTR DS:[EAX+8],3433
004ADFBF 33C0 XOR EAX,EAX
004ADFC1 C3 RETN
004ADFC2 66:83F9 32 CMP CX,32
004ADFC6 75 16 JNZ SHORT dumpedm_.004ADFDE
004ADFC8 C700 C3C0B1A6 MOV DWORD PTR DS:[EAX],A6B1C0C3
004ADFCE C740 04 C8EDBCF>MOV DWORD PTR DS:[EAX+4],FEBCEDC8
004ADFD5 66:C740 08 BAC3 MOV WORD PTR DS:[EAX+8],0C3BA
004ADFDB 33C0 XOR EAX,EAX
004ADFDD C3 RETN
TEST=>OK.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课