你开始发现,主动出击不如找出内奸,就是我们出名是为了解决问题而不是解决问题 。最后你开始攻击调试器,然后你成功进化到反破解V2.5时代 。
这个时候就不得不介绍一个古老却非常有名的函数了 。
IsDebugPresent
你可能有点困惑 。这个功能是做什么用的?简单来说 , 当我们破解一个程序时,大多数情况下 , 我们会打开一个叫调试器的东西 , 对软件进行反编译和分析 。呃,这才是重点 。IsDebugPresent函数可以检测我们的程序是否被调试器附加了 。想想吧 。一般情况下,我们在使用软件的时候会用到调试器 。如果你给我附上调试器,你肯定会想干坏事 。
所以,你开始像这样写代码:
#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);}
因此,下次ollydbg加载并调试您的程序时,将会出现以下场景 。
很长一段时间(包括现在)很多软件或者加密壳都会检查自己是否有调试器调试 。例如,tls段将在加载时执行 。如果他们检查到正在被调试和破解,就会设置一个标签,让程序运行到无用的地方或者干脆退出重启 。也有办法通过使用变形的PE头让调试器无法加载 。
可惜还是没用 。例如,IsDebugPresent可以通过修改FS寄存器的标志位使其完全不点火 。同样的手段包括但不限于检查int 3软中断、Raw调用、查询PEB、检查调试权限和父进程等等 。有办法绕过它 。
暗桩,只要插上,总能一根一根拔出来 。
好吧,我们还能做什么?不,别担心 。一只脚比另一只高 。现在我们正处于最流行的3.0版VMP时代 。
首先澄清一下,这里的VMP不是VMP壳 。它被称为虚拟机保护 。简单来说,为什么我们对破解软件如此熟悉?不仅仅是因为我们太熟悉x86 x64 arm的汇编指令集 。如果我们自己发明一套指令集,然后用这套指令集编写程序 , 在自己的虚拟机上运行,那么,当破解者进来的时候 , 我们看到的就是一脸的傻样 。
遗憾的是,VM的运行机制决定了它可能会造成几十倍甚至上百倍的性能损失 。因此,必须使用VMP来保护不是性能瓶颈的关键代码,否则您的软件将像
那么 , VMP保护机制是否完善?当然不是 。说白了,VMP只能延长分析时间 。如果你让VMP变得足够复杂,足以让一个破解者喝醉,但如果这个时间足够长,你的软件足够有价值,足以让人们想要破解它,他们仍然可以充分分析你的VM的运行机制 。等你的VM运行机制搞清楚了 , 软件离倒下也就不远了 。
不过你放心,分析VM机的执行机制比自己写VM机麻烦多了 。毕竟一个是你需要通过代码去猜测别人的想法,一个是你自己的想法转化成代码 。因此,基于此,可以说:
破解软件比做软件简单 。很多时候是不存在的!
你可能会问为什么市面上那么多软件,那么多游戏,那么多听起来那么牛逼的防护软件,结果却被破解了 。它们在发出后仅仅一天就被破解了 。
其实大问题在于这种商业保护软件(比如保护壳),因为这些保护壳大部分都会卖给大量的软件开发者 。在叫树有一种说法,这就像流行的VMP保护机制 。之所以能受到保护,是因为它的运行机制不明确 。如果你自己用这个软件,而你的软件又不值钱,除非大boss 空寂寞冷 。不然谁有那个闲工夫分析你的虚拟机是怎么运行的,但是商业保护壳就不一样了 。不管它采用什么样的保护机制,只要分析清楚,使用这种保护机制的软件几乎都会倒下,而且在灰色行业 。这种破解甚至是相当赚钱的 , 只要这个保护机制不更新,一次投入,长期回报 。所以只能说,第一次分析要花很长时间,然后只会花很长时间 。
所以,其实买一个商业保护壳的保护效果并没有想象中的那么强,很可能在灰色行业是无效的 。就算是有防反基础的码农也可能自己写,效果更好 。当然,一个软件被破解的概率并不高,还是我之前说的那句话:反破解不是让软件无法破解,而是让破解软件的成本远大于购买软件的成本 。
毕竟你说你的软件开源了没人喜欢用,你还整天琢磨怎么防止被破解 。
然后你会开始问 , 有没有更强大的防破解技术?看来我们之前说的无非是拖延时间 。呃,我们必须正确对待这件事 。不管是加密还是解密 , 其实说白了,最终都是在拖延时间 。看看那些加密算法 。根据他们的数学理论,如果你要解密他们,他们的计算量就算把全世界所有的计算机加起来,也足够你计算三个末日了 。
- 红米hm1w怎么设置3g网络
- 海参怎么炒才不老不腥 海参怎么炒才不老不腥呢
- 艋舺怎么读音 艋舺词语的读音
- 路由器怎么限制别人蹭网
- 红米note4x耳机音效怎么调
- 路由器怎么限制手机WIFI速度
- 西蓝花怎么炒才入味 西兰花怎么炒才好吃
- 买领动车质量差后悔死了 现代领动怎么样口碑
- 路由器怎么修复
- 发财树叶尖干焦黄怎么办 发财树叶子变黄怎么办
