声明:我也是个新手,写这篇文章主要是给自己这段时间的学习作一个总结,顺便发表出来让大家也看看,有错误的,希望大家指出来,大家一起学习,一起进步…
1.先查找字符串;
2.看有没有Messagebox弹出,有就下MessageBox断点,或用暂停后执行到用户代码;
Api断点:GetWindowText GetDlgItemText ShowWindow MessageBox…SetDlgItemTextA具体的见各个Api的作用,我们常用于破解的Api不是很多…;
3.内存断点,硬件访问断点;(参见 看雪的OllyDBG 入门系列(四)-内存断点)
4.消息断点或者Run跟踪下断点( 参见看雪的OllyDBG 入门系列(五)-消息断点及 RUN 跟踪)
(当然,这些步骤都要依据软件和个人的喜好和经验而定,没有一成之规)
这些都是在没有用其他工具的情况下,只用OD破解的,如果是Delphi写的软件,可以考虑用DEDE和SPY来查找关键按键的类函数,而中断到关键点,这样比较容易找到关键点…
在某种程度上来看,软件都是重启验证,因为在你注册成功后,总会有标志显示你是注册用户,重新启动后,如果你是正版注册的,那么它也会显示你是注册用户.软件的实现,就是你注册成功后它会向某文件或这是注册表写入某些东西,在他启动的时候会读取这些东西,然后调用验证函数做判断,判断成功之后,则显示你是注册用户,反之就是未注册的.所以说在某种程度上来说,所有的软件都是这样的重启验证.我们破解呢,当然是要去掉这些没有用的注册框,或者绕过验证,显示你是注册用户,当然CrackMe除外,因为很少有人在CrackMe中加入写注册表或文件.有些软件还有功能验证,那么它怎么实现功能验证的呢?
在我看来有2种方法:
其一,
注册之后,软件给一全局变量赋值,当你使用某种功能的时候,判断函数直接判断这个全局变量的值,如果满足要求,那么就认为你是注册的,功能就让你使用,反之,就认为你是未注册的,功能当然会有限制.
这样我们的第6中方法就是看软件中的全局变量,它肯定是有赋值(MOV)的,也有很多的比较的(CMP)
其二,
当你使用某种功能的时候,现场做判断,成功则认为你注册,反之未注册.这样算法Call就会调用很多次(5次以内,太多就可能不是了).这有利于我们判读算法call,对于汇编不是很好的人来说比较有利.
我看Nisy的教程受益很多,Nisy免费出教程给新手学习,我很佩服他.他的精神正是验证了破解组织的理念就是免费共享原则,当然,这也是看雪这么多年来所坚持的.很让人佩服.
再次套用Nisy的一句话,”将破解上升到编写软件的层次才是我们追求的,不要因为破解而去破解,也不要因为需要虚名而去破解,我们追求的是技术上面的提高…”
最后感谢Nisy,感谢看雪论坛的所有热爱技术并无私奉献出来的人…谢谢!!!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课