不算完美的爆破一款小程序,分享过程~
本帖最后由 maxwgf 于 2017-1-22 01:23 编辑昨天一个小伙伴发给我一款小程序,说是一个视频教程里的,挺有趣的,让我练练手,几经折腾,算是爆破了,下面进入主题{:301_996:}
1、首先查壳,发现无壳,是B C++写的;
2、OD载入,运行程序,注册,程序弹出错误提示框;
3、这里我采用F12暂停法,暂停后,点击K,找到MessageBoxA,右键-显示调用;
4、然后找到这段程序的段首,F2下断点,接着重新加载程序,F9运行;
5、程序运行起来后,出现注册框,我们点击确定,程序被断下来;
6、接着我们在堆栈窗口,在第一个函数处右键-反汇编中跟随;
7、然后继续往上找到程序段首处,F2下断点,并取消前面的断点,接着重新加载程序,F9运行,重复第5、6步中的操作;
8、往上找,发现已经来到程序关键位,于是我们在关键call处F2下断点,并取消前面的断点,重新加载程序,F9运行;
9、看到关键跳转,是个已经实现的跳转,调过了注册成功的代码,第一反应是nop掉它,那就先试试看nop掉吧,然后保存破解文件;
10、运行破解文件,发现可以注册成功!
11、还没完...当我们再次启动破解文件的时候,还是会弹出注册框,也就是我们所谓的重启验证;
12、所以刚刚第9步不应该直接nop掉那个跳转,那我们回到刚刚关键跳转的位置,仔细看:
0046C47A|.8945 90 mov ,eax
0046C47D|.817D 90 DB000>cmp ,0xDB
0046C484|.75 35 jnz short 010Edito.0046C4BB ;关键跳转,已经实现,注册不成功,nop掉会有重启验证
关键跳转上方的这两行代码,0046C47A这行将eax赋值给,0046C47D这行则对比和0xDB两者的值,如果不相等,那么下面的跳转就实现,如果相等,则跳转不实现,为了达到破解的目的,我们是希望不跳转的,也就是让=0xDB;
13、F7进入关键call里看看,发现关键代码:
0046A7C0|>B8 DB000000 mov eax,0xDB
将0xDB赋值给了eax,如果接着retn返回的话,似乎刚刚好就能接上第12步里的分析;
14、单步走一下,发现有个未实现的跳转直接到达0046A7C0;
15、继续单步,发现0046A7BC处的跳转已经实现,直接调过了我们关键的代码;
16、既然我们需要让它到达关键代码,那就尝试将
0046A7BC|.74 09 je short 010Edito.0046A7C7
0046A7BE|.EB 15 jmp short 010Edito.0046A7D5这两行代码nop掉,或者将第14步中的跳转设置为jmp无条件跳转,我采用的是后者,然后我们再次保存破解文件;
17、运行破解文件,无论运行几次,发现已经去掉重启验证;
缺陷在于,已注册给0用户授权,而不是52pojie{:301_999:}欢迎补充
如有不足,还请指正{:301_996:}
程序链接地址:https://pan.baidu.com/s/1geO1BqV(含破解文件) 010 Editor有网络验证,会检测key是否在黑名单,我之前破解010 Editor的方法是,先用keygen生成一个key,然后用IDR分析下主程序导出一个map再导入到od中来帮助分析,就容易看很多了,楼主可以试试。 jkl1074 发表于 2017-1-22 18:17
前辈,如果程序注册码是提示重启软件后验证的怎么办?好像是NET的程序,我测不出来壳。
我也是初学者{:301_999:}只能分享一些自己所得,就我目前遇到的重启验证,通过找寻关键代码,迫使关键跳转按照我们的意愿去实现,都是可以解决的。 支持分享原创软件,谢谢。 路过看看 学学 学习一下,虽然看不懂 jrflsh 发表于 2017-1-22 01:28
学习一下,虽然看不懂
这个软件来自天草教程初级班,我是从天草中级班开始学的,哈哈,难怪没见过这个,天草的教程挺好的,建议去看看 maxwgf 发表于 2017-1-22 01:35
这个软件来自天草教程初级班,我是从天草中级班开始学的,哈哈,难怪没见过这个,天草的教程挺好的,建议 ...
嗯嗯,好的,谢谢指点 支持楼主,虽然不懂还是顶,我能问你个问题吗 ,你能回复我吗 、 怎么不破解最新版的现在都6.0了。。。 这个。没有试过,当一回小白鼠 哦摩西罗伊~~~~~~~~~