热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

详述破解技术中的暴力破解原理

不可不说一下学习破解的三个阶段:初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破。中级,追出软件的注册码。高级,写出注册机

不可不说一下学习破解的三个阶段:
  初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破。
  中级,追出软件的注册码。
  高级,写出注册机。
  先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。
  明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的“造型”,这样,我们是不是就可以为所欲为了?
  常见的修改方法有两种,我给你举例说明:
  no.1
  在某软件中,这样来进行注册:
  00451239 call 00405e02 (关键call,用来判断用户输入的注册码是否正确)
  0045123d jz 004572e6 (!!!<--此为关键跳转,如果用户输入的注册码正确,就跳向成功处,即004572e6处)
  0045xxxx yyyyyyyyyy
  xxxxxxxx yyyyyyyyyy
  xxxxxxxx yyyyyyyyyy
  xxxxxxxx 执行到此处,就提示用户注册失败
  ..提示用户注册码不正确等相关信息
  ...
  004572e6 ... <--(注册成功处!!!)
  ...提示用户注册成功等相关信息
  呵呵,看明白了吗?没有的话,我来给你讲一下。在软件执行到00451239处的时候,call置0045e02处来进行注册码判断。接着回来后就来一个跳转语句,即如果用户输入的注册码正确就跳到004572e6处,跳到此处,就算是注册成功了。如果用户输入的注册码不正确的话,那么就不会在0045123d处进行跳转,而一直执行下去。在下面等它的,是注册失败部分。
  想明白了吗?嘿嘿...没错,我们只要把那个关键跳转jz给改为jnz(如果用户输入的注册码错误,就注册成功,输入正确则注册失败)。当然你也可以将jnz修改为jmp,这样的话,你输入的注册码无论正确与否。都可以注册成功。
  no.2
  我们再来讲一下另外的一种情况:
  00451239 call 00405e02 (关键call,用来判断用户输入的注册码是否正确)
  0045123d jnz 004572e6 (!!!<--此为关键跳转,如果用户输入的注册码不正确,就跳向失败处,即004572e6处)
  0045xxxx yyyyyyyyyy
  xxxxxxxx yyyyyyyyyy
  xxxxxxxx yyyyyyyyyy
  xxxxxxxx 执行到此处,就提示用户注册成功
  ...提示用户注册成功等相关信息
  ...
  004572e6 ... <--(注册失败处!!!)
  ...提示用户注册码不正确等相关信息
  你一定看出跟第一种情况不同的地方了吧。没错!它与第一种不同的,就是第一种情况是如果注册码正确,就跳到注册成功处,如果没有跳走,就会执行到失败处。而这一种情况则是如果注册码不正确,就跳到注册失败处,否则将执行到注册成功处。
  这种情况的修改,除了把jnz改为jz外,还可以将其改为nop,nop这个指令没有任何意义,将该条指令修改为nop后,便可随意输入注册码来进行注册了。
  原理以经给你讲了,下面我们再来讲一下具体的修改办法吧。
  先说一下虚拟地址和偏移量转换的问题,在softice和w32dasm下显示的地址值是所谓的内存地址(memory offset),或称之为虚拟地址(virual address,va)。
  而十六进制工具里,如:hiew、hex workshop等显示的地址就是文件地址,称之为偏移量(file offset) 或物理地址(raw offset)。
  所以当我们要通过那些十六进制工具来对可执行文件中的相应指令进行修改的话,先要找到它的file offset。我们没有必要去使用那些专门的转换工具,在w32dasm中就有这个功能,比如说你w32dasm中来到0045123d处,在w32dasm界面下方的状态栏中就会出现该条指令的虚拟地址和偏移地址,即@:0045123d @offset 0005063dh 后面的这个0005063dh就是相应的偏移地址。我们得到该地址后,便可用ultraedit等十六进制工具来对可执行文件进行修改了。比如使用ultraedit,你先用ultraedit打开该可执行文件,然后按ctrl g,接着输入你得到的偏移地址,就可以来到其相应的机器码处。
  再给你讲一下机器码,所谓的机器码。就是你看到的那些个十六进制数据了。还记的它们与汇编指令是一一对应的吗?
  以下这几个是爆破时要用到的,其它的如果感兴趣,可自行查看相关资料:
  jz=74;jnz=75;jmp=eb;nop=90
  爆破的时候,只要对以上机器码进行相应的修改就行了,比如第一种情况的时候,可以将74修改为eb,即将jz修改为jmp。而第二种情况,责需将75修改为90,即将jnz修改为nop。
  上边讲了爆破的原理,你需要明白的是。爆破只是你学习crack的开始,是很简单的手段。刚入门的时候可以玩玩儿,但希望你不要就此不前!
  其实要找到注册码并不是一件多么难的事,我是指你所针对的软件不太那个的时候 不过你无需惧怕。
  刚才我们说爆破的时候不提到过关键call吗?一般情况下,这个关键call就是对两个注册码(一个是软件自身通过你的注册名或机器什么的计算出来的正确的注册码,令一个就是你输入的错误的注册码)进行比较。我前边提到过,call之前一般会把所用到的数据先放到一个地方,call过去的时候再从这些地方把先前放入的数据取出来,进行相应的处理。这个关键call也是这样,在call之前,一般会把那两个注册码放到堆栈或某个寄存器中。嘿嘿,我们只要在调试器中,单步执行到该call,在未进去之前通过call之前的指令判断其将正确的和不正确的注册码放到哪里了。然后再用相应指令进行查看就成了,我说过不难的。
  下面列出两个最常见的情况:
  no.1
  mov eax [ ] 这里可以是地址,也可以是其它寄存器
  mov edx [ ] 同上,该条指令也可以是pop edx
  call 00?????? 关键call
  test eax eax
  jz(jnz)或jne(je) 关键跳转
  看明白了吧,在关键call之前,软件会把两个注册码分别放入eax和edx中,你只要在call处下d eax或d edx就能看到正确的注册码了。
  no.2
  mov eax [ ] 这里可以是地址,也可以是其它寄存器
  mov edx [ ] 同上,该条指令也可以是pop edx
  call 00?????? 关键call
  jne(je) 关键跳转
  以上两种情况最为常见,而那些个不太常见的情况,我们这里就不再提了。到下下一章的时候,我会给你讲相关方法的...
  关于查找软件注册码的部分,就到这里。具体内容,下下一章咱们再说。(不是说了吗?我以经可以接到你的砖头了,干嘛还要丢呢? )
  最后,再来说最后的所谓的高级阶段,如果你相信自己。并且热爱crack,那么你一定会熬到这个阶段的,只是时间因人而异。
  其实分析软件的算法,是有好多技巧在里面的。呵呵,最起码我刚开始的时候就摸不着头脑,那么多call,每个看起来,都很重要,都追一遍?结果连好多api都被追了进去。等你自己真正用心分析了一个软件的算法,并写出了注册机后。你就会明白其中的道理了。








推荐阅读
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 本文探讨了Java编程的核心要素,特别是其面向对象的特性,并详细介绍了Java虚拟机、类装载器体系结构、Java类文件和Java API等关键技术。这些技术使得Java成为一种功能强大且易于使用的编程语言。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 本文详细介绍如何利用已搭建的LAMP(Linux、Apache、MySQL、PHP)环境,快速创建一个基于WordPress的内容管理系统(CMS)。WordPress是一款流行的开源博客平台,适用于个人或小型团队使用。 ... [详细]
  • 本文详细介绍了 RosPack 类的功能和用法,探讨了其在 ROS 系统中的重要作用。RosPack 类提供了类似于终端命令 rospack 的功能,能够方便地查询和管理 ROS 包的相关信息。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 方法:1 配置数据库basediros.path.abspath(os.path.dirname(__file__))  #获取当前文件的绝对路径appFlask(__name__ ... [详细]
  • DCG 创始人兼首席执行官 Barry Silbert 发布致股东信,详细解答了 19 个核心问题,并分享了公司未来的发展方向。 ... [详细]
  • 异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 本文详细介绍如何使用CSS自定义HTML5视频播放器的样式,涵盖常见属性及跨浏览器兼容性问题。发布时间:2020-09-14 14:46:29;来源:亿速云;阅读量:58;作者:小新。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
author-avatar
林小琳LLL
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有