第一种方法:F12暂停法
1、查壳,是Aspack壳,用ESP定律法脱壳+IAT修复即可,这里不赘述;
2、OD载入脱壳后的文件,F9运行,程序跑起来后,直接F12暂停,然后点击菜单栏里的K,选择最后一个,右键-显示调用;
3、进入这段程序后,发现没有跳转可以跳过这个调用call,于是找到这段程序的段首,F2下断点,然后重新载入程序,F9运行,程序被断下来,在堆栈窗找到第一行,右键-在反汇编中跟随;
4、来到这个调用call,我们直接找到段首,结果我们发现,这个就是程序的入口点,巧了
5、同时我们看到关键call附近也没用跳转可以跳过它,那我们试试直接将其nop掉,F9运行看看;
直接跳过登陆框进入主程序,第一种方法已经达到目的,保存文件。
第二种方法:借助按钮事件
1、脱壳后用PEID查发现是Delphi语言写的,首先用OD载入脱壳后的文件,F9运行程序,跑起来后,我们输入用户名与口令(随意),点击登陆,出现错误提示
2、那么【登陆】就是我们的按钮事件,用IDR(爱盘里可以下载)查询按钮事件【登陆】的地址是00553FFC,我们在OD里重新载入程序,接着Ctrl+G,转到这个【登陆】按钮所在的地址;
3、然后再F2下断点,F9运行程序,程序跑起来并且出现登陆框,我们点击【登陆】,此时程序因为按钮事件而断下,接着就是单步了;
4、我们发现,单步到00554076 E8 65050000 call dumped_.005545E0时,程序跑起来,对于服务器的网络验证call一般可以采取nop掉或者让前面的某个跳转跳过它的办法,对于这个call,前面没有跳转可以跳过它,nop掉的话登录框的登录键会变成灰色,所以在这里F7进去;
5、接着继续单步,到00554791 E8 16F9FFFF call dumped_.005540AC处时,程序再次跑起来,跟第4步一样,我们F7进去,继续单步,单步到005541BC E8 B7E8FFFF call dumped_.00552A78处时,程序唤起服务器网络验证,nop掉后程序会显示验证失败,说明这个是调起服务器网络验证的关键call,因为前面没有跳转能够跳过它,所以直接将其nop掉,继续单步;
6、单步到005543F5 . E8 0639EBFF call
7、那么很明确了,我们需要将005543C8 /74 30 je short dumped_.005543FA 处的je改成jmp,但并不是只需要改这一处就完事了,如果只改这一个地方,F9运行,发现还是验证失败;
8、所以我们需要加工一下,在005543C8前面有很多的跳转,我们慢慢调试,肯定可以调试成功的,往上看,分析发现,如果005541CD /0F84 8C000000 je dumped_.0055425F这个地方,这个je不处理的话会验证失败,所以要让他跳转,将je改成jmp;
9、再次F9运行,程序依然提示验证失败,说明还要继续修改,那改完005541CD后接着单步吧,看看还有什么地方要修改的,单步来到00554273 /7E 5A jle short dumped_.005542CF处,该跳转已实现,试试将其nop掉,然后F9运行,发现,大功告成
10、保存文件,运行一下试试,发现确实可以进入主程序,到这里为止,所有步骤都结束了。
方法二在经历多番调试后,终于成功躲避了服务器的网络验证,与方法一相比,方法二确实要花费太多时间,二者的区别在于:
方法一在这个功能上会受限制,后来我尝试了在方法一的基础上破解这个功能,最后得出的结论就是:方法二=方法一+搜索字符串破解引擎功能
程序下载地址:https://pan.baidu.com/s/1pLAUJZt 密码: 52pj
……