1、希望大家互相学习学习,发现现在大家对于破解都不是很了解,很多人想学破解,但是去无从入手,所以在 BCG 小组大家的商议下,决定为大家写一个破解入门的教程,希望能大家了解破解有一些帮助,希望能有更多的人踏入破解的大门。 1.初级,修改程序 ,用 ultraedit 等工具修改 exe 文件,称暴力破解, 简称爆破 中级,追出软件的注册码 高级,写出注册机 2.常用破解工具 (1)侦壳工具:PEiD (2)动静结合的 OllyDbg 引领破解工具的新潮流。 一,现在我们首先来学习下破解的初步,爆破 1.侦壳 要破解一个软件首先要做的就是侦壳,要侦壳就要对壳有一定的了解,众所周知,软件作者用编程语言
2、编写好软件后,是将它编译成扩展名为 EXE 的可执行文件。编译为EXE 的目的有两点: (1)有一些版权信息需要保护起来,不能让别人随意改动,如作者的姓名、软件名称等; (2)需要给程序“减肥”,从而方便存储、使用和网上传输。 为了编译,会用到一些软件。它们能将可执行文件压缩和对信息加密(图 1) ,实现上述两个功能,这些软件称为加壳软件。为软件加上的东东就称为“壳” 。加壳软件不同于一般的 WinZIP、WinRAR 等打包类压缩软件。加壳软件是压缩可执行文件的,压缩后的文件可以直接运行。 最常见的加壳软件有 3 个:ASPACK 、UPX、PEcompact。毕竟它们是主流,据统计,用它们
3、加壳的软件约占市面所有软件的 90%!其他不常用的加壳软件有ASPROTECT、PETITE 、NEOLITE 、TELOCK 等。软件最常见的编程语言是Delphi,Visual Basic(简称 VB),Visual C+(简称 VC)。了解些编程的知识,会让破解更加轻车熟路。 下面来说侦壳,现在比较常用侦壳软件就 PeiD,他具有华丽的图形界面。外壳整合(添加到鼠标右键)功能令使用更加方便,支持拖放操作。配置时,务请将“扩展到鼠标右键”打上对号。 其使用方法是,鼠标点住 XX.exe,按鼠标右键,选“使用 PEid 扫描“即可;“壳”的信息就显示在底部。 2.破解工具 OD。 关于 OD
4、 的介绍我把他放到附件里了,这个是看雪论坛的介绍,是比较全面的,至少我觉得比我写的要好,所以大家根据他可以很好的了解 OD。 3.爆破实例。 爆破是破解的初步,所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了) ,那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。 明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的“造型“ ,这样,我们是不是就可以为所欲为了? 一,破解时常用的汇编指令如下,汇编较弱者
5、可先强行背住,以后就可慢慢理解了。 cmp a,b /比较 a 与 b mov a,b /把 b 的值送给 a,使 ab ret /返回主程序 nop /无作用,英文“no operation“的简写,意思是“do nothing“(机器码 90) (解释:ultraedit 打开编辑 exe 文件时看到 90,等同于汇编语句 nop) call /调用子程序,子程序以 ret 结尾 je 或 jz /若相等则跳(机器码 74 或 0F84) jne 或 jnz /若不相等则跳( 机器码 75 或 0F85) jmp /无条件跳(机器码 EB) jb /若小于则跳 ja /若大于则跳 jg /
6、若大于则跳 jge /若大于等于则跳 jl /若小于则跳 jle /若小于等于则跳 pop xx /xx 出栈 push xx /xx 压栈 更为详细的指令请查阅汇编书籍。 4.破解常见修改,参看表 1。 汇编指令修改 相应的机器码修改(通过 16 进制编辑器实现) jnz/jne-nop 75-90 jnz/jne - jmp 75- EB jz/je-nop 74-90 jz/je - jmp 74- EB jnz - jz 75-74 或 0F 85 - 0F 84 jz - jnz 74-75 或 0F 84 - 0F 85 jnz - jz 75-74 或 0F 85 - 0F 84
7、 je- jne 74-75 或 0F 84 - 0F 85 表 1 破解常见修改 (1)修改为 jmp(其示意图见图 6) je(jne,jz,jnz) =jmp 相应的机器码为 EB (意思是出错信息向上找到的第一个跳转),jmp 的作用是绝对跳,无条件跳,从而跳过下面的出错信息。例如: xxxxxxxxxxxx 出错信息,如注册码不对,sorry ,未注册版不成功, “Function Not Avaible in Demo”, “Command Not Avaible”或 “Cant save in Shareware/Demo”等,我们希望把它跳过,不让它出现。 xxxxxxxxxx
8、xx 正确路线所在,直接跳转到这里。 (图 6) (2)修改为 nop(其示意图见图 7) je(jne,jz,jnz) =nop 相应的机器码 90 (正确信息向上找到的第一个跳转) ,nop 的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处。例如: xxxxxxxxxxxx 正确信息,如注册成功,谢谢您的支持等,我们希望它不被跳过,让它出现,所以程序一定要顺利来到这里,不能跳转。在 OD 中,我们一般是把不需要设置NOP,只是把 JE 或者 JNZ 改为 JNZ 或者 JE 即可,也就是把相等则跳改为不相等则跳,或者不相等则跳改为相等则跳,把跳转过程相
9、反,达到更改程序流程的目的。 xxxxxxxxxxxx 出错信息,我们希望不要跳到这里,不让它出现! (图 7) 二,如何快速确定暴破物。 1,确定目标有没有加壳。没有最好了,有的话看是不是常见壳,可不可以用现有脱壳软件快速脱掉。搞不定的话,暂时放弃它。 “我吃定你了!” ,不要这样,老兄。不就是一壳么,不要和他一般见识。记着,你今天的重点是爆破。不要主次不分、本末倒置,这也是初学者最易犯的错误。 这方面,我用 PEID。它可以整合到资源菜单,非常方便。 2,确定用什么语言编写。我的经验是,DELPHI 的程序结构清晰、紧凑,最好分析。其次是 VC,BC,ASM ,比较难的是 VB,要有一定的
10、经验才可搞定一两个。 2,在反汇编文件中找到可疑点。 经典语句自不用说,比如, “恭喜” , “注册成功” , “注册码错误”“无效的注册码”, “Thank You“,“Sorry“.找到后,一般向上不远处就可看到条件转移语句 JZ、JNZ、JLE 什么的。 事实上,只有极少极少的软件只修改注册判断就 OK 的。所以我们要把更多的注意力转到其它的可疑点。如未注册标识,过期警告,次数标识,NAG 对话框.,熟练使用各种工具的搜索功能是基本功之一。找到后再向上不远处找条件转移语句。 三,如何暴破。 当你找准爆破点后,你会发现有很多种爆破的方法都可以达目的。 1,修改转移语句。 我一般这样改: 不
11、需要跳,我就把 JNE 改为 JE 或者把 JE 改为 JNZ 需要跳,我就把 JE 或者 JNZ 改为 JMP。 这可避免万一你有正确的注册码反而会出错的事情发生。 下面的附件我做了一个关于爆破的视频教程,希望对大家理解爆破有帮助。 4.动态追踪破解技巧破解经典句式 以下是经典的比较组合,常常是注册码的出现处,所以被称为破解经典句式。 (1) mov eax, /这里可以是地址,也可以是其他寄存器或 mov eax 。 mov edx, /同上,通常这两个地址就储存着重要信息或者可以是 pop edx。 call XXXXXXXX /关键 call。 test eax, eax /eax 为标志位。 jz(jnz)或 jne(je) /关键跳转。 (2) mov eax, /这里可以是地址,也可以是其他寄存器。 mov edx, /或是 pop edx,通常该地址就储存着重要信息。 call XXXXXXXX /关键 call。 jne(je) /关键跳转。 (3) mov eax, /这里可以是地址,也可以是其他寄存器 mov edx, /同上,通常储存着重要信息 cmp eax,edx /关键比较。 jnz(jz) /关键跳转。