首先我们要明确一点:
理论上不存在无法破解的软件,但也并不是说破解软件比开发容易一万倍,
防破解的目的不是要做一个无法破解的软件,而是让破解软件的成本远大于购买软件的成本
现在笔者简略表演几个有代表性的软件破解,当然,要看懂下面的内容,需要一点点C语言的编程基础.
我们先来一个最最简单的软件破解,假设我们写了一个软件,它的注册手段代码如下
#include "stdio.h"
#include "string.h"
int main()
{
char Key[32];
printf("请输入注册码:");
gets(Key);
if (strcmp(Key,"abc123456")==0)
printf("注册成功");
else
printf("注册失败");
}
把他编译成exe,运行一下
要破解怎么办呢?超简单的,你把这个程序后缀改成txt然后打开,搜索注册码.然后翻一翻key就找到了
别笑,就算是今天,仍然有一大堆软件采用这种软件保护机制,不过这类软件要不大多不怎么值钱比如xx管理系统,计算器之类的,要不就是软件作者别有用心防君子不防小人.你可能会问了,问题出在那了呢,这类保护机制的问题是,目前大部分的编译器都会将字符串常量直接存储在可执行文件结构中,所以你要是硬编码key,那么上面这种破解方法几乎是屡试不爽甚至不需要什么逆向破解知识就能搞定.
那么,让我们进入防破解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);
}
现在"TXT"破解法已经不顶用了,你看,key找不到了
怎么样,这种保护手段是不是熟悉的味道熟悉的配方,这个机器码可以从网卡MAC,CPU型号,内存大小等等等等去生成,当然,key的算法也可以拉上MD5,SHA等等等等手段来弄而不是简简单单的乘一个8再加上123456,总之从机器码到注册码的算法你能玩出花.
但,这又有什么卵用呢,打开ollydbg,对MessageBoxA下断点(也就是弹窗的函数)
然后输入一个错误的注册码,命中断点,很快,我们来到了判断注册码是否正确的逻辑处理代码
你猜猜,要是我们把这个判断注册码是否正确的代码给它删了)(nop指令填充)会怎么样
你会发现,握草,不管我输入什么,都是注册成功
那么问题出在哪了呢,你发现,万恶之源都始于那个MessageBox函数,正是这个函数,让我们顺藤摸瓜找到了注册码判断代码,时至今日,仍然有非常非常大的一部分软件使用着这个二三十年前就在用的保护手段,每年死于MessageBox被破解的软件,围起来可以绕地球三圈.也就是这个保护机制,成就了所谓软件发布后十分钟就被破解的悲惨结局.