这是一个dll,用fileinfo看是 upx1.90 以下是我遇到的问题。 与fly的《OD手脱UPX加壳的DLL》代码有些不同,请大家往下看。
1128192C C2 0C00 RET 0C
1128192F 83C7 04 ADD EDI,4
11281932 8D5E FC LEA EBX,DWORD PTR DS:[ESI-4]
11281935 31C0 XOR EAX,EAX
11281937 8A07 MOV AL,BYTE PTR DS:[EDI]
//断下 edi=1127190a
11281939 47 INC EDI
1128193A 09C0 OR EAX,EAX
1128193C 74 22 JE SHORT CrackMe.11281960
//重定位处理完毕
1128193E 3C EF CMP AL,0EF
11281940 77 11 JA SHORT CrackMe.11281953
11281942 01C3 ADD EBX,EAX
11281944 8B03 MOV EAX,DWORD PTR DS:[EBX]
11281946 86C4 XCHG AH,AL //UPX壳特征位置
11281948 C1C0 10 ROL EAX,10
1128194B 86C4 XCHG AH,AL
1128194D 01F0 ADD EAX,ESI
1128194F 8903 MOV DWORD PTR DS:[EBX],EAX
11281951 ^ EB E2 JMP SHORT CrackMe.11281935
11281953 24 0F AND AL,0F
11281955 C1E0 10 SHL EAX,10
11281958 66:8B07 MOV AX,WORD PTR DS:[EDI]
1128195B 83C7 02 ADD EDI,2
1128195E ^ EB E2 JMP SHORT CrackMe.11281942
///////////////////////////////////不同开始
11281960 8BAE 40722800 MOV EBP,DWORD PTR DS:[ESI+287240]
11281966 8DBE 00F0FFFF LEA EDI,DWORD PTR DS:[ESI-1000]
1128196C BB 00100000 MOV EBX,1000
11281971 50 PUSH EAX
11281972 54 PUSH ESP
11281973 6A 04 PUSH 4
11281975 53 PUSH EBX
11281976 57 PUSH EDI
11281977 FFD5 CALL EBP
11281979 8D87 E7010000 LEA EAX,DWORD PTR DS:[EDI+1E7]
1128197F 8020 7F AND BYTE PTR DS:[EAX],7F
11281982 8060 28 7F AND BYTE PTR DS:[EAX+28],7F
11281986 58 POP EAX
11281987 50 PUSH EAX
11281988 54 PUSH ESP
11281989 50 PUSH EAX
1128198A 53 PUSH EBX
1128198B 57 PUSH EDI
1128198C FFD5 CALL EBP
1128198E 58 POP EAX
////////////////////////////////////////////不同结束
1128198F 61 POPAD
11281990 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
11281994 6A 00 PUSH 0
11281996 39C4 CMP ESP,EAX
11281998 ^ 75 FA JNZ SHORT CrackMe.11281994
1128199A 83EC 80 SUB ESP,-80
1128199D - E9 CE2ED8FF JMP CrackMe.11004870
我们可以看出1128193C是跳转到重定位结束地址11281960 可11281960 不是popad,与我们通常处理的upx壳不同。我试着在1128198f断下,然后dump,修正重定位,但是失败了。前面的dump处理就不对。
我用////////////标记的,这段代码是什么作用啊,真搞不懂,请教高手。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)