软件破解的思路

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include <stdio.h> #include <string.h>
Байду номын сангаас
int main(void) { FILE *fp_out; //要写入的文件
printf("\n\t\t\t\t Copy Right by ngaut\n"); printf("Cracking......\n");
//打开文件test.exe if ((fp_out = fopen("test.exe", "r+"))==NULL) { printf("error!!! Can not open test.exe!!!\n\n"); printf("Press any key to continue\n"); getchar(); exit(0); } //定位到要修改的地方,这里是 0x203f,为什么 呢?
哇,果然是密码啊,不错,不错。 那么我们是否应该满足了呢?还没有! 如果我要帮助朋友?而别人又没有我们的破 解工具,也不会修改呢? 当然我们可以跟踪出密码,然后给别人就ok 了,可是。。。。。 如果有几个动画呢?你每一个都要跟踪吗? 那太麻烦了?
怎么办,我们要想出一种通用的办法?让 怎么办,我们要想出一种通用的办法? 计算机自动去完成呢?再次灵光一现, 计算机自动去完成呢?再次灵光一现,脑 海里闪过一个词: 海里闪过一个词:
关键的地方就是上面的比较,如 果我们改变的判断条件呢?如果 改成不相等就注册成功,那么。。 (嘿嘿,某同志传来不怀好意的 笑声),那么不管我们输入什么 都是“正版”的了,没有交钱的 正版
关键找到了,但是, 某听众问道 某听众问道: 关键找到了,但是,(某听众问道:“我 们知道程序在那里比较呢? , 们知道程序在那里比较呢?”),非常聪 明的想法, 明的想法,我们再看看比较的地方
编程去完成
下面进入高级专题,破解补丁的编写 下面进入高级专题,破解补丁的编写 高级专题
大家基本都学过c语言,可能学完了觉得没有什 么用,我们今天就来用一用,我们不能白学啊
前面我们把je改成了jne,随便输入密码都可以了 实质是把机器码由74h改成75h,因为机器码和汇 编指令是一一对应的,那么我们只要写个小东 西,修改就可以了。我已经写好了,很短,很 好懂。Crack.c,我们分析一下
神秘的解密
BY 三人行
很多人可能觉得解密很神秘,那么 解密神秘吗? 1.我们来看看大家最关心的解密。 到底什么是解密呢?简单点且不太 准确的说,就是解开密码(等会我 将为大家实例演示一个破解密码的 例子,兴奋………)有时我们也称 为破解(crack),做破解的人我们 称为cracker
Q:学破解对我来说有什么好处?(这个年代, 没有好处的事情,你恐怕不会做吧,呵呵) A:这个问题应该你自己来回答,呵呵,你为 什么要学?“我想免费使用软件”倒...那多 少也算是个目的,但我希望你不要只抱这种 目的(目前国内共享软件业还有待发展)。 1.德; 要有社会道德意识,必须遵守一些规 范! 友情提示:不懂汇编的人永远只能是 菜鸟!
下一张幻灯片
决定何去何 从比较
真正的注册码=用户输入的注册码吗?
N
Y
去掉所有限制,正版了
提示注册错误 Say 88
这里会有错误提示的噢,在这之前呢,就是比较啊
有了前面的基础,我们就可以仔细分析了,分析 的方法有2中:
1.静态分析(就象我们用debug的u命令,然后静静 的看反汇编的代码),或者打印出来慢慢看
开始:获取偏移地址演示 开始实际操作
//找到那条je指令,既0040203F这个地址 //在底部可以看到offset是 0x203f fseek(fp_out, 0x203f, SEEK_SET); fputc(0x75, fp_out); //写入数据0x75,也 就是把机器码74改为75, //汇编则是 je 改为了jne fclose(fp_out);
再次回顾补丁程序: 1.打开要修补的程序 2.定位到关键地方 3.写入数据
特别提示:实际操作的过程 不是通用的,通用的是你聪 明的大脑!!!!
一个真正的Cracker必须熟练掌握以下几点: 1.德; 要有社会道德意识,必须遵守一些规范! 2.数学; 要尽可能的多学一些数学知识,必须具备扎 实的数学基础! 3.外语; 最起码要有一定的英语阅读能力,当然掌握 得越多越好! 4.计算机知识; 必须熟练掌握8088系列x86汇编语言 和一门高级程序语言! 5.悟性; 必须具有一些触类旁通的本领,死记死背定 律以及公式是不行的! 此仅为兄弟个人观点! 此只是算是Cracker,要想登堂入室,同志尚需努 力! Ivanov 我缺乏的东西:2,3,4,5,所以我是普通菜鸟
•JOJO老大总结了一下Crack技术的几个阶段,再 次转贴一下,并分析个组织需要的成员阶段。以 飨初学者。 ________________________________________ ______ 第一个阶段应该算是爆破的阶段(暂不考虑加壳 的因素),绝大多数软件都可以通过修改来得到 破解,它需要我们大致了解程序加密的过程并准 确的找到其判断点,由于一些现成的工具和经验 使我们找这些近乎成为机械的运动(尤其是在 WINDOWS下的软件)所以爆破一个软件变的相对 容易,但不是说一定是容易的。
2.动态分析,就是边分析边调试,查看一些寄存器 的值 标志位,等等(所以debug是动静结合啊)
为什么可以调试可执行程序呢
调试可执行程序的理论基础: 我们都知道在汇编语言里面可以用debug 来调试程序。但是为什么可以? 其实和简单,因为机器只识别的是0和1,我 们称之为机器码,而我们的汇编语言与机器 码是一一对应的,所以我们可以根据机器码 得到对应的汇编代码 如:在debug下我们可以看到
•中国最成功的破解组织 中国最成功的破解组织
在1999年的11月,两个Crack技术的高手 -Sun Bird和JOJO,有感于当时中国虽然拥有着世 界上最顶尖的Cracker技术和人才,却没有自己的 Group,所以很多国内顶尖的 Cracker 加入了国外 的 Group(想想看国际上著名的 Group 中拥有多 少中国的Cracker?)。所以他们携手创建了中国 目前为止最成功,代表国内最高破解技术的Crack 组织--CCG(CHiNA CrACKiNG GrOUp)即 •中国破解联盟
我们知道一个软件要我们交钱注册通常都会 给我们一点限制,如:只能使用30次,15天, 功能限制。。。 大家的windows xp不激活只能用30天吧
那么软件怎么判断我们是否注册了呢? 不要忘了,软件最终是按照人的思维做 的,我们回到自身来,“如果是你,你 怎么判断别人是否注册了呢”,“我要 别人输入用户名和注册码啊”,聪明的 想法,很多软件也是这样做的,如豪杰 超级解霸。
下一张幻灯片
决定何去何 从比较
真正的注册码=用户输入的注册码吗?
N
Y
去掉所有限制,正版了
提示注册错误 Say 88
这里会有错误提示的噢,在这之前呢,就是比较啊
下面开始实战演习,我们以一个简单 的破解密码为例子,准备好了吗? 下面我们边操作边解释一些名词
首先,拿起我们手中的武器,这里我选择 ollydbg,这是一款德国人开发的动态调试工具, 什么是动态调试工具呢?就象我们调试汇编程 序用的debug,也是动态调试工具,相对的肯定 还有静态的拉,当然,经典的有ida和w32dasm, 其实这里的ollydbg同时具有动态和静态特性, 我们很快就会体验它的强大功能.开始精彩的演 示,突破密码限制:
你见过破解的东西吗? 当然,你用的Office Professional Edition 2003是 花多少钱买的? 4块,10块,哇,好贵啊,可是你知道正版 的多少钱吗? 这里是微软提供的价格 直接从Microsoft订购 Office Professional Edition 2003,新用户价格 Office Professional Edition 2003 RMB 3,822
真正的注册码=用户输入的注册码吗?
N
Y
去掉所有限制,正版了
提示注册错误 Say 88
聪明的你是否想到了什么?关键就是这里的比较
那么上面的流程在汇编语言里面是 怎么实现的呢? 比较有2种方式,直接和间接,直接 就是用: cmp x, y (比较值或者短字 符串) je (jne) label
间接的呢?调用一个子程序比较,如下面的代码 if (strcmp(&x, & y)) printf(“right”); else……………..//当然是错误拉 用汇编语言描述呢? push &x; push &y; call strcmp; test ax,ax ;判断返回值(也就是出口参数) je…… //如果strcmp返回值是1
我没有装这么贵的东西,呵呵,那好,你 用过qq吧(中国人都知道)那个能显示别人ip 地址的qq就是经过破解的。 你看电影用的豪杰超级解霸交钱注册了吗? 我们看电影享受了,可是。。。 豪杰公司 的员工呢? 所以如果大家学会了破解,也请大家不要 传播破解软件。保护中国的软件产业
我想很多人已经迫切的想看看到底是怎么操 作的,不急,很快就开始了,我们先来预热 一下,看一点准备知识
分析截取的部分关键代码
下面我们看看,程序的比较流程:
Call stricmp
Eax = = 0 N Y
去掉密码限制 提示密码错误
我们继续分析代码(真正的宝藏还没有挖出来呢) 0040202A PUSH DWORD PTR DS:[ESI+A4] 00402030 LEA EAX,DWORD PTR SS:[EBP-34] 00402033 PUSH EAX 00402034 CALL DWORD PTR DS:[<&MSVCRT._stricmp>] ; Call之前有2个push操作,呵呵,压入的是什么呢? 不是密码吧,我们在00402034 下一个断点,运行看 看, 看看eax是什么内容呢?“windows“,这个是什么呢? 输入看看 ; |s1 ; /s2 ;|
printf("thanks for using, already cracked\n"); printf("\n\t\t\t\tngaut All rights reserved.\n\n"); printf("Press any key to continue\n"); getchar();
return 0; }
用debug测试一下: -a 1370:0100 mov ax,bx 1370:0102 -u100 1370:0100 89D8 这里的89D8就是MOV MOV AX,BX
AX,BX的机器码
这么看来,只要机器可以执行我们都可以 看到对应的汇编代码
我们知道程序是顺序执行的,只 要我们找到提示出错的地方,然 后再往前面找找不就看到了比较 的关键地方了吗!再次欣赏经典 比较
具体一点呢??????????
我们把用户名按照某种方法运算得到 一个真正的注册码和用户输入的进行 比较不就知道了吗?Yeah,也就是 真正的注册码 = f(用户名) Y = f(x) 然后就是很经典的比较了,为什么说经 典呢? 因为有60%的软件是这么做的,到底是 什么比较呢,看看
决定何去何 从比较
开始操作
回顾刚才的操作: 看到了什么,提示我们:“password wrong”, 用ollydbg载入这个动画,查找程序用到 的字符串,找到password wrong,下个断 点,还记得前面的理论吗? 再向前找找就可以找到比较的关键地方 了,好的,找到的地址是:0040203F
我们看看前面的几条指令: 我们把这里的代码放到word下面分析
•发展最快的破解组织 发展最快的破解组织
2001年3月,中国破解组织BCG (BeNGiNNEr‘s CrACKiNG GrOUp)成立,短短的 半年时间,BCG的成员已经发展到了47名,(现 在远超过这个数,具体数目不详)由于BCG的初 衷就正如它的名字一样“初学者破解组织”,所 以有很多初学者由于无法搞定CCG的官方正式 CrackMe都纷纷加入了BCG,当然BCG中也有非常 多的高手,但是整体水平是无法和CCG相媲美的, 而且BCG中的大多高手都是CCG组织的成员,但是 由于其面向初学者,所以组织发展速度之快超乎 人们的想象!
相关文档
最新文档