有趣的反脱壳方式
最近遇到一个软件,主程序不能直接运行,需要LOADER用WinExec加载,主程序和LOADER任何一个脱壳后都无法正常加载。是VB写的。不知从何下手。请各位兄弟看看如何?下载地址:http://www.skycn.com/soft/24321.html
执行WinExec时有个参数:winasm.exe#@?#AdtHPdb5MWkdNh309dbWb5IHghM5PRO0b5kd#@?#
用这个参数做个内容为“wasm.exe winasm.exe#@?#AdtHPdb5MWkdNh309dbWb5IHghM5PRO0b5kd#@?#”的批处理文件,可以直接打开主程序。当然不是已脱壳的主程序。
用OD调试时可以带参数调试主程序。
LOADER程序校验处:
004429AF 8B46 3C MOV EAX,DWORD PTR DS:[ESI+3C]
004429B2 33C9 XOR ECX,ECX
004429B4 03C6 ADD EAX,ESI
004429B6 2148 58 AND DWORD PTR DS:[EAX+58],ECX
004429B9 8D41 FF LEA EAX,DWORD PTR DS:[ECX-1]
004429BC BF 2083B8ED MOV EDI,EDB88320
004429C1 33D2 XOR EDX,EDX
004429C3 8A16 MOV DL,BYTE PTR DS:[ESI]
004429C5 32D0 XOR DL,AL
004429C7 D1EA SHR EDX,1
004429C9 73 02 JNB SHORT 004429CD ; 004429CD
004429CB 33D7 XOR EDX,EDI
004429CD 41 INC ECX
004429CE 80E1 07 AND CL,7
004429D1 ^ 75 F4 JNZ SHORT 004429C7 ; 004429C7
004429D3 C1E8 08 SHR EAX,8
004429D6 33C2 XOR EAX,EDX
004429D8 46 INC ESI
004429D9 4B DEC EBX
004429DA ^ 7F E5 JG SHORT 004429C1 ; 004429C1
004429DC F7D0 NOT EAX
004429DE 3185 5F1B0000 XOR DWORD PTR SS:[EBP+1B5F],EAX///保存校验值
004429E4 6A 0C PUSH 0C
004429E6 59 POP ECX
004429E7 8DB5 C3030000 LEA ESI,DWORD PTR SS:[EBP+3C3]
004429ED FF76 04 PUSH DWORD PTR DS:[ESI+4]
004429F0 AD LODS DWORD PTR DS:[ESI]
004429F1 85C0 TEST EAX,EAX
004429F3 74 05 JE SHORT 004429FA ; 004429FA
004429F5 ^ E2 F9 LOOPD SHORT 004429F0 ; 004429F0
004429F7 F9 STC
004429F8 72 08 JB SHORT 00442A02 ; 00442A02
004429FA 58 POP EAX
004429FB 61 POPAD
004429FC 6A 00 PUSH 0
004429FE FF5424 E0 CALL NEAR DWORD PTR SS:[ESP-20]
00442A02 58 POP EAX
00442A03 8DB5 D3030000 LEA ESI,DWORD PTR SS:[EBP+3D3]
00442A09 8B36 MOV ESI,DWORD PTR DS:[ESI]
00442A0B AC LODS BYTE PTR DS:[ESI]
00442A0C 04 34 ADD AL,34
00442A0E 75 0C JNZ SHORT 00442A1C
00442C4B 8B85 80D24000 MOV EAX,DWORD PTR SS:[EBP+40D280]///取出原告保存的校验值
00442C51 50 PUSH EAX
00442C52 35 49AB5D13 XOR EAX,135DAB49
00442C57 2D F7264E8C SUB EAX,8C4E26F7
00442C5C 5B POP EBX ; winasm.0044207F
00442C5D 6A 01 PUSH 1
00442C5F 58 POP EAX
00442C60 6A 08 PUSH 8
00442C62 59 POP ECX
00442C63 0F85 12060000 JNZ 0044327B///校验,不等于0则出错。
00442C69 74 19 JE SHORT 00442C84 ; 00442C84
00442C6B 78 50 JS SHORT 00442CBD ; 00442CBD
00442C6D 6B57 5A 38 IMUL EDX,DWORD PTR DS:[EDI+5A],38
00442C71 48 DEC EAX
00442C72 61 POPAD
00442C73 75 33 JNZ SHORT 00442CA8 ; 00442CA8
00442C75 45 INC EBP
00442C76 64:59 POP ECX ; 多余的前缀
00442C78 4D DEC EBP
00442C79 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O 命令
00442C7A 3900 CMP DWORD PTR DS:[EAX],EAX
另一处校验:
0044300D 8D41 FF LEA EAX,DWORD PTR DS:[ECX-1]
00443010 57 PUSH EDI
00443011 BF 2083B8ED MOV EDI,EDB88320
00443016 33D2 XOR EDX,EDX
00443018 8A16 MOV DL,BYTE PTR DS:[ESI]
0044301A 32D0 XOR DL,AL
0044301C D1EA SHR EDX,1
0044301E 73 02 JNB SHORT 00443022 ; 00443022
00443020 33D7 XOR EDX,EDI
00443022 41 INC ECX
00443023 80E1 07 AND CL,7
00443026 ^ 75 F4 JNZ SHORT 0044301C ; 0044301C
00443028 C1E8 08 SHR EAX,8
0044302B 33C2 XOR EAX,EDX
0044302D 46 INC ESI
0044302E 4B DEC EBX
0044302F ^ 7F E5 JG SHORT 00443016 ; 00443016
00443031 5F POP EDI
00443032 F7D0 NOT EAX
00443034 3387 8ED34000 XOR EAX,DWORD PTR DS:[EDI+40D38E]///
0044303A 35 6137E43C XOR EAX,3CE43761
0044303F 3385 FED34000 XOR EAX,DWORD PTR SS:[EBP+40D3FE]///
00443045 F7D0 NOT EAX
00443047 2B85 82D34000 SUB EAX,DWORD PTR SS:[EBP+40D382]///
0044304D 61 POPAD
0044304E 0F85 27020000 JNZ 0044327B ///不等于0则出错。
00443054 50 PUSH EAX
00443055 51 PUSH ECX
00443056 E8 1A000000 CALL 00443075 ; 00443075
0044305B 83F8 FF CMP EAX,-1
0044305E 0F84 17020000 JE 0044327B ; 0044327B
00443064 83C7 0C ADD EDI,0C
00443067 4E DEC ESI
00443068 7E 06 JLE SHORT 00443070 ; 00443070
0044306A FFA5 48C34000 JMP NEAR DWORD PTR SS:[EBP+40C348]
00443070 E9 02010000 JMP 00443177 ; 00443177
其余情况还没发现。请兄弟们一起动手搞定它
[课程]FART 脱壳王!加量不加价!FART作者讲授!