本帖最后由 wonderzdh 于 2013-7-16 10:29 编辑
【文章标题】: 【某培训】学前测试-程序多开
【文章作者】: wonderzdh
【作者主页】: http://hi.baidu.com/chicken
【下载地址】: 自己搜索下载
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
本套教程至少得更新到10课,由于没有事先安排,内容可能会比较乱,但是每字每句都是心得。
为什么我要把这些心得发出来,而不自己藏着。因为我发的东西本身就是我对学习 逆向的一个梳理和总结。
赠人玫瑰,手有余香。至于你们回不回复,评不评分,我一点所谓也没有。
后续课程不会继续在【逆缘论坛】首发,【吾爱 破解】转帖的形式存在,而是两个站同时更新。
也希望我的帖子在吾爱不是归类转帖,而是属于原创,本人可是吾爱未来的“原创精英”+“论坛大牛”呀。
如果想求破,可直接来逆缘 免费求破,网址什么的就不发了,自己百度一下。
题目如下:
逆向题:50分 多开2个以上的 1.exe,运行环境 win7 x64 1.exe运行成功标志:出现提示框 多开成功标志:多个提示框 要求: 1.提交分析过程 2.提交处理方案,可提交实现代码(关键代码即可) 3.提交处理后的运行截图 注意: 1.方法不限只提交一种。 2.多开运行的结果必须是在同一个桌面内运行的,否则不算多开。 3.多开运行的EXE必须是同一个exe在同一个目录内运行的,否则不算多开。 破文如下:
运行测试://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
PEID查看相关信息:
什么都没看懂就知道或许与控制台有关。 首先运行程序,一闪而过,出现一个控制台窗口,其他什么没有。 然后OD载入,ctrl+n查找调用的系统函数,发现可疑函数:KERNEL32.ExitProcess(必定和退出有关)、USER32.FindWindowExW(估计是和多开有关)。 KERNEL32.ExitProcess肯定是退出的关键了,直接每个参考都下断。 郁闷的一逼,一运行就断不下来,直接退出,估计是控制台关闭的程序。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 修改关键CALL:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 既然这样,单步吧,第一个callF7,然后F8一直走。 000D1BC8 . E8 E3F7FFFF call 1.000D13B0 跟到这里,直接退出了,下断,重载跟进。 00021497 > \E8 44FDFFFF call 1.000211E0 这里,又退出,下断,重载跟进。 01151253 |. FFD3 call ebx 这里,又退出,下断,重载跟进。 00101256 |. 68 48AA1000 push 2.0010AA48 ; ASCII "Okay" 出现如下关键字“Okay”,此处call ebx估计是无脑退出,直接nop,保存文件2.exe。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 处理退出函数:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 载入2.exe,找到如下函数。 第一句跟进,准备段首下断。 第二句和第一句在一个段。 第三句: 00C31388 . /75 10 jnz short 1.00C3139A Nop掉,不要走到下面的退出。 第四句: 00C31583 . /74 08 je short 1.00C3158D Jmp,跳过退出。 第五句: 00C317F1 . /75 07 jnz short 1.00C317FA Jmp,跳过退出。 第六句: 准备段首下断。 然后保存修改后3.exe,OD载入,重新下断。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 搞定多开:////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 一多开第一个进程就被结束,第二个直接不弹消息框。好吧,既然第一个弹了我就先看看弹框的那部分代码。 老方法找到MessageBoxW,代码如下: 013C17FA > \8B35 24913C01 mov esi,dword ptr ds:[<&USER32.MessageBo>; user32.MessageBoxW 段首下断再说: 013C13B0 $ 55 push ebp 先OD载入单开看看程序走向,然后直接双开,第二个用OD载入。 关键跳转,单开跳转,第二次打开就不跳了,且下面的CALL会直接给你关闭第一个的进程,那就jmp,代码如下: 00CC15C7 . /75 0B jnz short 3.00CC15D4 跟着走到此处: 012F16DA . FF15 1C902F01 call dword ptr ds:[<&KERNEL32.WaitForSin>; \WaitForSingleObject 程序就直接跑起来,走不到下面的信息框。 012F16CB . /EB 04 jmp short 3.012F16D1 此处直接跳到运行的call上面,既然找到信息框的部分,要跳我就直接跳到消息框去! 修改如下: 012F16CB /E9 2A010000 jmp 3.012F17FA 运行测试: 自此,修改结束,无论是XP还是W7,32还是64位,全部正常。虽然省略了部分关键部分,并没有深入剖析,但至少满足要求,管你多么牛逼,老子一个jmp到我要的地方! //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
附件.zip
(94.64 KB, 下载次数: 112)
@小生我怕怕
--------------------------------------------------------------------------------
【版权声明】: 本文原创于【wonderzdh】,转载请注明作者并保持文章的完整,谢谢!
2013-6-13 00:43
|