天马阁

 找回密码
 立即注册
                                        →→→→→→→→→→→→ 1点击查看所有VIP教程目录长列表(总教程数269个) 2办理VIP详情进入 ←←←←←←←←←←←←
1 x64CE与x64dbg入门基础教程 7课 已完结 2 x64汇编语言基础教程 16课 已完结 3 x64辅助入门基础教程 9课 已完结 4 C++x64内存辅助实战技术教程 149课 已完结
5 C++x64内存检测与过检测技术教程 10课 已完结 6 C+x64二叉树分析遍历与LUA自动登陆教程 19课已完结 7 C++BT功能原理与x64实战教程 29课 已完结 8 C+FPS框透视与自瞄x64实现原理及防护思路 30课完结
64驱?封? 9 64反驱? 10 64位V? 11 绝? 12 ???课?
13 64透 ? 14 64U ? 15 64Q ? 16 64功 ?
17 64U ? 18 64模 ? 19 64多 ? 20 64网 ?
21 64注 ? 22 64火 ? 23 64棋 ? 24 64自二链L?
25 64破 ? VIP会员办理QQ: 89986068   
【请先加好友,然后到好友列表双击联系客服办理,不然可能无法接受到信息。】
27 加入2000人交流群637034024 3 28 免责声明?
查看: 4985|回复: 0

OD附加游戏退出的原因及解决办法

[复制链接]

14

主题

0

回帖

17

积分

编程入门

Rank: 1

天马币
28
发表于 2024-3-5 09:19:05 | 显示全部楼层 |阅读模式
OD载入程序就自动退出是比较恼人的,还没开始调试呢就退出了,这可让人如何是好。初学破解的人一定会遇到这个问题,怎样解决呢,网上虽然有零星的介绍但都不全面,以下是我总结的一些,希望能对各位初学者有所帮助。



(比如Peid、FI查壳查不到,OD一载入就退出,这极有可能是VMProtect的保护(虚拟机保护),用EXEinfo可以查出来一些版本的VMP,如果有这个提示那就更确定无疑了“A debugger has been found running in your system.Please, unload it from memory and restart your program”。)
1.更换几个OD试试,OllyICE、Shadow、加强版等
2.用附加的方式加载程序,文件-->附加,能解决很多问题
3.OD目录下,将475K 的DbgHelp.dll文件换成近1M大小的DbgHelp.dll文件,475K的有溢出漏洞,这条比较关键
4.使用StrongOD插件,(StrongOD+原版OD试试),这条比较关键
5.StrongOD中选择CreateAsRestrict
6.尝试命令bp ExitProcess,看能否发现什么线索
7.改变ollydbg.ini中的驱动名称,修改版的OD不需要自己改     
DriverName                 -      驱动文件名,设备对象名
DriverKey                     -     和驱动通信的key
HideWindow                 -    是否隐藏窗口,1为隐藏,0为不隐藏
HideProcess                 -     是否隐藏od进程,1为隐藏,0为不隐藏
ProtectProcess             -     是否隐藏保护Od进程,1为保护,0为不保护
8.改OD窗体类名,用的修改版的话一般都改过了,不需要自己再改
方法如下:
主窗体类名:
引用:
VA:004B7218
Offset:000B6018
各子窗体类名:
引用:
VA:004B565B ~ 004B568A
Offset:000B445B ~ 000B448A
改成任意,可以过GetWindow检测
9.手动修改程序“导出表”中的“函数名数目”值,上面方法不管用再试试它
方法:使用“LordPE”打开要编辑的PE程序,然后依次选择[目录]->[导出表对应的“..”按钮],把“函数名数目”的值减1,并点击“保存”按钮,就OK了。为了好看些,也可以把“函数数目”和“函数名数目”的值都同时减1并保存,效果一样。
   解释:一般情况下EXE不会加“导出表”,如果加了,就应该给出所导出的API函数。当我们打开这类PE程序(EXE版)时,会发现它存在“导出表”,但“导出表”中并没有导出的API函数。同时“函数数目”和“函数名数目”的值都比原PE程序设置的值大了1(如:EXE版“导出表”列表中显示了0个导出的API函数,壳将其“函数数目”和“函数名数目”的值都设置成了1;DLL版“导出表”列表中显示了0xD个导出的API函数,壳将其“函数数目”和“函数名数目”的值都设置成了0xE。)。所以我们将其减1,就OK了。被修改过的PE程序,可以正常运行,不会有任何影响。


这只是我的一点总结,附加方式加载、替换DBGHELP.DLL、使用StrongOD插件和修改导出表函数名数目的方法是可行的,能够解决一些问题。当然这些方法可能并不全面。


ANTI-OD原因解读:
概括来说:TLS回调函数在入口点之前执行,并进行了ANTI-OD的操作.
具体请看:TLS数据初始化和TLS回调函数都会在入口点之前执行,也就是说TLS是程序最开始运行的地方,因此可以在这里防止ANTI-OD的代码,检测并关闭OD。
应对方法:
  默认情况下OllyDbg载入程序将会暂停在入口点,应该配置一下OllyDbg使其在TLS回调被调用之前中断在实际的loader。
  通过“选项->调试选项->事件->第一次中断于->系统断点”来设置中断于ntdll.dll内的实际loader代码。这样设置以后,OllyDbg将会中断在位于执行TLS回调的ntdll!LdrpRunInitializeRoutines()之前的ntdll!_LdrpInitializeProcess(),这时就可以在回调例程中下断并跟踪了。例如:在内存映像的.text代码段上设置内存访问断点,就可以断在TLS回调函数里。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

天马阁|C/C++辅助教程|安卓逆向安全| 论坛导航|免责申明|Archiver||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表天马阁立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2021 All Right Reserved.
快速回复 返回顶部 返回列表