小弟最近正在脱一个不知名的壳,遇到了问题,求哪位大侠可以指点迷津
小弟已经推测出OEP
02012D3A 56 PUSH ESI
02012D3B 57 PUSH EDI
02012D3C E8 95FFFFFF CALL FSmarsV1.02012CD6
02012D41 68 B80E0402 PUSH FSmarsV1.02040EB8 ; ASCII "USER32" //我判断此处为OEP
02012D46 A3 38800502 MOV DWORD PTR DS:[2058038],EAX
02012D4B E8 B4D2CFFF CALL 01D10004
02012D50 3F AAS
02012D51 8BF8 MOV EDI,EAX
02012D53 3BFB CMP EDI,EBX
可是这句CALL 01D10004我很不明白,于是跟进,来到
01D10005 04 24 ADD AL,24
01D10007 - E9 F4FFFEFF JMP 01D00000
。
。
。
01D00000 8BFF MOV EDI,EDI
01D00002 55 PUSH EBP
01D00003 8BEC MOV EBP,ESP
01D00005 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
01D00009 68 32B5807C PUSH 7C80B532
01D0000E C3 RETN
继续跟踪却来到了kernel32的领空
7C80B532 |. /74 18 JE SHORT kernel32.7C80B54C
7C80B534 |. |FF75 08 PUSH DWORD PTR SS:[EBP+8]
7C80B537 |. |E8 682D0000 CALL kernel32.7C80E2A4
7C80B53C |. |85C0 TEST EAX,EAX
7C80B53E |. |74 08 JE SHORT kernel32.7C80B548
7C80B540 |. |FF70 04 PUSH DWORD PTR DS:[EAX+4] ; /pModule
7C80B543 |. |E8 F4300000 CALL kernel32.GetModuleHandleW ; \GetModuleHandleW
7C80B548 |> |5D POP EBP
7C80B549 |. |C2 0400 RETN 4
7C80B54C |> \64:A1 1800000>MOV EAX,DWORD PTR FS:[18]
7C80B552 |. 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
7C80B555 |. 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
7C80B558 \.^ EB EE JMP SHORT kernel32.7C80B548
并且当我根据我推测出来的OEP脱壳后(IAT已经还原),程序仍不能运行,当我跟踪已脱壳后的程序,CALL 01D10004却成了这样
02012D46 A3 38800502 MOV DWORD PTR DS:[2058038],EAX
02012D4B E8 DB E8 //此处为CALL 01D10004
02012D4C B4 DB B4
02012D4D D2 DB D2
02012D4E CF DB CF
02012D4F FF DB FF
02012D50 3F AAS
哪位大侠能指点小弟,是不是我OEP找的不对,还是其它原因?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)