-
-
[求助]UPX壳疑问
-
发表于:
2015-4-21 22:27
5228
-
UPX的壳:
pushad 执行后ESP=0018FF6C;下了硬件断点。
我利用F9堆栈平衡原理跟踪到:
00677A50 . 8D87 37020000 LEA EAX,DWORD PTR DS:[EDI+237]
00677A56 . 8020 7F AND BYTE PTR DS:[EAX],7F
00677A59 . 8060 28 7F AND BYTE PTR DS:[EAX+28],7F
00677A5D . 58 POP EAX
00677A5E . 50 PUSH EAX
00677A5F . 54 PUSH ESP
00677A60 . 50 PUSH EAX
00677A61 . 53 PUSH EBX
00677A62 . 57 PUSH EDI
00677A63 . FFD5 CALL EBP
00677A65 . 58 POP EAX
00677A66 . 61 POPAD
00677A67 . 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
00677A6B > 6A 00 PUSH 0
00677A6D . 39C4 CMP ESP,EAX
00677A6F .^ 75 FA JNZ SHORT JDZS_1.00677A6B
00677A71 . 83EC 80 SUB ESP,-80
00677A74 .- E9 8EAFE4FF JMP JDZS_1.004C2A07
“00677A74 .- E9 8EAFE4FF JMP JDZS_1.004C2A07”这句看着就像往OEP跳。
然后我跟进,结果如图:
004C2A07 55 PUSH EBP
004C2A08 8BEC MOV EBP,ESP
004C2A0A 6A FF PUSH -1
004C2A0C 68 C0375C00 PUSH JDZS_1.005C37C0
004C2A11 68 78524C00 PUSH JDZS_1.004C5278
004C2A16 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004C2A1C 50 PUSH EAX
004C2A1D 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
004C2A24 83EC 58 SUB ESP,58
004C2A27 53 PUSH EBX
004C2A28 56 PUSH ESI
004C2A29 57 PUSH EDI
004C2A2A 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
004C2A2D FF15 E8815200 CALL DWORD PTR DS:[5281E8] ; kernel32.GetVersion
004C2A33 33D2 XOR EDX,EDX
004C2A35 8AD4 MOV DL,AH
004C2A37 8915 74776600 MOV DWORD PTR DS:[667774],EDX
004C2A3D 8BC8 MOV ECX,EAX
004C2A3F 81E1 FF000000 AND ECX,0FF
004C2A45 890D 70776600 MOV DWORD PTR DS:[667770],ECX
004C2A4B C1E1 08 SHL ECX,8
004C2A4E 03CA ADD ECX,EDX
004C2A50 890D 6C776600 MOV DWORD PTR DS:[66776C],ECX
004C2A56 C1E8 10 SHR EAX,10
004C2A59 A3 68776600 MOV DWORD PTR DS:[667768],EAX
这个004C2A07处明显就是OEP位置啊,但是ESP和原先的0018FF6C不一样,这个是什么问题,有人能帮个忙解释一下吗?
附件:
jdzs.rar
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)