*破解之前先用抓包工具测试原文件是否所有功能全在本地.确认之后...
1.OD载入程序
2.F9运行
3.下断 BP recv
4.输入错误的帐号密码,但必须确认符合帐号密码格式的正确,点登陆
5.OD中断下来,按1次F9(对,没看错,是按F9 不是F8),若没有弹出提示再次中断的话,继续F9,直到弹出帐号密码错误的提示,记下按F9的次数.
6.再次点登陆,按F9次数为第5条中的次数-1,这时,OD中断在最后一次recv上...
7.ALT+F9执行到主程序领空(也叫用户代码)
8.接下来F8跟踪,一般没处理过的代码基本都是一个大循环解密封包,在大循环末尾F2下断,咱们讲的是暴破,就不分析他如何解密了.
9.按F9后直到大循环结束,停在第8条F2下断处
10,继续F8跟踪,如果没问题的话,很快就可以发现很多跳转,包括JNZ,JE,等等,这里一般就是关键.分析这些跳转,比如先跟踪看看哪个CALL是是帐号密码错误的CALL,然后向前分析,找到关键跳,NOP或者强制逆向修改,OK 暴破成功.....
(小贴士:如果遇到一个CALL执行的时间比较久的话,可以在旁边写上注释,如果你在分析第10条失败的话,就可以回来分析这些CALL)
去暗桩:有些软件会留有自效验暗桩,或者定时器检测或限制,暴破后就会出现这些限制,如自动关闭程序,自动关机,程序出现错误提示,运行时不稳定等等,如果出现这些限制,解决方法1.是定时器方式的话,用DEDE或者SMARTCHK之类的程序跟踪查找一下定时器的头部地址,然后跟踪2.封包检测的话就用抓包工具,如网络嗅探器,WPE,封包助手等等,然后用上边的方法再次跟踪依然可以找到关键部位
3.也可以借助C32和OD等工具的字符串查找一些字串,找到这些限制的地址,有提示的就直接查找提示字串,没提示的就用上边的2种方法.对于一些命令的话,关机就查找跟Shutdown相关的单字节字串,退出程序就用Exit相关函数也可以直接OD下断这些命令的函数 如:
关机常用断点BP SeShutdownPrivilege,退出应用程序函数 bp ExitWindowsEx等等
当然 对于一些查找字符串函数断不到的东西,还是利用前两条多跟踪一下的好,总能找到关键的...
4.自效验读文件断点:比较常用的有CreateFileA(对应A字符)和CreateFileW (对应UN字符),可以找到计算效验值串的地方,替换为未修改前的字符串,或者追踪到不同的地方,修改之
参考
http://bbs.pediy.com/showthread.php?t=122422贴士:更多的断点 请不要忘了搜索引擎的强大!~
如下是我对某炒股软件爆破关建跳转指令做的注释 大家可以参考一下
下断BP recv
用户定义的注释
地址 反汇编 注释
00402FAA nop 连接到服务器失败 请选用备用服务器
00402FB0 jmp short Project1.00402FEE 不跳就执行上边那条
00403033 jmp short Project1.0040307A 不跳则 提示 收到未知应答包 1
004030AA jmp short Project1.004030DA 不跳则 帐号密码错误
004030C5 call Project1.00577F18 帐号密码错误
004030F0 nop 掉起效验 跳向没反映 NOP埋掉
0040314B jnz Project1.004032AA (初始 CPU 选择)
0040330E jmp short Project1.00403355 不跳 则 收到未知应答包2
0040335F nop 跳 则 没反映2 NOP埋了
注:以上跳转全为修改后,地址不变
去掉此程序的"崩溃型自效验"(我自己取的名字- -,表现为你点了程序某些功能或界面或者定时器运行到这些地方时,就会发出系统错误崩溃音,然后弹出一些英文提示,点了确定之后程序就关闭)
下断 bp ExitProcess
中断后
在向上连续查找两个子程序之后
发现头部地址为 0057153C的子程序被数十个地方调用,确认这个就是关键崩溃子程序
把0057153C地址的代码 改为 retn
- - 对 此程序自效验错误方式是自暴....不过还是没逃过bp ExitProcess
查找调用某个子程序的CALL地址的方法: OD右键 查找-查找命令-输入CALL+子程序头部地址
OD子程序分析标记: OD子程序分析标记为$,显示在子程序头部,也就是被调用的地方...
本人才疏学浅,目前就研究出这么多,希望大家慢慢参悟,如有不对或雷同请指教
还有大家小心楼下滴,那是广告,而且软件是经过修改的,真正的那个强制查看器原版在猴岛,是没有广告的 - -
[课程]Linux pwn 探索篇!