两次运行或调用运行调试方法.
Form:UnPacK.Cn 作者:xknt目前我自己算是碰到过两种, 一种是程序会自动运行两次, 第二次才能正常启动. 要通过运行另一个文件才能执行. 迅雷就是一个很好的例子.第一例我就拿迅雷测试吧.
迅雷实际上的主程序文件是 Thunder\Program\Thunder5.exe , 如果直接运行.程序打不开的. 必须运行上一级目录下的Thunder.exe才能启动. 载入Thunder.exe主程序, 下bp CreateProcessW断点 F9. 被断下后大家可以看下堆栈里的信息.
可以看到, 程序在启动时加了 /742c12b5 参数来启动(发现这次跟刚才的好象参数不一样,不过都能启动就是了). 好了.可以关闭文件了. 现在运行OD,从 文件->打开 来选择要调试的文件 Thunder\Program\Thunder5.exe ,在参数那里写上刚刚截取到的参数值, 接下来. 就可以运行进行调试了.
-------------------------------------------------------------------------------
第二种 两次运行 来启动程序.
文件这里我就不写出来了. 主要是给大家研究方法.
程序载入后. 运行, 程序直接就结束了. 这时候关掉OD. 或者重新载入. 软件界面才会出来. 通过进程观察. 发现程序运行后结束掉.再运行. 再次感谢海风和fly的意见.
调试方法, 将程序入口修改为EB FE, 也就是JMP在原地跳.
好了,OD载入. 运行. 停在OEP处, 手工把程序入口还原
push ebp
mov ebp,esp
运行程序, 这时候程序结束, 此时程序还不会出现界面, 因为当前线程还存在.没有结束. 这时候关掉OD. 这时候程序才真正的运行了. 因为入口已经修改过了. 一直停留在原地JMP. 所以不会显示出界面.
重新打开OD. 将刚才二次运行的程序附加. F9运行. 再暂停. 程序仍然停留在入口.
我们继续手工将入口还原
push ebp
mov ebp,esp
然后F9 .运行OK. 正常调试 http://www.unpack.cn/images/smilies/default/smile.gif 强大的教程
做沙发
学习了 哇,原来是这样啊!! 强大的教程
学习了 收藏起来 看得一知半解
还要多学习一下 饿 虽然偶不懂··看那了还是要顶的 。。 顶起来,没什么好说的 http://bbs.52pojie.cn/undefinedE___5455ZHYXPWFG.gif 嗯,很好的办法,尤其是第二个
第二个能提供样例就好了,想研究它怎么退了再运行的 原來還有這種調式方法學習了 好好来学习的。。。。。。。。。。。。。。。。。。。。。
页:
[1]