从零开始学破解爆破
- 格式:doc
- 大小:38.00 KB
- 文档页数:4
从零开始学破解爆破
首先我们来学习下汇编的基础知识,在以后的破解过程中要经常用到的。
软件破解常用汇编指令
cmp a,b // 比较a与b 比较a与b(是相等还是a>b a
mov a,b // 把b值送给a值,使a=b 赋值语句
ret // 返回主程序
nop // 无作用,英文(no operation)简写,意思“do nothing”(机器码90)
(用ultraedit打开编辑exe文件看到90相当汇编语句的nop)
call // 调用子程序,子程序以ret结尾就不用我说了吧
jne或jnz // 不相等则跳(机器码是75或85)
jmp // 无条件跳(机器码是EB)
jb // 若小于则跳
ja // 若大于则跳
jg // 若大于则跳
jge // 若大于等于则跳jl // 若小于则跳这几个是跳转语句一会就会用到所以大家要先记住
以上这些大家一定要熟练记住了
爆破无敌口诀
一条(跳)就死,九筒(90)就胡——(对应上面的2--修改为nop)
一条(跳)就胡,一饼(EB)伺候——(对应上面的1--修改为jmp)
(74)变(75)
(84)变(85)不懂不要紧,一定要先牢记,以后慢慢的理解。
首先我们简单说下以后破解用的工具
1.探测工具peid fi等,
2.脱壳工具很多就不说了,查到什么样的壳大家可以去网上找相应脱壳工具,也有很多教程
3.反汇编工具静态反汇编工具有W32DASM,C32Asm 动态的有Ollydbg(也就是OD)SOFTICE TRW2000 l
OD是当今最流行的反汇编工具。
4.资源编辑工具有UItraEdit WinHex eXeScope 等。他们可以自定义软件如修改文字修改菜单等我就不介绍了,网络上有很多工具的使用教程。
现在就来让我们用一个例子来进入破解世界吧!
今天我们破解就是这个名片王
看到了把需要我们注册。
破解思路
第一步初步检测没加壳是用Borland Delphi 6.0 - 7.0写的
第二步留心注册提示恭喜!您已经是本软件注册用户。看到了把然后在这条语句上双击鼠标左键
第三步找到突破口
第四步定位修改点
一也就是用peid 等软件查是否有壳,有壳的话先把壳脱了在破解
二要在代码的海洋中如何去确定位置呢,所以就要找到一些线索,以便我们顺藤摸瓜找到需要的东西,现在关键问题什么样的信息可以当作线索?如何去寻找这个线索。在注册软件时,如果失败一般会弹出一些类似于“注册失败”“注册码错误”等一些信息,显然他们都可以成为追踪软件注册流程的线索,这里将他们归功于注册信息,如果找不到,我们也可以找其他的信息,如未注册标识过期警告等一些信息。
看到了把我就用注册信息当突破口{
三如何寻找一个软件突破口,将任意软件用OD载入,我们有两种方法可以找到这些线索。
第一种是在反汇编窗口中单击鼠标右键,在弹出的菜单中,选择”查找“在单击“所有参考文本字串”
第二种是利用OD插件依然在反汇编窗口中单击鼠标右键,在弹出的菜单中,选择“UItra String Reference"或者是”超级字符串参考”(在新版的OD都带这个插件)在单击”Find ASCII“f*Q9 u>1p
我推荐用第二种方法,所以就演示第二种方法看我演示
四为了说明如何定位修改点,我们需要分析一下软件注册流程。
这个软件的注册流程是把我们输入的注册码和正确的注册码进行比较,如果两者不相等就跳向下一个地方,如果相等就弹出“注册成功”的提示。
注意这里的关键词跳转确定修改的位置怎么去修改是不是和我们想象中的流程很符合啊,在”您已经注册“这个提示对应的代码上方有一个跳转"JNZ" 我们来看看啊
看到了把
刚好就是”不相等就跳走“的意识所以这个跳转非常可疑,先把他假设成我们要修改的位置。在这行代码处右键打开”汇编“功能(也可以直接双击左键)将“JNZ”改成”JZ“,也就是把“不相等就跳走”的指令改成“相等就跳走”
修改完毕后选中被修改过的代码,点击右键,选择“复制到可执行文件”,选择,然后在弹出的新窗口中那部分代码会被高亮显示,再次单击右键,选择保存到文件就可以了。
我们来看看能不能成功啊成功了。
在思考下刚才提到的注册流程,如果我们找到的这个跳转就是要进行修改的位置,那么我们输入任意错误的注册码就会提示成功。反而是输入正确的注册码要没有反应了。也就是他的缺点。
下面就给大家留个作业
在例子中把关键语句je或者jz 修改成JMP。呵呵现在我们不管输入输入的注册码正确不正确都会提示我们注册成功,破解就算比较完美了。
通过本课的学习要掌握哪些知识呢 1.学习并记住最基本的汇编指令)
2.学会查看软件的基本信息
3.对软件进行爆破
4追出软件的注册码
CALL原型:
push edi ; 入载怪物ID
mov dword ptr ds:[eax],0
call elementc.006E2A20 ; ID选怪CALL
我编写的易代码:
.版本 2
.子程序选怪CALL
.参数怪物ID
.局部变量参数, 整数型, , "2"
.局部变量cpu, 寄存器
参数[1] =怪物ID
参数[2] =0
调用函数(进程句柄, 十六到十(“006E2A20”), 参数, cpu, , )
.子程序_按钮1_被单击
.局部变量基址, 整数型
.局部变量一级基址, 整数型
.局部变量二级基址, 整数型
.局部变量怪物ID, 整数型
读整数型内存(进程ID, 十六到十(“00bc7dcc”), 基址)
读整数型内存(进程ID, 基址+十六到十(“1c”), 一级基址)
读整数型内存(进程ID, 一级基址+十六到十(“34”), 二级基址)
读整数型内存(进程ID, 二级基址+十六到十(“c24”), 怪物ID)
选怪CALL (怪物ID)
最后发现用上面的程序根本上就选择不到怪物,我就使劲找错误,最后我最后一条代码选怪CALL (怪物ID)改为选怪CALL (十六到十(“80104640”)),80104640是用OD找出的一个怪物ID,最终能够选怪了,当然它只能选择那一个怪物(怪物ID80104640的怪物),这说明CALL写对了,问题出现在参数怪物ID上了,我仔细想了想人物这个怪物ID是访问代码的,所以选不到怪也就正常了,求指点下,十分感谢……
我只讲实现原现,具体怎样做,你要自己练功夫.据我所了解dll注入进程实现办法普遍的三种:一.如果你有一个程序可以启动,则你可以用打开远进程,然后直接远进程注入dll; 二.你的dll程序可以注册win消息钩子,然后你的一个进程加载这个dll并运行win消息钩子注册程序,其结果是:所有可处理windows消息的进程将自动的加载你的这个dll,这就实现了dll注入,但是基本上所有控制台进程不会自动加载你的dll; 三.注册dll服务,这个要系统重启后才生效,但是杀软有可能报为病毒,并杀之