闲谈如何破解软件?

查看 147|回复 11
作者:yyhd   
各位吾爱的朋友,大家好!
  真的好久没有和大家见面了,说实在的,还是蛮想大家的!
  去年春节之际,我连续十几天写了一套教程《玩玩破解》共24集,虽说是没有什么技术含量,但是从大家的反馈来看,还是对很多新人有所帮助的,我也就非常满意了。
  因为我一直也属于新人行列,所以也写不出什么高水平的东西,只是能把自己的学习收获更通俗易懂的和大家一起分享而已。今天刚巧有些心情,就和大家再闲聊几句。
  一、破解的关键是什么?
  我个人认为,破解的关键就是找到最恰当的断点。水平的高低也就在于谁能在最快的时间找到最有价值的断点。
  什么是断点?
  就是破解者人为地让程序在执行过程中暂时停下来(也叫断下来)的那个代码地址。
  要找到断点,就要涉及到一个工具和一些技术。工具通常就是OD,OD这个软件的作用就是能够让软件以汇编的形式呈现,如果你能看懂汇编语言,你就能够看懂这个软件的编程流程了。
  所以,破解者不仅要会使用OD这个工具,还要会一些汇编知识。
  好在,要求不高,难度不大,你基本上一个小时就可以学会。
  OD还有一个重要的作用,就是你可以在某个地址下断点,当软件执行到这句代码的时候就会自动断下来,这就是上面说的断点。
  但是问题来了,一个软件的编写有成千上万条代码,你到底该在那一句代码处下断点呢?
  
  呵呵,如何有效的下断点,就是我们学破解的最关键的技术。
  
  相信你会听说过中文搜索关键字、API函数、消息函数、F12暂停法、按钮事件等等方法,其实这些方法的目的都是一样的,就是下断点。
  那你可能要问了,什么叫做最有价值的断点?所谓最有价值的断点,就是距离软件验证真假的最近的位置。
  我举个例子,比如有一个软件需要你输入用户名和密码进行验证,如果正确就提示登录成功,错误提示登录失败。那么,我们该如何下断点呢?
  第一种方法:在软件读取我们输入的假的用户名和密码的代码处下断,我们也叫做验证前下断。怎么下断呢?如果软件不是重启验证的,你对读取输入框的API函数进行下断就可以了。
  附带说一句,我们的软件在编写时会大量使用WINDOWS系统库里的API函数来实现功能,包括弹窗、读取文本、写入文本、比较真假码等等。
  所以,你要熟悉一些基本的API函数的功能。如果软件是重启验证的,你对读取文件、注册表的API函数下断就可以了。
  附带说一句,所谓重启验证,就是你只需要第一次属于注册码,以后启动软件的时候就不需要再次输入了,软件会自动读取你之前输入的注册码信息然后进行验证。
  第二种方法:在软件进行真假码比较的时候下断,我们也叫做验证中下断,这个断点就NB了,也就是最有价值了,因为如果软件编写者没有对数据进行加密的话,你会直接看到真码。
  那怎么下断呢?你可能会想到用有比较功能的API函数或者命令。
  呵呵,事实求是说,因为软件的程序中有大量的比较命令,你很难找准,所以这个方法很少用。当然,易语言除外,因为它有一个特殊的文本比较通杀命令 test edx,3。
  第三种方法:在软件进行错误提示的时候下断,我们也叫做验证后下断,这个断点是最常用的,也是非常有效的。
  那么哪些是错误提示的,比如出现“登录失败”这样的文字、出现一个错误提示的对话框、出现一个提示需要缴费的窗口等,那么当你看到这些错误提示的时候,你该如何下断呢?
  比如出现文字,你就可以用搜索字符串的方法,当然要注意的是,你可能什么也搜不到?
  原因一般有两个:
  一是你没有在程序领空搜索,最简单的解决办法是你先在OD里用CTRL+G命令输入401000后,再搜索。
  二是软件的作者对字符串进行了加密处理,你暂时没有办法了。比如出现提示的对话框或者窗口,你就可以使用API函数下断。  
  当然,我个人还特别喜欢用设置窗口标题的API函数SetWindowText,往往会给你在黑暗中带来惊喜。


  二、壳是什么?
  壳就是软件的防护服。我们这么说吧,软件作者写好了程序,但是怕别人分析破解他的程序代码,就在原有的程序上加了一个防护服就是壳。
  所以,壳的作用就是保护软件,它本身没有软件的功能,所以壳是没有必要破解的,你需要的最多就是脱壳,或者就是绕过壳即可。当然,现在的壳也很厉害,比如VM的壳,它的作用是让软件原有的代码在OD里面变的杂乱无章,令你无从下手。
  但是,也别太失望。因为当绝大多数加了壳的软件运行起来后,它在OD里面会自动解码,源代码又恢复正常了。
  所以,当你遇到有壳的程序,不用费力的必须先脱壳,你可以在OD里面先把软件运行起来,然后到程序领空(大部分是401000处),然后你再用常规的办法(搜字符串、API断点)来分析下断点。另外需要注意的是,对于有壳的程序,你修改了源代码后是无法保存的,你需要做个内存补丁,其实也很简单,有专门的工具。


  三、还要注意什么?
  当你看完了以上两点,你觉得你能破解软件了吗?呵呵,还差一点。就是反反调试技术。
  现在的软件作者都很聪明,他们也有一些反破解的技术,他们除了加壳以外,还会增加一些反调试的技术来对付你,
  比如他会写一段代码专门检测你是否正在使用OD这个工具,发现了,就直接让软件退出。
  比如他会写一段代码专门检测你是否修改了源程序,发现了,就直接蓝屏。比如他会写一段代码专门检测你是否跳过了注册窗口,发现了,就直接格盘。
  那怎么办?很简单,好好学习,多练,攻防的技术是没有止境的!
  随口说了以上几点看法,希望给新手一点启发。
  
[color=]补充说明一下:
  1、真想学破解,建议先在自己的电脑上安装一个虚拟机,在虚拟机上进行破解练习,尤其是想练手一些商业软件,避免被格盘、蓝屏、安装木马等,别怨软件作者,毕竟是你在别人没有同意的情况下动了人家的身子,算是惩罚。
  2、以上说的是所有软件的通用破解方法,但是对于不同语言编写的软件还有破解的不同捷径,所以你还要学习一下不同语言的破解小妙招。
  对于易语言程序,可以使用文本比较通杀命令(test edx,3)、窗口置换(push 10001)、按钮事件(FF55FC5F5E)、易语言分析插件(E-Debug.dll、EWND.dll)等方法。
  对于DELPHI程序,可以使用按钮事件特征码(740E8BD38B83????????FF93????????)、DarkDe分析工具。
  对于VB程序,可以使用按钮事件特征码(816C24)、VBDecompiler分析工具。当然VB的API函数有特殊的书写方式,比如弹出对话框,用的命令是rtcMsgBox,而不是其他语言常用的MessageBox。所以对于VB的程序要注意API函数的特殊性。
  对于VC程序,可以使用按钮事件特征码(sub eax,0a),要注意的是和MFC编写的程序有点区别。
  3、如果你学了一段时间后,发现还是有很多软件破不了,千万别灰心,因为太正常了,要记住编写软件的作者也不是笨蛋,尤其是商业软件,一定是陷阱重重的,如果一个破解新手都能轻易破解了,人家还混个啥?
  所以说学习是无止境的。你在学习如何破解软件,人家也在学习如何防破解软件,乐趣就在于相互之间的不断对抗和技术提升。
  
  再多说一句话,“学习逆向破解的目的不是黑别人的软件,而是要提升软件的保护能力”。  
如果您觉得我发的内容确实对您有所帮助,请麻烦您支持一个热心值,进行精神鼓励,也是我继续写下去的动力!
玩玩破解,写给新人看(第一集)
玩玩破解,写给新人看(第二集)
玩玩破解,写给新人看(第三集)
玩玩破解,写给新人看(第四集)
玩玩破解,写个新人看(第五集)
玩玩破解,写给新人看(第六集)
玩玩破解,写给新人看(第七集)
玩玩破解,写给新人看(第八集)
玩玩破解,写给新人看(第九集)
玩玩破解,写给新人看(第十集)
玩玩破解,写给新人看(第十一集)
玩玩破解,写给新人看(第十二集)
玩玩破解,写给新人看(阶段练习1)
玩玩破解,写给新人看(第十三集)
玩玩破解,写给新人看(第十四集)
玩玩破解,写给新人看(第十五集)
玩玩破解,写给新人看(第十六集)
玩玩破解,写给新人看(第十七集)
玩玩破解,写给新人看(第十八集)
玩玩破解,写给新人看(第十九集)
玩玩破解,写给新人看(第二十集)
玩玩破解,写给新人看(第二十一集)
玩玩破解,写给新人看(第二十二集)
玩玩破解,写给新人看(第二十三集)
玩玩破解,写给新人看(第二十四集)
闲谈如何破解软件?
玩玩破解——小白实战1,你也行!
玩玩破解——小白实战2,巧搜字符串
玩玩破解——小白实战3,易语言字符串比较通杀
玩玩破解——小白实战4,冰火两重天
对新人们学习《玩玩破解》系列教程的集中解答
玩玩破解—加点油,再前行!         

宋体, 人看

abcxyzmn   

说的很好,浅显易懂,
可还是不会,不怨楼主,是基础太差,要补的太多
simdabo   

看完后感觉到最不安的就是倒数第四行,直接格盘。
皮皮Peter   

请继续讲,指不定看着看着就会了
liuqm   

感谢大佬
hxy310   

坐等大佬写完。
斯巴达   

坐等更新
XueXiHao   

有道理,本质是不是跳过判断语句,比如是否已注册账号,是否已充值之类的限制
baidasuai   

楼主的帖子通俗易懂,顶一个!
Air.   

学习了,之后再好好看看
您需要登录后才可以回帖 登录 | 立即注册

返回顶部