找关键CALL和关键跳
方法一:
输入假码注册程序,记录下错误提示信息。
OD载入程序-->
右键-->查找-->所有参考文本字串-->(右键-->查找文本,注:不要区分大小写,选择整个范围)找到上面记录的错误提示文本
或:右键-->超级字符串参考-->查找ASCII码/UNICODE->(右键-->查找文本,注:不要区分大小写,选择整个范围)找到上面记录的错误提示文本
-->双击进去,关键CALL和关键跳就在其上面附近。一般在其上有提示注册成功的文本信息,在成功和失败提示文本的上面有一个比较,比较下面有一个跳转。在比较的上面的第一个CALL就是关键CALL了。
方法二:
OD载入程序-->F9运行程序-->输入假码注册程序,确认,弹出错误提示框-->F12暂停程序运行--->ALT+K查看调用堆栈-->找到来自主程序的调用-->双击进去-->,关键CALL和关键跳就在其上面附近。一般在其上有提示注册成功的文本信息,在成功和失败提示文本的上面有一个比较,比较下面有一个跳转。在比较的上面的第一个CALL就是关键CALL了。
简单爆破方法:
方法一:修改关键CALL(通过修改寄存器的值达到控制关键跳实现与否)
找到关键CALL之后先在关键CALL上下个断点(其上附近亦可)-->重载程序-->F9运行程序-->输入假码,确认-->回到OD,则停留在我们上面下段的地方-->单步跟踪到关键CALL上F7步入-->在段首(跟进去所在的位置)写入mov eax,1(注:其中之所以要修改eax的值是由于影响关键跳的比较的寄存器为eax,通常都是eax。之所以修该为1,是为了转换关键跳的实现与否,如:默认eax为0,关键跳没实现,那么我没就把eax改为非零值即可),在下一行写retn X(X为该段尾返回的值,如果他没有返回我们也不返回任何值)-->保存修改-->OK
方法二:修改关键跳(直接不理会判断条件,强制改变其跳转状态)
该关键跳为相反状态(如:je-->jz, jnz-->jmp 等等)
为什么要修改EAX的值:
修改关键CALL:
欢迎大家来我个网站交流学习
网络人编程论坛
http://www.wangluoren.net