玩玩破解,写给新人看(第四集)
本帖最后由 yyhd 于 2021-10-16 00:18 编辑第五课 继续打第一只老虎
在本集之前,我想再次感谢大家的鼓励和支持!看样,这么讲对于大家来说还是有收获的,我很欣慰,没有浪费大家宝贵的时间。另外,有朋友问我的课程是不是转载的,我再次说明一下,我的课程的每一个字都是我当下用键盘敲出来的,我是边想边写,没有抄袭别人的东西,因为我经历过新手的困惑,所以我才会有感而发,有感而写。
上一集我们打了第一只虎,就是OD,我们知道了OD这个工具是用来分析软件的汇编代码的,我们也知道了最基本的汇编指令,CALL、JZ、JMP和EAX,了解这三个指令可以让你很快上手破解。当然,汇编还有一些其他的指令,这些其他的指令主要分为三类,第一类是传送数据的指令,比如MOV、LEA、PUSH、POP等,它们的作用就是把数据从一个地址转移到另外一个地址,为什么要转移呢,目的是在程序执行中便于使用。那么对于我们破解来说,了解它们有什么用呢?用处就是你能够知道你感兴趣的数据存放在什么地方,你可以跟踪它的使用流程。你可能要问了,我怎么才能看到程序里面的数据呢?OD里面有一个窗口就叫做数据窗口,里面放的就是程序的数据。
红色方框里面就是OD的数据窗口,有些敏感信息在这里会显示。第二类汇编指令是比较判断指令,就是对两个数值进行比较,它往往放在验证CALL的下面,用于判断,比如CMP、TEST 指令,看下图。
红色箭头指的位置是CMP EAX,0,这句代码的意思就是比较EAX和零是否相等?比较的结果会影响下一行JNZ这个条件跳转是跳还是不跳?绿色箭头指的位置是TEST EBX,EBX,这句代码的意思是判断EBX的值是否为零?结果会影响下一行JZ这个条件跳转是跳还是不跳?第三类指令是运算指令,比如ADD就是两个数值相加,SUB就是两个数值相减,还有乘法、除法等等,了解运算指令的用处是能够分析出程序编写者的真码是怎么运算得来的,换句话说就是能够弄清楚这个软件进行验证的“算法”。你可能会问,真码不是作者在编程的时候就写好的吗?比如真码为5211314。呵呵,现在的软件很少用一个固定的真码了,你想想看,如果这个程序有一个固定的真码,那么有一个人知道了,那么所有人不都可以无偿使用了吗?因此,为了更好的保护软件,编写者在编写软件的时候是不会有固定的不变的真码的,最普通的方式是根据不同的登录账号,程序里面有一个算法的子程序,或者叫做算法CALL,作用就是负责根据登录账号计算出真码,所以真码不是作者写在程序里的,而是在程序执行时根据账号算出来的,所谓验证就是假码和计算出的真码进行比较。现在你的脑子里应该有这样的一个程序执行的流程,先调用一个算法CALL,根据登录账号计算出真码;然后调用一个验证CALL,对真假码进行比较;根据比较的结果通过条件跳转指令跳转到不同的代码(成功或者失败的结果)。现在清楚了吧,我们破解,也叫做逆向,所谓逆向就是从结果往前分析,找到关键跳转,然后你改一下流程,这就叫做“爆破”。如果继续往前找到验证CALL和算法CALL,就叫做“追码”和“追算法”。
我们进一步思考一下,通过登录账号计算出真码这种方式是不是对软件真正起到了保护作用?非也,因为有一个人知道了登录账号和真码这两个数据,那么其他人用这个账号和密码不就可以正常使用了吗?所以,现在很多的软件在编写时,不再用所有人都可以使用的同一个登录账号了,用什么呢?很简单,就是让每个计算机只能使用自己的登录账号,就是机器码、硬盘编号等等,那么就实现了对软件使用更安全的保护。看下图,一个商业软件的登录界面:
对于这种验证,怎么破解呢?道理还是一样,可以不去管算法CALL,我们只关注验证CALL,就是修改计算出的假码和真码比较的结果,也就是在验证CALL里面修改EAX的返回值,或者是修改验证CALL下面的关键跳转。你当然也可以去追真码,但是这个真码只是适合你的这台机器,别人不能使用,因为机器码不一样。
现在还流行网络验证。什么意思,就是算法CALL和验证CALL的代码在服务器上,我们本地程序传给服务器我们登陆的账号和密码,验证的过程在服务器上,我们看不到。那怎么破?还是这个道理,我们只关注验证CALL的返回值,服务器会把验证后的结果再传给我们的程序,只要我们能够找到返回值这句代码的位置,然后修改返回值就可以破解。当然,网络验证现在很复杂,对于新手而言,最简单的方法还是通过验证后的结果来反查关键跳转位置,这个是通用的。
最后一点补充就是“重启验证”。重启验证不是一种算法,而是一种登录账号和密码的方式。一般的软件都是每次登录时要输入账号和密码,点击登录后进行验证,这些动作都是人工的,挺费事的。有些编程人员就想出了一个便捷的方法,就是“重启验证”,你第一次打开软件时需要手工输入账号和密码,然后点击登录,这个时候软件除了执行验证流程以外,还会执行一个操作,就是把你输入的账号和密码自动保存在你的电脑里的一个位置,这样一来,等你下次再打开时,软件会自动读取上次保存的账号和密码,然后自动执行判断,如果正确,就提示“已注册”,如果错误,就提示“未注册”,这就是重启验证,你也可以把这样的软件叫做“自动验证”。我们在深入一下,软件会把我们输入的账号和密码保存在哪里呢?基本上就两个地方可以藏身,一个是注册表里面,一个是新创建的一个文件里,这个文件有可能是TXT格式 ,也有可能是INI格式的,还有可能是其他类型的。知道账号和密码存在哪里对于破解有什么用处呢?非常重要,及其关键,因为对于不同的存放位置,程序在读取账号和密码时会使用不同的命令,比如注册表,会用RegOpenKeyA等;比如TXT,会用ReadFile;比如INI,会用GetPrivateProfileString;
这样,我们在OD里面下函数断点时就会有所选择了。这就给我们提供了第二种找破解突破口的线索,就是这些专门的命令,注意一点的是,我们现在的突破口是在验证之前,所以通过这些命令找到代码位置后,要往下去找验证的关键位置,这个和以前说的通过结果往上反查是不同的。到这里,你更清楚一些了吗,通过验证前的函数和验证后的结果都可以做为破解的突破口,最终的目标当然是一致的,就是找到验证的关键位置。
至此,我们可以总结为一句话“两头找线索,中间去破解”。
本次给大家提供两个练手软件,一个是机器码验证登录,一个是注册表重启验证。大家先感受一下,下一集我们一起来打倒第二只大老虎“重启验证”,本节课只是“抛肉引虎”。
如果您觉得我发的内容确实对您有所帮助,请麻烦您支持一个热心值,进行精神鼓励,也是我继续写下去的动力!
玩玩破解,写给新人看(第一集)
玩玩破解,写给新人看(第二集)
玩玩破解,写给新人看(第三集)
玩玩破解,写给新人看(第四集)
玩玩破解,写个新人看(第五集)
玩玩破解,写给新人看(第六集)
玩玩破解,写给新人看(第七集)
玩玩破解,写给新人看(第八集)
玩玩破解,写给新人看(第九集)
玩玩破解,写给新人看(第十集)
玩玩破解,写给新人看(第十一集)
玩玩破解,写给新人看(第十二集)
玩玩破解,写给新人看(阶段练习1)
玩玩破解,写给新人看(第十三集)
玩玩破解,写给新人看(第十四集)
玩玩破解,写给新人看(第十五集)
玩玩破解,写给新人看(第十六集)
玩玩破解,写给新人看(第十七集)
玩玩破解,写给新人看(第十八集)
玩玩破解,写给新人看(第十九集)
玩玩破解,写给新人看(第二十集)
玩玩破解,写给新人看(第二十一集)
玩玩破解,写给新人看(第二十二集)
玩玩破解,写给新人看(第二十三集)
玩玩破解,写给新人看(第二十四集)
闲谈如何破解软件?
玩玩破解——小白实战1,你也行!
玩玩破解——小白实战2,巧搜字符串
玩玩破解——小白实战3,易语言字符串比较通杀
玩玩破解——小白实战4,冰火两重天
对新人们学习《玩玩破解》系列教程的集中解答
玩玩破解—加点油,再前行! dtl521 发表于 2021-1-26 16:58
嘿嘿嘿,在这里看到你了!!你还是非常不错的,看了你的文章我就特别的喜欢,因为你是白话。不过有一些地方 ...
JE ;等于则跳转
JNE;不等于则跳转
JZ ;为 0 则跳转
JNZ;不为 0 则跳转
不知道的可以多百度呗 嘿嘿嘿,在这里看到你了!!你还是非常不错的,看了你的文章我就特别的喜欢,因为你是白话。不过有一些地方不是很明白:如果有壳,到底如果破壳?之前你没有讲。还有Jmp是无条件跳转,JZJNZ是有条件跳转。。。那么第二课里面的Je 是个什么跳转???希望能够帮忙解释一下。 另外如果版主看到的话能不能把验证码的格式改一下,真的看的眼花缭乱,眼睛有点难受。 本帖最后由 明月清疯 于 2021-1-29 17:18 编辑
追更ing,改成jnz就可以直接成功了,是吗!那追真码怎么追?
ps:交作业
方法一:修改为jnz,验证码不正确的情况下登录成功
方法二:下断后直接点登陆出真码,把下的断取消按F9输入记录的真码,登录成功
方法三:nop大法!
Jump Equal:相等时跳转
Jump No Equal;非相等时跳转
Jump Zero ;值 0 时跳转
Jump No Zero;值非0时跳转
Jump(跳转)Equal(相等)No(非,不)Zero(零),所以说,学习编程什么的英语还是要有点基础的,倒不用非得有级 交作业,先来解第一题的机器验证码。
第一种解题思路:最简单最粗暴,NOP大法好,直接爆破完事
第二种方法我参考了本版第一名的思路,下断点,等CALL里面自己比较出真码,但这个方法如老师讲的,只适用于我个人,所以全当交流了
第三种解题思路,这个是听老师的尝试追码
首先看这个JE是直接跳过了成功去了失败,所以JE上面的CMP就是决定JE跳不跳的核心了
同理可得,这个CALL里面自然是验证CALL
于是答案呼之欲出,直接改CALL或者CMP都可以让JE不跳转就完事了
我也是破解小白,今天才刚学,本来就很有兴趣,看到第三章之后破解了第一个,当时心里真的激动,作业做到CM5的时候,在验证失败上面一个跳转把JE改成JNE后,保存之后可以注册和登录,但是退出去后又是未注册状态,所以就研究这个重启验证,然后琢磨了一个小时,左思右想,然后想到了这几个步骤,分享出来,大家点评一下,给点指导意见 跟到的数据为:
HKEY_LOCAL_MACHINE\SOFTWARE\CM5\useID
52pojie
HKEY_LOCAL_MACHINE\SOFTWARE\CM5\usePASS
5211314
无损破解,直接添加注册表,即可
方法二:
直接在认证成功跳转注册处NOP,直接过重启验证
本帖最后由 坚持是一种品格/ 于 2021-2-5 13:59 编辑
小白学习爆破登录CM4
建议加个VMP 哪怕是 ASP UPX也行 可以锻炼脱壳 修复 好玩点 不然好容易找到字符串 不羁的风儿 发表于 2021-1-26 16:26
老哥 一天两更啊 支持!~~
刚好最近几天空闲 我也是萌新,作业CM4里面是查询的字符串,找到的的关键跳,
后来学习上课有网友回复作业里面学习的 下个断点再运行,就能看到 正确的密码了,第二个方示是NOP关键跳,
第三个方法是 是JE跳上面那个比较 CMP我把后面的那个改成1了,也成功了,谢谢。
作业CM5 只能还是通过搜字符串找到关键跳 NOP 掉,就可以了。
但是无法利用下断点 找到正确的账号和密码;。 老哥 一天两更啊 支持!~~ 追更中,辛苦了 讲的太好了,通俗易懂!!看好你哦!! 这更新速度,👍 这个确实新人也比较容易看得懂
支持一下 上一会班,闲了一刷就有楼主发的帖子,摸鱼的同时增加知识点 yyhd 发表于 2021-1-26 16:35
刚好最近几天空闲
老哥真努力!学习了 支持一下