C语言破解源码解析为什么电脑软件这么容易被征服~!

我们先来一个最最简单的软件破解,假设我们写了一个软件,它的注册手段代码如下:当我们PC上的软件运行后,当我们需要执行这类关键算法时,我们会向这个Ukey传递数据,然后UKey将结果计算出来,返回给PC的软件上,这样就避免了用户直接能够逆向取得关键的算法代码,破解也就无从谈起了。...

理论上没有不能破解的软件,但不代表破解软件比开发容易10000倍,天真,反破解的目的不是为了做一个牢不可破软件 >破解软件的成本远远大于购买软件的成本。大多数著名的软件 都具有使破解软件 变得更加困难的实力。从用户的角度来看,它会释放水!

只说不练假把,老司机给大家简单介绍几个有代表性的软件破解。当然,要理解下面的内容,还需要一点C语言的编程知识。让我们从最简单的 软件 破解开始。假设我们写了一个软件,其注册方法代码如下:

#include "stdio.h"#include "string.h"int main(){char Key[32];printf("请输入注册码:");  gets(Key);if (strcmp(Key,"abc123456")==0)printf("注册成功");elseprintf("注册失败");}


编译成exe并运行。

mac比较代码破解版_吾爱破解mac版百度网盘_超级播霸mac版 破解

如何破解?

超级简单CoolPaint(汉王绘画板绘图软件),你把这个程序的后缀改成txt打开,搜索注册码,然后翻键找到。

mac比较代码破解版_吾爱破解mac版百度网盘_超级播霸mac版 破解

别笑了,直到今天,还是有很多软件使用这种软件保护机制,但是这些软件大部分都不是很有价值,比如xx管理系统、计算设备之类的,或者软件的作者别有用心,防君子不防小人。

你可能会问,有什么问题?

这种保护机制的问题在于,目前大多数编译器都直接将字符串常量存储在可执行文件结构中,所以如果硬编码密钥,上述破解方法几乎是经过时间考验的,甚至是不必要的。任何反向破解的知识都可以做。

那么,让我们进入反破解V2.0时代吧。为了与时俱进,我们对上面的代码稍作改动:

#include "stdio.h"#include "string.h"#include "windows.h"#include "math.h"
int main(){char iKey[32];char Key[32];char ID[32];int iID=0xabc1d3f;sprintf(Key,"%x",iID*8+123456);printf("你的机器码是%x\n",iID);printf("请输入注册码:"); gets(iKey);if (strcmp(Key,iKey)==0) MessageBoxA(0,"注册成功","",MB_OK);else MessageBoxA(0,"注册失败","",MB_OK);}

吾爱破解mac版百度网盘_mac比较代码破解版_超级播霸mac版 破解

现在“TXT”破解方法已经没用了,你看,找不到密钥了。

mac比较代码破解版_吾爱破解mac版百度网盘_超级播霸mac版 破解

这个保护方法怎么样,是不是熟悉的配方,熟悉的味道?这个机器码可以从网卡mac、CPU型号、内存大小等生成。

当然,密钥的算法也可以通过MD5、SHA等方式得到,而不是简单的乘以8再相加。总之,你可以从机器码到注册码玩算法。 .

但是有什么用呢?

打开,打下一个断点(也就是弹窗的功能)。

mac比较代码破解版_超级播霸mac版 破解_吾爱破解mac版百度网盘

然后输入错误的注册码,下断点,很快,我们就来到逻辑处理代码,判断注册码是否正确。

猜猜如果我们删除判断注册码是否正确的代码会发生什么)(填写nop指令)?

你会发现,拿着草,不管我输入什么,注册成功!

超级播霸mac版 破解_吾爱破解mac版百度网盘_mac比较代码破解版

那么问题出在哪里?

你发现万恶之源是从那个函数开始的,正是这个函数让我们找到了注册码判断码。

关注微信公众号“程序员成长之路”,后台回复“2048”关键词,免费获得5T技术学习资源!包括但不限于:C/C++、Linux、Java、PHP、AI、MCU、树莓派等

时至今日,仍有很大一部分软件使用这种20、30年前使用的保护方法,每年都死于破解软件,可以被地球的三圈包围,也就是这种保护机制,实现了所谓软件发布十分钟后被破解的悲惨结局。

这个时候你要想想,mmp,有鬼,既然不好用,那我就不用了,所以你把代码改成如下:

#include "stdio.h"#include "string.h"#include "windows.h"#include "math.h"
int main(){char iKey[32];char Key[32];char ID[32];int iID=0xabc1d3f;sprintf(Key,"%x",iID*8+123456);printf("你的机器码是%x\n",iID);printf("请输入注册码:"); gets(iKey);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);}

你看,tskmac比较代码破解版,只要你的注册码不正确,我就直接退出软件(或者跳到别的地方),你怎么办?

可惜每年都有鬼,“注册成功”这几个字还是出卖了你,打开,找到字符串引用,双击。

吾爱破解mac版百度网盘_mac比较代码破解版_超级播霸mac版 破解

哦,结束了,换不换汤,我还是被抓到了。

你意识到在这种地方判断注册码是不可靠的,所以你改变策略,复制检查注册码的代码n次,或者逐个字符检查注册码的准确性,还有一些人会注册成功 等待词被加密或混淆,然后在需要时取出。

#include "stdio.h"#include "string.h"#include "windows.h"#include "math.h"
int main(){char iKey[32];char Key[32];char ID[32];int iID=0xabc1d3f;sprintf(Key,"%x",iID*8+123456);printf("你的机器码是%x\n",iID);printf("请输入注册码:"); gets(iKey);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);}

你放心,不管你复制多少次,找出来是迟早的事,会被破解的。同时,只要需要使用明文字符串,迟早都要解密。这种方式类似于添加Upx压缩壳,只需要等待数据解压完成,一切又是明文了。

所以明智的做法是在需要的时候解密,使用后立即擦除明文,这样可能会延迟更长的时间。

但这仍然是时间问题。

你开始发现,不如主动找出内鬼,也就是我们的名人,解决问题而不是解决问题。最后从调试器入手mac比较代码破解版,然后成功进化到抗破解V2.5时代。

这时候就不得不介绍一个老掉牙但很有名的功能了:

你可能有点疑惑,这个函数是干什么用的?

简单来说,当我们破解一个程序的时候,大多数情况下我们会打开一个叫做调试器的东西来反编译分析软件,嗯,这就是重点。

这个函数可以检测我们的程序是否被调试器附加。你以为,一般情况下,我们使用软件会满载并支持一个调试器。如果你使用调试器将设备附加到我身上,你一定是在尝试做坏事。

所以,你开始编写这样的代码:

#include "stdio.h"#include "string.h"#include "windows.h"#include "math.h"
int main(){char iKey[32];char Key[32];char ID[32];int iID=0xabc1d3f;if (IsDebuggerPresent()) { MessageBoxA(NULL,"小样,就你还破解我的程序,回家喝奶去吧","",MB_OK);return 0; }sprintf(Key,"%x",iID*8+123456);printf("你的机器码是%x\n",iID);printf("请输入注册码:"); gets(iKey);if (strcmp(Key,iKey)==0)printf("注册成功");elseexit(0);}

所以,当你下次加载和调试你的程序时,会出现以下场景:

吾爱破解mac版百度网盘_mac比较代码破解版_超级播霸mac版 破解

在很长一段时间(包括现在),很多软件或者加密shell都会检查调试器是否在自己调试,比如tls段会在加载时执行,如果检测到正在调试被别人破解了,会设置一个标签让程序跑到没用的地方或者直接退出重启。它还使用变形的 PE 头来防止调试器加载。总之,方法很多。

不幸的是,这仍然没有用。例如,可以通过修改 FS 寄存器的标志位来完全失火。相同的方法包括但不限于检查int 3软中断、Raw Call、Query PEB、检查Debug和父进程等。等等等等,有办法绕过。

嗯,只要插上,总能一根一根拔出来。

好了,没有别的办法了,别着急,路高一尺,魔道一尺高,现在我们来了最流行的,防裂V3.0 VMP 时代。

首先澄清一下,这里的VMP不是VMP shell,它叫全过程。总之,我们对破解软件这么熟悉,并不是因为我们对x86 x64 arm chant的汇编指令集太熟悉了。

如果我们自己发明一套指令,然后用这个指令集编写程序并在我们自己的虚拟机上运行,​​那么,当破解者进来时,他们不会一头雾水吗?

不幸的是,VM的运行机制决定了它可能会造成几十甚至上百倍的性能损失。因此,必须使用 VMP 来保护关键代码而不是性能瓶颈,否则您的 软件 运行如下:

mac比较代码破解版_超级播霸mac版 破解_吾爱破解mac版百度网盘

那么,VMP保护机制完善吗?

当然不是,VMP 说白了,它只能延长分析时间。如果你让VMP足够复杂,就足以让一个醉酒的梦死去,但如果这个时间足够长,你的软件就足够贵人有破解的欲望了,他们还是可以充分分析出它的运行机制你的虚拟机,等你的虚拟机运行机制搞清楚了,软件离垮台也不远了。

但是你可以放心,分析VM机器的执行机制比自己写VM机器要头疼得多。毕竟,一个是你需要通过代码来猜测别人的想法,另一个是你自己的想法被转换成代码,所以基于此可以说:

破解软件比制作软件容易,而且很多情况下都不存在!

超级播霸mac版 破解_吾爱破解mac版百度网盘_mac比较代码破解版

你可能会问,为什么现在市场上有这么多软件,这么多游戏,这么多好听的保护软件,还是被破解了。而且刚发布一天就被破解了。

其实很大的问题在于这个商业保护软件(比如保护壳),因为这些保护壳大部分都会卖给大量的软件开发者,有一句话俗话说树吸风。

和流行的VMP保护机制一样,之所以能被保护,是因为其运行机制的破解者并不清楚。如果你软件自己用,而你软件还没有多大价值,除非老板空虚寂寞,不然谁有空来分析你的虚拟机是怎么运行的。

但商业保护壳不同。不管它采用什么样的保护机制,只要分析清楚,几乎所有使用这种保护机制的软件都会倒下,进入灰色行业。破解甚至是相当有利可图的,只要不更新这种保护机制,长期来看,一笔投资就会有回报。

所以,第一次分析只需要很长时间,然后就只是例行公事了。

所以,买个商用的保护壳,其实它的保护作用并没有想象中的那么强,而且在灰色行业很可能是没用的,甚至有防逆向基础的码农也可能会写出来自己。它可能更有效。

当然,一个软件是大概率被破解的,还是我之前提到的那句话:反破解不是让软件不能破解SortPics ,而是让破解软件 成本远高于购买软件 的成本。

mac比较代码破解版_吾爱破解mac版百度网盘_超级播霸mac版 破解

毕竟,你说过你的一个软件是开源的非常有层次感的曲线笔刷,没有人喜欢使用它。你整天都在想如何防止它被破解。

那你会开始问,有没有更强大的防破解技术?

看来我之前说的不过是耽误时间而已。哎,我们得纠正一下心态。不管是加密还是破解,其实到头来都是在拖延时间。看看那些加密算法,按照他们的数学理论,如果你想破解它,就算你把世界上所有的电脑加起来,也够你算三个天启了。

不过别着急,还有更厉害的方法,你想想,为什么我们之前说的软件都被破解了,最重要的原因是我们能拿到代码,就算这个代码是已经是一堆编译好的汇编指令了,只要我们有这一堆代码,迟早我们就能弄清楚这个程序到底是怎么回事,然后才能对症下药。

这就像给你一袋面粉,程序是面包机。你把面粉放进面包机做面包。有一天你很好奇,这面包机是怎么做一块面包的? ,你拆开面包机,然后你就知道面包机是怎么回事了。

那么有没有办法让用户不知道我们的代码是什么样的?就像你把面粉交给面包师做面包一样,面包是怎么做出来的,你只能指望面包师有没有这种感觉告诉你。

为此,有一个相当流行和常见的早期游戏反破解工具(物理)。

mac比较代码破解版_超级播霸mac版 破解_吾爱破解mac版百度网盘

你现在可能脸上有问号,但我不是在开玩笑,在 2000 年代,大多数游戏都在 CD 上运行,但很容易盗版,复制 CD 上的数据,然后 10,000 份盗版光盘是可以复制的,所以游戏厂商想了个办法,就想到了锤子。

操作方法很简单。拿锤子和钉子,在盘片上划几道人为的坏道,然后把数据烧到正确的扇区,这样程序还是可以正确的。它运行,但是当光头读取坏扇区时,它将无法读取。

所以你会发现打开光盘后,没有密钥文件,所以无法复制游戏或程序。同时会在坏道的位置做标记,在游戏运行时也会进行检查。 ,那么如果你想盗版,你必须拿起锤子,从光盘上的相同位置敲出相同的划痕。当然,这几乎是不可能的。

吾爱破解mac版百度网盘_mac比较代码破解版_超级播霸mac版 破解

当时,这项技术也被称为防盗环技术,但无论它的名字多么高大,它本质上都是一个锤子和钉子。不幸的是,在虚拟光驱出现之后,也有一种复制光盘的方法。所有数据(包括坏扇区),所以今天这项技术毫无用处。但它仍然给了我们足够的灵感。

现在让我们进入抗破解V3.x的时代,之所以不叫V4.0是因为这种技术已经存在很久了,而且要早得多比 VMP 保护。并且可能是最新的理论上不可破解的抗裂方法。

我们要讲的第一件事就是加密狗或Ukey保护,即运行软件你需要在电脑中插入一个类似U盘的东西。其实这个Ukey就是一个微机,软件一些关键的算法和代码都在这个UKey芯片里面。

当我们PC上的软件运行时,当我们需要执行这样的密钥算法时,我们会将数据传递给这个UKey,然后UKey会计算结果并返回给PC的软件这样用户就可以直接反方向获取关键算法代码,破解是不可能的。

这就是为什么 Ukey 保护在今天仍然很受欢迎的原因。

不幸的是,UKey 保护仍然有很多限制。首先,带Ukey小偷很麻烦。如果UKey丢失了,重新申请就麻烦了。运行软件插Ukey也是一件很麻烦的事情。

同时,UKey的性能决定了它可能无法执行一些消耗过多性能和内存空间的代码,数据交互也会因为带宽和通信延迟而造成性能损失,所以它是与 VMP 保护机制相同。它也不是省油的灯。

同时,开发者水平不到位,应该保护的代码没有保护,保护没用的代码被卡住了,这也会带来机会,而且只要你的< @软件够贵的,你是不是太看不起我华强北了?

把Ukey拆开,用某种“药水”剥掉外层找到内层芯片并连接吹过的“读针”(有些芯片甚至跳过这一步,用热风吹一下板子) gun Read ROM),然后读取芯片的代码。

超级播霸mac版 破解_mac比较代码破解版_吾爱破解mac版百度网盘

因此,UKey 保护也宣告倒闭。

你发现只要把实物交到用户手里,问题迟早会出现。因此,这种Ukey保护现在已经成为大多数情况下带有数字证书的网络验证模式。这种密钥代码从Ukey传输到服务器,通过网络进行数据交互。

其实这种保护机制和Ukey保护原理是一样的,并没有本质的区别,但是由于网络带宽和延迟的考虑,它也有一定的性能损失和设计缺陷。

值得一提的是,这种网络保护手段必须专门设计用于保护程序中的一组关键“功能”代码,而不是“防破解”代码(例如代码解密、注册验证),因为后者几乎没用,仍然可以通过清除“反破解”代码或转储解密代码或伪造本地服务器来实现破解。

所以你期待一堆x盾,x宝一键可以一劳永逸地保护程序,而且程序必须由专业的编码人员而不是彩笔专门设计才能达到应有的保护效果。

但现实情况是,这种网络保护设计往往会因为考虑到用户离线操作和性能延迟瓶颈而存在很大缺陷。所以,不是这个东西不好,而是理想很丰满,现实很骨气,真的是无能为力了。

当然,代码保护的手段很多,玩的花样也很多。本文仅简单介绍一些具有代表性的破解和防破解方法。

过去的文章:

C语言学习交流群2k人,扫码备注入群

mac比较代码破解版_吾爱破解mac版百度网盘_超级播霸mac版 破解

吾爱破解mac版百度网盘_mac比较代码破解版_超级播霸mac版 破解

("物理破解你怎么看

”)

相关文章

发表评论