【小白】萌新第一次破解某地下城辅助,写一个记录
我是大概两个星期前开始学破解这块的,初衷其实只是想破解一款脚本软件,开始学了一会后,发现那款软件带壳。。还是VMP3.0+的。。。然后论坛大佬纷纷劝说不要碰无奈只能放弃,后来找了几款别的辅助,选了一个无壳然后安全措施做得不太好的辅助下手
1.查壳
2.看下辅助程序长什么样
有一个登录窗口(测试过这个窗口的API函数是ShowWindow)
随便输入账号密码,提示密码错误
2.拖进OD看看
一开始我非常郁闷为什么这个起始入口点不在401000,且我很确定这是个易语言程序,我也设置了OD的第一次停在winmain
到现在我都还没懂,如果有大佬的话能否教一下我~
不过这个影响不大
3.智能搜索
这个就是在反编汇窗口右键--中文搜索引擎---智能搜索
往上翻一番,能够找到非常有用的信息(所以说这个软件保护措施做得不好)
我们看到有“充值成功”“注册成功”一系列对我们有利的字符
但是注意,并没有“登录成功”或者类似的字符
4.跳过一些我经历的失败
其实做到上面一步的时候我也是很兴奋的,感觉这个破解应该会很顺利
谁知道并没有...
我尝试着在“注册成功”那里找到关键跳,然后修改跳
确实,软件会跳过注册失败的弹窗而直接跳入注册成功的步骤
看到这张图是不是觉得已经成功破解了?
然而并没有,后来我发现这个跳过只是单纯的跳过显示的文本而已
而程序内在还是不认可你输入的账号密码或者卡号的
所以当你拿着这些随便输入的账号密码去登录的话,依然是提示错误的信息
然后我开始寻找注册系统的一些关系,试图让程序内部认为我的卡号是对的
很可惜,由于本人真的是小白,不懂编程更加不懂汇编语言,只是看了一些论坛上的基础破解视频
所以结果就是两个星期一无所获,根本没有看懂任何有关注册验证的信息
就在我觉得要放弃这个破解的时候,我决定买一张正版卡试试
终于,在知道输入了正确的账号密码后程序会做出何种变化后,找到了破解的关键点
5.找到验证密码的判断事件
这是输入错误账号密码的结果
这是输入正确时的结果,而输入正确时辅助的窗口会自动关闭
通过对比我发现当我按下登录后程序就会做出账号密码的判断,并且将结果反馈到相应的代码段执行代码
在这里无非就是两条路,1.正确--弹窗成功并关闭窗口2.错误.显示错误字符
所以关键点就在这个点击登录按钮事件
这里的话直接找这个判断我还不太会
不过我注意到当输入错误字符的时候,程序左下会出现“密码错误”的字符串
OK,我打算从这里入手
可惜的是,“密码错误”的字符串并不能在智能搜索里直接找到
于是我打算使用API函数调用来查找
在反编汇窗口Ctrl+N打开函数调用
这里的话我试过非常多有关发送消息的函数(什么messagebox,dlgbox)
最后成功找出是SendMessageA这一个函数
有两个,我们右键其中一个【查找输入函数参考】
非常多的调用,我不知道“密码错误”到底是哪一个地址调用了,所以全部设置断点!
经过一轮测试过后,成功找到判断密码错误后返回的地址:00408296
看到下面有一个判断 je
那么接下来就很简单了,这个je明显是跳转“密码错误”的坏结果
值得注意的是,即使在这里把“je”换成“jne”或者“jmp”到最后出来的还是“密码错误”的坏结果,说明这个je并不是判断程序走好走坏的关键跳,或者不是唯一的跳
6.暴力破解
在经过一系列实验过后(很痛苦),我开窍了
还记得之前输入正确账号密码后程序的结果吗
以及关闭了程序主窗口
于是我的想法就是不管他程序是怎么判断的,我人工修改 跳到这个成功的call上面,我想这个就是俗称的暴力破解吧
******************
值得注意的是,如果我直接修改00408296下的 je 到这个提示窗口的call上面的话,也是没用的
简单的说一下,就是这个软件他是这样运作的,打开---输入账号密码----判断账号密码-----验证成功------加载组件-----弹出“成功”窗口
现在我已知的断点是判断账号密码这一步,我在这里设置跳转到弹出“成功”窗口,那么我不仅跳过了验证成功这一步还跳过了加载组件这一步,这样程序会崩掉
所以我要做的事找到加载组件这一步,然后设置判断账号密码--跳转---加载组件这样的思路
********************
如何找到加载组件这一步?
还记得当输入正确账号密码后主窗口会关闭吗?
我从这里入手
我发现这个关闭窗口的函数是这个“showwindow”(不要问我为什么知道,一个一个window函数试出来的T_T)
然后像前面那样全部设置断点然后开始寻找最后成功的那一步
最后试出来关闭窗口的步骤断在了这里
发现了下面有个retn 返回到
在这里再设置一个断点
F9运行一下,断在了刚刚设置的retn处
看下这个retn是回到哪里
返回到0043BBFF 然后我们回车跟随一下这个retn
进去后发现又是在一段函数段中,下面又一个retn,OK设置断点,F9运行,继续断在新的retn点,看一下返回到哪里,跟随一下
这里总共有3-4断函数,重复以上的步骤直到终于跳到了有用的地方
看到下面的正在操作中吗,说明程序已经开始加载组件了,所以我希望程序直接跳转到这个地方,记一下地址0040153A
至此,局势就非常明朗了
我们重启一下程序
回到地址00408296就是刚刚判断密码错误的断点处(Ctrl+G跳转),把下面的JE改成JMP LONG 0040153A 这个代码意思就是下面的代码你不用执行了,直接给我跳转到 0040153A 这里执行这之后的代码
OK,修改好后我们执行一下
随便输入账号密码
好的,至此破解已经完成~~~
*********************************************************************************************************************
其实这个辅助自己买也不贵,12块钱一周,折腾了两个星期
不过最后破解成功的那一刻还是很开心的,至少自己没有白学那些破译的知识
这个源文件我就不放出来了只是分享一下自己的经历
楼主,受教了,看来这个全得看思路呀 关于入口点不在401000处的原因
可能性
1.OEP被修改过可以达到这种效果,与文中内容不符,pass
2.程序是64位,如果64位无法用文中OD调试,pass
3.系统64位,程序32位,程序的编译方式的原因(猜测是这种原因)
我记得易语言有个较新的静态编译器版本(貌似是VC2015)编译出来的程序如果在64位运行入口点就不在401000 源文件能不能发出来,我也想试试 {:301_1009:} 这是轻羽吧 qwwq123 发表于 2018-12-4 16:30
这是轻羽吧
正解:handshake 各位想尝试的可以自己网上搜索资源 感谢楼主分享 你确定是2星期么,看着不像啊 厉害了挺你后面自学可以尝试 能不能麻烦把文中说的 学习大佬破解的视频 发给我学习一下 。 纯白 但是很喜欢做这个。不知道怎么入门。