对我来说,当我试图手动打开它时,有时很难确定我是否已经达到了 OEP。特别是在它不以标准函数序言开头的情况下。
例如:我发现了以下示例,该示例以 PUSHAD 指令开头。我逐步完成代码的内容,直到到达 POPAD。几行之后,我看到了一个 JMP 指令,它导致一个 CALL 指令和一个函数被调用。跳过该函数后,在下一行中,还有另一条 JMP 指令在此处结束:
PUSH 58
PUSH unbr002.014A22F8
CALL unbr002.013CBD40#
XOR ESI, ESI
MOV DWORD PTR SS:[EBP-4], ESI
LEA EAX, DWORD PTR SS:[EBP-68]
PUSH EAX
CALL DWORD PTR DS:[141409C] kernel32.GetStartupInfoA
....
....
....
....
POP ECX
CALL DWORD PTR DS:[1414278] kernel32.GetCommandLineA
....
所以,我在某处读到了“GetCommandLineA – 表明您已经到达了使用 Visual Studio 6 编译的程序的入口点”
我问自己是否有一份指标清单可以知道一个人是否达到了 OEP。
最好的祝福,