手动脱壳的主要步骤是: 查壳(PEiD),脱壳(Ollydbg)
首先必须的工具要准备好,
查壳工具为PEiD0.95 【0.94的多,但是2个版本的一样的】
手动脱壳建议大家用,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有多处循环点。对付循环时,只能让程序向前运行,不能让它往回跳,要想法跳出循环圈。
步骤一:查壳
步骤二:载入Ollydbg
00413330 > 60 PUSHAD
--------->F8单步跟踪
00413331 BE 15F04000 MOV ESI,记事本.0040F015
00413336 8DBE EB1FFFFF LEA EDI,DWORD PTR DS:[ESI+FFFF1FEB]
0041333C 57 PUSH EDI
0041333D 83CD FF OR EBP,FFFFFFFF
00413340 EB 10 JMP SHORT 记事本.00413352
00413342 90 NOP
00413343 90 NOP
00413344 90 NOP
00413345 90 NOP
00413346 90 NOP
00413347 90 NOP
00413348 8A06 MOV AL,BYTE PTR DS:[ESI]
0041334A 46 INC ESI
0041334B 8807 MOV BYTE PTR DS:[EDI],AL
0041334D 47 INC EDI
0041334E 01DB ADD EBX,EBX
00413350 75 07 JNZ SHORT 记事本.00413359
00413352 8B1E MOV EBX,DWORD PTR DS:[ESI]
00413354 83EE FC SUB ESI,-4
00413357 11DB ADC EBX,EBX
00413359 ^ 72 ED JB SHORT 记事本.00413348 -------->这里是往回跳的
0041335B B8 01000000 MOV EAX,1 -------->按F4 运行到选定位置
00413360 01DB ADD EBX,EBX
00413362 75 07 JNZ SHORT 记事本.0041336B
00413364 8B1E MOV EBX,DWORD PTR DS:[ESI]
00413366 83EE FC SUB ESI,-4
00413369 11DB ADC EBX,EBX
0041336B 11C0 ADC EAX,EAX
0041336D 01DB ADD EBX,EBX
0041336F ^ 73 EF JNB SHORT 记事本.00413360
00413371 75 09 JNZ SHORT 记事本.0041337C
00413373 8B1E MOV EBX,DWORD PTR DS:[ESI]
00413375 83EE FC SUB ESI,-4
00413378 11DB ADC EBX,EBX
0041337A ^ 73 E4 JNB SHORT 记事本.00413360
0041337C 31C9 XOR ECX,ECX
0041337E 83E8 03 SUB EAX,3
00413381 72 0D JB SHORT 记事本.00413390
00413383 C1E0 08 SHL EAX,8
00413386 8A06 MOV AL,BYTE PTR DS:[ESI]
00413388 46 INC ESI
00413389 83F0 FF XOR EAX,FFFFFFFF
0041338C 74 74 JE SHORT 记事本.00413402
0041338E 89C5 MOV EBP,EAX
00413390 01DB ADD EBX,EBX
00413392 75 07 JNZ SHORT 记事本.0041339B
00413394 8B1E MOV EBX,DWORD PTR DS:[ESI]
00413396 83EE FC SUB ESI,-4
00413399 11DB ADC EBX,EBX
0041339B 11C9 ADC ECX,ECX
0041339D 01DB ADD EBX,EBX
0041339F 75 07 JNZ SHORT 记事本.004133A8
004133A1 8B1E MOV EBX,DWORD PTR DS:[ESI]
004133A3 83EE FC SUB ESI,-4
004133A6 11DB ADC EBX,EBX
004133A8 11C9 ADC ECX,ECX
004133AA 75 20 JNZ SHORT 记事本.004133CC
004133AC 41 INC ECX
004133AD 01DB ADD EBX,EBX
004133AF 75 07 JNZ SHORT 记事本.004133B8
004133B1 8B1E MOV EBX,DWORD PTR DS:[ESI]
004133B3 83EE FC SUB ESI,-4
004133B6 11DB ADC EBX,EBX
004133B8 11C9 ADC ECX,ECX
004133BA 01DB ADD EBX,EBX
004133BC ^ 73 EF JNB SHORT 记事本.004133AD
004133BE 75 09 JNZ SHORT 记事本.004133C9
004133C0 8B1E MOV EBX,DWORD PTR DS:[ESI]
004133C2 83EE FC SUB ESI,-4
004133C5 11DB ADC EBX,EBX
004133C7 ^ 73 E4 JNB SHORT 记事本.004133AD
004133C9 83C1 02 ADD ECX,2
004133CC 81FD 00F3FFFF CMP EBP,-0D00
004133D2 83D1 01 ADC ECX,1
004133D5 8D142F LEA EDX,DWORD PTR DS:[EDI+EBP]
004133D8 83FD FC CMP EBP,-4
004133DB 76 0F JBE SHORT 记事本.004133EC
004133DD 8A02 MOV AL,BYTE PTR DS:[EDX]
004133DF 42 INC EDX
004133E0 8807 MOV BYTE PTR DS:[EDI],AL
004133E2 47 INC EDI
004133E3 49 DEC ECX
004133E4 ^ 75 F7 JNZ SHORT 记事本.004133DD -------->这里是往回跳的
004133E6 ^ E9 63FFFFFF JMP 记事本.0041334E ---------> F4 运行到选定位置 【这里也是往回跳的,下一部是NOP,无用的,只有到8B02 F4】
004133EB 90 NOP
004133EC 8B02 MOV EAX,DWORD PTR DS:[EDX] -----------F4
004133EE 83C2 04 ADD EDX,4
004133F1 8907 MOV DWORD PTR DS:[EDI],EAX
004133F3 83C7 04 ADD EDI,4
004133F6 83E9 04 SUB ECX,4
004133F9 ^ 77 F1 JA SHORT 记事本.004133EC
004133FB 01CF ADD EDI,ECX
004133FD ^ E9 4CFFFFFF JMP 记事本.0041334E ------------>这里往回跳
00413402 5E POP ESI --------------->F4
00413403 89F7 MOV EDI,ESI
00413405 B9 DD000000 MOV ECX,0DD
0041340A 8A07 MOV AL,BYTE PTR DS:[EDI]
0041340C 47 INC EDI
0041340D 2C E8 SUB AL,0E8
0041340F 3C 01 CMP AL,1
00413411 ^ 77 F7 JA SHORT 记事本.0041340A ------------>这里往回跳
00413413 803F 00 CMP BYTE PTR DS:[EDI],0 ------------->F4
00413416 ^ 75 F2 JNZ SHORT 记事本.0041340A ------------>这里往回跳
00413418 8B07 MOV EAX,DWORD PTR DS:[EDI] ------------->F4
0041341A 8A5F 04 MOV BL,BYTE PTR DS:[EDI+4]
0041341D 66:C1E8 08 SHR AX,8
00413421 C1C0 10 ROL EAX,10
00413424 86C4 XCHG AH,AL
00413426 29F8 SUB EAX,EDI
00413428 80EB E8 SUB BL,0E8
0041342B 01F0 ADD EAX,ESI
0041342D 8907 MOV DWORD PTR DS:[EDI],EAX
0041342F 83C7 05 ADD EDI,5
00413432 88D8 MOV AL,BL
00413434 ^ E2 D9 LOOPD SHORT 记事本.0041340F ------------>这里往回跳
00413436 8DBE 00100100 LEA EDI,DWORD PTR DS:[ESI+11000] ------------->F4
0041343C 8B07 MOV EAX,DWORD PTR DS:[EDI]
0041343E 09C0 OR EAX,EAX
00413440 74 3C JE SHORT 记事本.0041347E
00413442 8B5F 04 MOV EBX,DWORD PTR DS:[EDI+4]
00413445 8D8430 143C0100 LEA EAX,DWORD PTR DS:[EAX+ESI+13C14]
0041344C 01F3 ADD EBX,ESI
0041344E 50 PUSH EAX
0041344F 83C7 08 ADD EDI,8
00413452 FF96 A03C0100 CALL DWORD PTR DS:[ESI+13CA0]
00413458 95 XCHG EAX,EBP
00413459 8A07 MOV AL,BYTE PTR DS:[EDI]
0041345B 47 INC EDI
0041345C 08C0 OR AL,AL
0041345E ^ 74 DC JE SHORT 记事本.0041343C
00413460 89F9 MOV ECX,EDI
00413462 57 PUSH EDI
00413463 48 DEC EAX
00413464 F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00413466 55 PUSH EBP
00413467 FF96 A43C0100 CALL DWORD PTR DS:[ESI+13CA4]
0041346D 09C0 OR EAX,EAX
0041346F 74 07 JE SHORT 记事本.00413478
00413471 8903 MOV DWORD PTR DS:[EBX],EAX
00413473 83C3 04 ADD EBX,4
00413476 ^ EB E1 JMP SHORT 记事本.00413459
00413478 FF96 A83C0100 CALL DWORD PTR DS:[ESI+13CA8]
0041347E 61 POPAD
0041347F - E9 48DCFEFF JMP 记事本.004010CC
004133EB 90 NOP
004133EC 8B02 MOV EAX,DWORD PTR DS:[EDX]
004133EE 83C2 04 ADD EDX,4
004133F1 8907 MOV DWORD PTR DS:[EDI],EAX
004133F3 83C7 04 ADD EDI,4
004133F6 83E9 04 SUB ECX,4
004133F9 ^ 77 F1 JA SHORT 记事本.004133EC
004133FB 01CF ADD EDI,ECX
004133FD ^ E9 4CFFFFFF JMP 记事本.0041334E
00413402 5E POP ESI
00413403 89F7 MOV EDI,ESI
00413405 B9 DD000000 MOV ECX,0DD
0041340A 8A07 MOV AL,BYTE PTR DS:[EDI]
0041340C 47 INC EDI
0041340D 2C E8 SUB AL,0E8
0041340F 3C 01 CMP AL,1
00413411 ^ 77 F7 JA SHORT 记事本.0041340A
00413413 803F 00 CMP BYTE PTR DS:[EDI],0
00413416 ^ 75 F2 JNZ SHORT 记事本.0041340A
00413418 8B07 MOV EAX,DWORD PTR DS:[EDI]
0041341A 8A5F 04 MOV BL,BYTE PTR DS:[EDI+4]
0041341D 66:C1E8 08 SHR AX,8
00413421 C1C0 10 ROL EAX,10
00413424 86C4 XCHG AH,AL
00413426 29F8 SUB EAX,EDI
00413428 80EB E8 SUB BL,0E8
0041342B 01F0 ADD EAX,ESI
0041342D 8907 MOV DWORD PTR DS:[EDI],EAX
0041342F 83C7 05 ADD EDI,5
00413432 88D8 MOV AL,BL
00413434 ^ E2 D9 LOOPD SHORT 记事本.0041340F
00413436 8DBE 00100100 LEA EDI,DWORD PTR DS:[ESI+11000]
0041343C 8B07 MOV EAX,DWORD PTR DS:[EDI]
0041343E 09C0 OR EAX,EAX
00413440 74 3C JE SHORT 记事本.0041347E
00413442 8B5F 04 MOV EBX,DWORD PTR DS:[EDI+4]
00413445 8D8430 143C0100 LEA EAX,DWORD PTR DS:[EAX+ESI+13C14]
0041344C 01F3 ADD EBX,ESI
0041344E 50 PUSH EAX
0041344F 83C7 08 ADD EDI,8
00413452 FF96 A03C0100 CALL DWORD PTR DS:[ESI+13CA0]
00413458 95 XCHG EAX,EBP
00413459 8A07 MOV AL,BYTE PTR DS:[EDI]
0041345B 47 INC EDI
0041345C 08C0 OR AL,AL
0041345E ^ 74 DC JE SHORT 记事本.0041343C
00413460 89F9 MOV ECX,EDI
00413462 57 PUSH EDI
00413463 48 DEC EAX
00413464 F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00413466 55 PUSH EBP
00413467 FF96 A43C0100 CALL DWORD PTR DS:[ESI+13CA4]
0041346D 09C0 OR EAX,EAX
0041346F 74 07 JE SHORT 记事本.00413478
00413471 8903 MOV DWORD PTR DS:[EBX],EAX
00413473 83C3 04 ADD EBX,4
00413476 ^ EB E1 JMP SHORT 记事本.00413459 ------------->往回跳
00413478 FF96 A83C0100
CALL DWORD PTR DS:[ESI+13CA8] 【不能再CALL上面F4】
0041347E 61 POPAD ----------->F4
0041347F - E9 48DCFEFF JMP 记事本.004010CC
最后脱壳调试,就OK了。
【最简单的脱UPX方法】:
内存镜像法:
ALT+M打开内存
找到.rsrc,F2下断,F9运行
ALT+M打开内存
找到UPX0,F2下断,F9运行
0040EA01 8903 mov dword ptr ds:[ebx],eax ; kernel32._lwrite ------------->来到这,F8继续
0040EA03 83C3 04 add ebx,4
0040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E9 --------------->回跳
0040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8]
0040EA0E 61 popad ------------------------>F4
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC
---------------------------------------------------------------------------------------------------------------
支持看雪,由于本人之前的账号忘记了,只能申请新的,我会相继给大家出新的教程。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课