小弟学脱壳时间不长,所以先按照动画[UPX-ScramblerRC1.x手动脱壳].这是stasi的作品,里面讲解的很详细,很适合我这样的bird.
我是按照作者的步骤跟了一遍,下面是stasi的原文:
加壳类型:UPX-Scrambler RC1.x -> ┫nT?L [重叠]
壳类介绍:UPX-Scrambler并不是壳,而是简单在的UPX加壳的程序动了些手脚,这样的目的就是不能用UPX-d或UPX外壳程序脱壳。壳的强度不是很大具体的脱壳方法和upx基本一样。
脱壳对象:小凤居的密码结巴4.20注册版chinesehack.exe(软件发到我邮箱的,指明举这个例子,小凤不要在意啊)
查壳工具:PEiD
脱壳工具:Ollydbg+ollydump
修正pe工具:LordPE (当然用ImportREC也可以的,两者各有千秋)
用Ollydbg载入,提示是压缩代码吗?就是加过壳的意思!是否要继续分析?它要能分析了,我们还干什么啊?选不要。
看到代码初始段:
00427EBF > 90 NOP
00427EC0 61 POPAD 〈=是不是很熟啊?UPX的出口特征指令,但
UPX-Scrambler把它放在入口处
00427EC1 BE 00E04100 MOV ESI,chineseh.0041E000
00427EC6 8DBE 0030FEFF LEA EDI,DWORD PTR DS:[ESI+FFFE3000]
00427ECC 57 PUSH EDI
00427ECD 83CD FF OR EBP,FFFFFFFF
00427ED0 EB 10 JMP SHORT chineseh.00427EE2 〈=跳
00427ED2 EB 00 JMP SHORT chineseh.00427ED4
00427ED4 ^ EB EA JMP SHORT chineseh.00427EC0
00427ED6 ^ EB E8 JMP SHORT chineseh.00427EC0
00427ED8 8A06 MOV AL,BYTE PTR DS:[ESI]
00427EDA 46 INC ESI
00427EDB 8807 MOV BYTE PTR DS:[EDI],AL
00427EDD 47 INC EDI
00427EDE 01DB ADD EBX,EBX
00427EE0 75 07 JNZ SHORT chineseh.00427EE9
00427EE2 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427EE4 83EE FC SUB ESI,-4
00427EE7 11DB ADC EBX,EBX
00427EE9 ^ 72 ED JB SHORT chineseh.00427ED8 〈=有回跳
00427EEB B8 01000000 MOV EAX,1 〈=直接执行到这
00427EF0 01DB ADD EBX,EBX
00427EF2 75 07 JNZ SHORT chineseh.00427EFB 〈=跳
00427EF4 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427EF6 83EE FC SUB ESI,-4
00427EF9 11DB ADC EBX,EBX
00427EFB 11C0 ADC EAX,EAX
00427EFD 01DB ADD EBX,EBX
00427EFF ^ 73 EF JNB SHORT chineseh.00427EF0
00427F01 75 09 JNZ SHORT chineseh.00427F0C 〈=跳
00427F03 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427F05 83EE FC SUB ESI,-4
00427F08 11DB ADC EBX,EBX
00427F0A ^ 73 E4 JNB SHORT chineseh.00427EF0
00427F0C 31C9 XOR ECX,ECX
00427F0E 83E8 03 SUB EAX,3
00427F11 72 0D JB SHORT chineseh.00427F20
00427F13 C1E0 08 SHL EAX,8
00427F16 8A06 MOV AL,BYTE PTR DS:[ESI]
00427F18 46 INC ESI
00427F19 83F0 FF XOR EAX,FFFFFFFF
00427F1C 74 74 JE SHORT chineseh.00427F92
00427F1E 89C5 MOV EBP,EAX
00427F20 01DB ADD EBX,EBX
00427F22 75 07 JNZ SHORT chineseh.00427F2B 〈=跳
00427F24 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427F26 83EE FC SUB ESI,-4
00427F29 11DB ADC EBX,EBX
00427F2B 11C9 ADC ECX,ECX
00427F2D 01DB ADD EBX,EBX
00427F2F 75 07 JNZ SHORT chineseh.00427F38 〈=跳
00427F31 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427F33 83EE FC SUB ESI,-4
00427F36 11DB ADC EBX,EBX
00427F38 11C9 ADC ECX,ECX
00427F3A 75 20 JNZ SHORT chineseh.00427F5C 〈=跳
00427F3C 41 INC ECX
00427F3D 01DB ADD EBX,EBX
00427F3F 75 07 JNZ SHORT chineseh.00427F48
00427F41 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427F43 83EE FC SUB ESI,-4
00427F46 11DB ADC EBX,EBX
00427F48 11C9 ADC ECX,ECX
00427F4A 01DB ADD EBX,EBX
00427F4C ^ 73 EF JNB SHORT chineseh.00427F3D
00427F4E 75 09 JNZ SHORT chineseh.00427F59
00427F50 8B1E MOV EBX,DWORD PTR DS:[ESI]
00427F52 83EE FC SUB ESI,-4
00427F55 11DB ADC EBX,EBX
00427F57 ^ 73 E4 JNB SHORT chineseh.00427F3D
00427F59 83C1 02 ADD ECX,2
00427F5C 81FD 00F3FFFF CMP EBP,-0D00
00427F62 83D1 01 ADC ECX,1
00427F65 8D142F LEA EDX,DWORD PTR DS:[EDI+EBP]
00427F68 83FD FC CMP EBP,-4
00427F6B 76 0F JBE SHORT chineseh.00427F7C 〈=跳
00427F6D 8A02 MOV AL,BYTE PTR DS:[EDX]
00427F6F 42 INC EDX
00427F70 8807 MOV BYTE PTR DS:[EDI],AL
00427F72 47 INC EDI
00427F73 49 DEC ECX
00427F74 ^ 75 F7 JNZ SHORT chineseh.00427F6D
00427F76 ^ E9 63FFFFFF JMP chineseh.00427EDE
00427F7B 90 NOP
00427F7C 8B02 MOV EAX,DWORD PTR DS:[EDX]
00427F7E 83C2 04 ADD EDX,4
00427F81 8907 MOV DWORD PTR DS:[EDI],EAX
00427F83 83C7 04 ADD EDI,4
00427F86 83E9 04 SUB ECX,4
00427F89 ^ 77 F1 JA SHORT chineseh.00427F7C
00427F8B 01CF ADD EDI,ECX
00427F8D ^ E9 4CFFFFFF JMP chineseh.00427EDE 〈=有回跳
00427F92 5E POP ESI 〈=直接执行到这
00427F93 89F7 MOV EDI,ESI
00427F95 B9 EA060000 MOV ECX,6EA
00427F9A 8A07 MOV AL,BYTE PTR DS:[EDI]
00427F9C 47 INC EDI
00427F9D 2C E8 SUB AL,0E8
00427F9F 3C 01 CMP AL,1
00427FA1 ^ 77 F7 JA SHORT chineseh.00427F9A
00427FA3 803F 05 CMP BYTE PTR DS:[EDI],5
00427FA6 ^ 75 F2 JNZ SHORT chineseh.00427F9A
00427FA8 8B07 MOV EAX,DWORD PTR DS:[EDI] 〈=直接执行到这
00427FAA 8A5F 04 MOV BL,BYTE PTR DS:[EDI+4]
00427FAD 66:C1E8 08 SHR AX,8
00427FB1 C1C0 10 ROL EAX,10
00427FB4 86C4 XCHG AH,AL
00427FB6 29F8 SUB EAX,EDI
00427FB8 80EB E8 SUB BL,0E8
00427FBB 01F0 ADD EAX,ESI
00427FBD 8907 MOV DWORD PTR DS:[EDI],EAX
00427FBF 83C7 05 ADD EDI,5
00427FC2 89D8 MOV EAX,EBX
00427FC4 ^ E2 D9 LOOPD SHORT chineseh.00427F9F
00427FC6 8DBE 00500200 LEA EDI,DWORD PTR DS:[ESI+25000] 〈=直接执行到这
00427FCC 8B07 MOV EAX,DWORD PTR DS:[EDI]
00427FCE 09C0 OR EAX,EAX
00427FD0 74 45 JE SHORT chineseh.00428017
00427FD2 8B5F 04 MOV EBX,DWORD PTR DS:[EDI+4]
00427FD5 8D8430 A0940200 LEA EAX,DWORD PTR DS:[EAX+ESI+294A0]
00427FDC 01F3 ADD EBX,ESI
00427FDE 50 PUSH EAX
00427FDF 83C7 08 ADD EDI,8
00427FE2 FF96 7C950200 CALL DWORD PTR DS:[ESI+2957C]
00427FE8 95 XCHG EAX,EBP
00427FE9 8A07 MOV AL,BYTE PTR DS:[EDI]
00427FEB 47 INC EDI
00427FEC 08C0 OR AL,AL
00427FEE ^ 74 DC JE SHORT chineseh.00427FCC
00427FF0 89F9 MOV ECX,EDI
00427FF2 79 07 JNS SHORT chineseh.00427FFB 〈=跳
00427FF4 0FB707 MOVZX EAX,WORD PTR DS:[EDI]
00427FF7 47 INC EDI
00427FF8 50 PUSH EAX
00427FF9 47 INC EDI
00427FFA B9 5748F2AE MOV ECX,AEF24857
00427FFF 55 PUSH EBP
00428000 FF96 80950200 CALL DWORD PTR DS:[ESI+29580]
00428006 09C0 OR EAX,EAX
00428008 74 07 JE SHORT chineseh.00428011
0042800A 8903 MOV DWORD PTR DS:[EBX],EAX
0042800C 83C3 04 ADD EBX,4
0042800F ^ EB D8 JMP SHORT chineseh.00427FE9
00428011 FF96 84950200 CALL DWORD PTR DS:[ESI+29584]
00428017 60 PUSHAD 〈=出口特征指令,oep就在jmp后
00428018 - E9 C969FEFF JMP chineseh.0040E9E6
0040E9E6 55 PUSH EBP 〈=是oep 用Od的Dump插件直接脱壳。
0040E9E7 8BEC MOV EBP,ESP
0040E9E9 6A FF PUSH -1
0040E9EB 68 60124100 PUSH chineseh.00411260
0040E9F0 68 72EB4000 PUSH chineseh.0040EB72 ; JMP to MSVCRT._except_handler3
0040E9F5 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
0040E9FB 50 PUSH EAX
0040E9FC 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
0040EA03 83EC 68 SUB ESP,68
0040EA06 53 PUSH EBX
运行软件发现初始错误,就要修正pe,打开LordPE,选择rebulidpe,选择要修复的文件,ok之后,整个脱壳就完成了。软件可以正常运行,查壳发现没有加壳,那是意料之中的时:)
◇与我联系
作者:stasi[dfcg] qq:199882871 email:stasi@citiz.net & [email]stasi@163.com[/email]
2004年2月19日
现在的问题是脱壳解决了,peid也显示脱壳成功了,然后用lordpe来rebuildpe.修复后,程序执行出现了错误!见图!
先谢谢大家了,很想利用这个教程联系下手动脱壳!希望能得到大家的指点!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)