c#发展

注册

 

发新话题 回复该主题

C语言破解源码分析为什么电脑软件那么容 [复制链接]

1#
理论上不存在无法破解的软件,但并不是说破解软件比开发容易一万倍,naive,防破解的目的不是要做一个无法破解的软件让破解软件的成本远大于购买软件的成本,知名软件大多都有实力让软件破解难度大大加大,但出于市场需求和争取用户的角度考虑,会放水!光说不练假把式,老司机来给各位简略表演几个有代表性的软件破解,当然,要看懂下面的内容,需要一点点C语言的编程基础。我们先来一个最最简单的软件破解,假设我们写了一个软件,它的注册手段代码如下:

#include"stdio.h"#include"string.h"intmain(){charKey[3];printf("请输入注册码:");gets(Key);if(strcmp(Key,"abc")==0)printf("注册成功");elseprintf("注册失败");}

把他编译成exe,运行一下。要破解怎么办呢?超简单的,你把这个程序后缀改成txt然后打开,搜索注册码,然后翻一翻key就找到了。别笑,就算是今天,仍然有一大堆软件采用这种软件保护机制,不过这类软件要不大多不怎么值钱比如xx管理系统,计算器之类的,要不就是软件作者别有用心防君子不防小人。你可能会问了,问题出在那了呢?这类保护机制的问题是,目前大部分的编译器都会将字符串常量直接存储在可执行文件结构中,所以你要是硬编码key,那么上面这种破解方法几乎是屡试不爽甚至不需要什么逆向破解知识就能搞定。那么,让我们进入防破解V.0时代,为了与时俱进,我们稍微把上面的代码改一下:

#include"stdio.h"#include"string.h"#include"windows.h"#include"math.h"intmain(){chariKey[3];charKey[3];charID[3];intiID=0xabc1d3f;sprintf(Key,"%x",iID*8+);printf("你的机器码是%x\n",iID);printf("请输入注册码:");gets(iKey);if(strcmp(Key,iKey)==0)MessageBoxA(0,"注册成功","",MB_OK);elseMessageBoxA(0,"注册失败","",MB_OK);}现在"TXT"破解法已经不顶用了,你看,key找不到了。怎么样,这种保护手段是不是熟悉的味道熟悉的配方,这个机器码可以从网卡MAC,CPU型号,内存大小等等等等去生成。当然,key的算法也可以拉上MD5,SHA等等等等手段来弄,而不是简简单单的乘一个8再加上,总之从机器码到注册码的算法你能玩出花。但这又有什么卵用呢?打开ollydbg,对MessageBoxA下断点(也就是弹窗的函数)。然后输入一个错误的注册码,命中断点,很快,我们来到了判断注册码是否正确的逻辑处理代码。你猜猜,要是我们把这个判断注册码是否正确的代码给它删了)(nop指令填充)会怎么样?你会发现,握草,不管我输入什么,都是注册成功!那么问题出在哪了呢?你发现,万恶之源都始于那个MessageBox函数,正是这个函数,让我们顺藤摸瓜找到了注册码判断代码。

分享 转发
TOP
发新话题 回复该主题