首先用PEID载入EXE显示yoda's cryptor 1.x / modified
第一次手脱,花了3个小时 :(
到达OEP之后是这个样子。
00401000 68 0180C300 PUSH cabalmai.00C38001 ; OEP
00401005 E8 01000000 CALL cabalmai.0040100B
0040100A C3 RETN
0040100B C3 RETN
0040100C B0 7F MOV AL,7F
0040100E 0AB1 6B03389C OR DH,BYTE PTR DS:[ECX+9C38036B]
00401014 2D CA2D3F13 SUB EAX,133F2DCA
00401019 3337 XOR ESI,DWORD PTR DS:[EDI]
0040101B 3B4D 9C CMP ECX,DWORD PTR SS:[EBP-64]
0040101E 19F6 SBB ESI,ESI
00401020 6F OUTS DX,DWORD PTR ES:[EDI] ; I/O 命令
00401021 - 79 A9 JNS SHORT cabalmai.00400FCC
00401023 0C 32 OR AL,32
00401025 89CC MOV ESP,ECX
00401027 2BEC SUB EBP,ESP
00401029 FD STD
0040102A B8 447278C6 MOV EAX,C6787244
0040102F 85A4EC B5FDE62B TEST DWORD PTR SS:[ESP+EBP*8+2BE6FDB5],E>
00401036 6282 77F6DE48 BOUND EAX,QWORD PTR DS:[EDX+48DEF677]
0040103C 7E 16 JLE SHORT cabalmai.00401054
0040103E CF IRETD
明显不是OPE啦~~,但是这个好眼熟哦,但是一时想不起是什么了,想用OD DUMP出来查查,呵呵。
看了下DUMP出来的文件,增肥不少,从1。3M到了8。3M
用PEID查壳 显示 ASProtect 1.33 - 2.1 Registered -> Alexey Solodovnikov *
怪不得这么熟悉。。。。。
不过我记得以前我也给自己的软件加过这个组合壳的,新版的ASPR是加不上的,所以我猜是老版本的。于是照着看雪精华里的脱壳教程来,最后在给代码段下访问断点飞回OEP处却是这个样子
00650432 C3 RETN
00650433 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
00650436 64:890D 0000000>MOV DWORD PTR FS:[0],ECX
0065043D 59 POP ECX
0065043E 5F POP EDI
0065043F 5E POP ESI
00650440 5B POP EBX
00650441 C9 LEAVE
00650442 51 PUSH ECX
00650443 C3 RETN
00650444 56 PUSH ESI
00650445 43 INC EBX
00650446 3230 XOR DH,BYTE PTR DS:[EAX]
00650448 58 POP EAX
00650449 43 INC EBX
0065044A 3030 XOR BYTE PTR DS:[EAX],DH
0065044C 55 PUSH EBP
0065044D 8BEC MOV EBP,ESP
0065044F 83EC 08 SUB ESP,8
00650452 53 PUSH EBX
00650453 56 PUSH ESI
00650454 57 PUSH EDI
00650455 55 PUSH EBP
00650456 FC CLD
明显也不像。。。那好我跟着retuen进去看看
0064DBAA BF 94000000 MOV EDI,94
0064DBAF 8BC7 MOV EAX,EDI
0064DBB1 E8 0A2A0000 CALL cabalmai.006505C0
0064DBB6 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0064DBB9 8BF4 MOV ESI,ESP
0064DBBB 893E MOV DWORD PTR DS:[ESI],EDI
0064DBBD 56 PUSH ESI
0064DBBE FF15 78D16A00 CALL DWORD PTR DS:[6AD178]
0064DBC4 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
0064DBC7 890D AC7C7600 MOV DWORD PTR DS:[767CAC],ECX
0064DBCD 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
0064DBD0 A3 B87C7600 MOV DWORD PTR DS:[767CB8],EAX
0064DBD5 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
0064DBD8 8915 BC7C7600 MOV DWORD PTR DS:[767CBC],EDX
0064DBDE 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
0064DBE1 81E6 FF7F0000 AND ESI,7FFF
0064DBE7 8935 B07C7600 MOV DWORD PTR DS:[767CB0],ESI
0064DBED 83F9 02 CMP ECX,2
0064DBF0 74 0C JE SHORT cabalmai.0064DBFE
0064DBF2 81CE 00800000 OR ESI,8000
0064DBF8 8935 B07C7600 MOV DWORD PTR DS:[767CB0],ESI
0064DBFE C1E0 08 SHL EAX,8
0064DC01 03C2 ADD EAX,EDX
0064DC03 A3 B47C7600 MOV DWORD PTR DS:[767CB4],EAX
0064DC08 33F6 XOR ESI,ESI
0064DC0A 56 PUSH ESI
0064DC0B 8B3D B0D16A00 MOV EDI,DWORD PTR DS:[6AD1B0]
0064DC11 FFD7 CALL EDI
其中跟进0064DBBE FF15 78D16A00 CALL DWORD PTR DS:[6AD178]
后发现是以下代码,那应该就是OEP了。
01630700 - E9 D9231E7B JMP kernel32.GetVersionExA
先DUMP出来拿修复下IAT。用ImportREC修复后发现是这个样
0064DBAA > ? BF 94000000 MOV EDI,94
0064DBAF . 8BC7 MOV EAX,EDI
0064DBB1 . E8 0A2A0000 CALL dumped1_.006505C0
0064DBB6 . 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0064DBB9 . 8BF4 MOV ESI,ESP
0064DBBB . 893E MOV DWORD PTR DS:[ESI],EDI
0064DBBD . 56 PUSH ESI ; /pVersionInformation
0064DBBE . FF15 78D16A00 CALL DWORD PTR DS:[<&kernel32.GetVersion>; \GetVersionExA
0064DBC4 . 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
0064DBC7 . 890D AC7C7600 MOV DWORD PTR DS:[767CAC],ECX
0064DBCD . 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
0064DBD0 . A3 B87C7600 MOV DWORD PTR DS:[767CB8],EAX
0064DBD5 . 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
0064DBD8 . 8915 BC7C7600 MOV DWORD PTR DS:[767CBC],EDX
0064DBDE . 8B76 0C MOV ESI,DWORD PTR DS:[ESI+C]
0064DBE1 . 81E6 FF7F0000 AND ESI,7FFF
0064DBE7 . 8935 B07C7600 MOV DWORD PTR DS:[767CB0],ESI
0064DBED . 83F9 02 CMP ECX,2
0064DBF0 . 74 0C JE SHORT dumped1_.0064DBFE
0064DBF2 . 81CE 00800000 OR ESI,8000
0064DBF8 . 8935 B07C7600 MOV DWORD PTR DS:[767CB0],ESI
0064DBFE > C1E0 08 SHL EAX,8
0064DC01 . 03C2 ADD EAX,EDX
0064DC03 . A3 B47C7600 MOV DWORD PTR DS:[767CB4],EAX
0064DC08 . 33F6 XOR ESI,ESI
0064DC0A . 56 PUSH ESI
0064DC0B . 8B3D B0D16A00 MOV EDI,DWORD PTR DS:[6AD1B0]
0064DC11 . FFD7 CALL EDI
0064DC13 . 66:8138 4D5A CMP WORD PTR DS:[EAX],5A4D
0064DC18 . 75 1F JNZ SHORT dumped1_.0064DC39
0064DC1A . 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
0064DC1D . 03C8 ADD ECX,EAX
0064DC1F . 8139 50450000 CMP DWORD PTR DS:[ECX],4550
0064DC25 . 75 12 JNZ SHORT dumped1_.0064DC39
0064DC27 . 0FB741 18 MOVZX EAX,WORD PTR DS:[ECX+18]
0064DC2B . 3D 0B010000 CMP EAX,10B
0064DC30 . 74 1F JE SHORT dumped1_.0064DC51
0064DC32 . 3D 0B020000 CMP EAX,20B
0064DC37 . 74 05 JE SHORT dumped1_.0064DC3E
0064DC39 > 8975 E4 MOV DWORD PTR SS:[EBP-1C],ESI
0064DC3C . EB 27 JMP SHORT dumped1_.0064DC65
0064DC3E > 83B9 84000000>CMP DWORD PTR DS:[ECX+84],0E
0064DC45 .^ 76 F2 JBE SHORT dumped1_.0064DC39
0064DC47 . 33C0 XOR EAX,EAX
0064DC49 . 39B1 F8000000 CMP DWORD PTR DS:[ECX+F8],ESI
0064DC4F . EB 0E JMP SHORT dumped1_.0064DC5F
0064DC51 > 8379 74 0E CMP DWORD PTR DS:[ECX+74],0E
0064DC55 .^ 76 E2 JBE SHORT dumped1_.0064DC39
0064DC57 . 33C0 XOR EAX,EAX
0064DC59 . 39B1 E8000000 CMP DWORD PTR DS:[ECX+E8],ESI
0064DC5F > 0F95C0 SETNE AL
0064DC62 . 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
0064DC65 > 6A 01 PUSH 1
0064DC67 . E8 0E3B0000 CALL dumped1_.0065177A
0064DC6C . 59 POP ECX
0064DC6D . 85C0 TEST EAX,EAX
0064DC6F . 75 08 JNZ SHORT dumped1_.0064DC79
0064DC71 . 6A 1C PUSH 1C
0064DC73 . E8 ACFEFFFF CALL dumped1_.0064DB24
0064DC78 . 59 POP ECX
0064DC79 > E8 99370000 CALL dumped1_.00651417
0064DC7E . 85C0 TEST EAX,EAX
0064DC80 . 75 08 JNZ SHORT dumped1_.0064DC8A
0064DC82 . 6A 10 PUSH 10
0064DC84 . E8 9BFEFFFF CALL dumped1_.0064DB24
0064DC89 . 59 POP ECX
0064DC8A > E8 493A0000 CALL dumped1_.006516D8
0064DC8F . 8975 FC MOV DWORD PTR SS:[EBP-4],ESI
0064DC92 . E8 0DA60000 CALL dumped1_.006582A4
0064DC97 . 85C0 TEST EAX,EAX
0064DC99 . 7D 08 JGE SHORT dumped1_.0064DCA3
0064DC9B . 6A 1B PUSH 1B
0064DC9D . E8 5DFEFFFF CALL dumped1_.0064DAFF
0064DCA2 . 59 POP ECX
0064DCA3 > FF15 C8D06A00 CALL DWORD PTR DS:[6AD0C8]
0064DCA9 . A3 7424C300 MOV DWORD PTR DS:[C32474],EAX
0064DCAE . E8 88B10000 CALL dumped1_.00658E3B
0064DCB3 . A3 247D7600 MOV DWORD PTR DS:[767D24],EAX
0064DCB8 . E8 DCB00000 CALL dumped1_.00658D99
0064DCBD . 85C0 TEST EAX,EAX
0064DCBF . 7D 08 JGE SHORT dumped1_.0064DCC9
0064DCC1 . 6A 08 PUSH 8
0064DCC3 . E8 37FEFFFF CALL dumped1_.0064DAFF
0064DCC8 . 59 POP ECX
0064DCC9 > E8 98AE0000 CALL dumped1_.00658B66
0064DCCE . 85C0 TEST EAX,EAX
0064DCD0 . 7D 08 JGE SHORT dumped1_.0064DCDA
0064DCD2 . 6A 09 PUSH 9
0064DCD4 . E8 26FEFFFF CALL dumped1_.0064DAFF
0064DCD9 . 59 POP ECX
0064DCDA > 6A 01 PUSH 1
0064DCDC . E8 69B1FFFF CALL dumped1_.00648E4A
0064DCE1 . 59 POP ECX
0064DCE2 . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX
0064DCE5 . 3BC6 CMP EAX,ESI
0064DCE7 . 74 07 JE SHORT dumped1_.0064DCF0
0064DCE9 . 50 PUSH EAX
0064DCEA . E8 10FEFFFF CALL dumped1_.0064DAFF
0064DCEF . 59 POP ECX
0064DCF0 > 8975 BC MOV DWORD PTR SS:[EBP-44],ESI
0064DCF3 . 8D45 90 LEA EAX,DWORD PTR SS:[EBP-70]
0064DCF6 . 50 PUSH EAX ; /pStartupinfo
0064DCF7 . FF15 CCD06A00 CALL DWORD PTR DS:[<&kernel32.GetStartup>; \GetStartupInfoA
0064DCFD . E8 07AE0000 CALL dumped1_.00658B09
但是我记得VC++的程序GetVersionExA与GetStartupInfoA之间没这么多奇怪的代码,两个函数之间距离应该是很短的,并且这个DUMP出来的程序不能执行
一到0064DC11 . FFD7 CALL EDI
就说无法执行地址00000000
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!