【PC/脱壳】03.寻找OEP

共计2635字,阅读大约9分钟。
图片[1]-【PC/脱壳】03.寻找OEP-galgame

1.OD的SFX自动寻找法:

这个使用OD打开sfx插件进行自动寻找,有时候会成功,大部分不成功。当是一个偷懒方法。不是很推荐该方法。不适应大多数壳。


2.内存断点法:

图片[2]-【PC/脱壳】03.寻找OEP-galgame
图片[3]-【PC/脱壳】03.寻找OEP-galgame

当然了,我们的galgame以前的程序一般喜欢用alpharom进行加密是吧。这种情况一样的。我们先找到sarcheck.dll然后把他改成ret 0xC后,再对代码段下内存执行断点。然后等半分钟左右,就到OEP了。

图片[4]-【PC/脱壳】03.寻找OEP-galgame

3.ESP定律法(堆栈平衡法):

图片[5]-【PC/脱壳】03.寻找OEP-galgame
图片[6]-【PC/脱壳】03.寻找OEP-galgame

4.第一个dll函数调用法。

如果我们知道这个程序第一次调用的是哪个函数,我们就可以对着这个函数打一个(硬件)执行断点。然后就到了OEP后面了。我们再往前看就知道OEP了。

5.最后一次异常法

这个方法说白了,就是利用最后一次异常,程序就运行了,那我们就定位到最后一次异常就表示离OEP不远了,我们到了之后,下一个内存执行断点即可了。(但是这个方法不建议你用太新的调试器,因为……太新了,就没有异常了哈哈哈哈!)

图片[7]-【PC/脱壳】03.寻找OEP-galgame
图片[8]-【PC/脱壳】03.寻找OEP-galgame
图片[9]-【PC/脱壳】03.寻找OEP-galgame

6.利用壳的常用函数定位OEP

壳一般会用到这三个函数。

  1. GetProcAddress
  • 函数的原型:
FARPROC GetProcAddress(
  HMODULE hModule,
  LPCSTR  lpProcName
);
  • 参数说明:
    • hModule: 包含需要获取函数地址的DLL的句柄。
    • lpProcName: 要获取的函数或变量的名称。
  • 返回值如果函数成功,返回值是指定函数或变量的地址。如果失败,返回值为NULL。

  1. LoadLibrary系列
  • 功能: LoadLibrary 用于加载指定的动态链接库,并将其映射到调用进程的地址空间。
  • 函数原型
HMODULE LoadLibrary(
  LPCSTR lpLibFileName
);
  • 参数
    • lpLibFileName:要加载的 DLL 文件的名称。可以是完整路径,也可以是仅文件名(此时会在系统搜索路径中查找)。
  • 返回值
    • 如果函数成功,返回值是已加载模块的句柄(HMODULE)。
    • 如果函数失败,返回值是 NULL。可以使用 GetLastError 函数获取更多错误信息。

3.ExitThread是Windows API中的一个函数,用于终止调用线程。就只是拿来清理用的。

GetProcAddress

LoadLibrary

ExitThread

温馨提示:
本文最后更新于2024-08-25 01:56:33,本文具有时效性,若有错误或已失效,请在下方留言或联系站长
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 共3条

请登录后发表评论

    • 头像百濑美月0