首页
社区
课程
招聘
crack新手进化篇(新手级附ppt教程)
发表于: 2005-1-4 10:55 10957

crack新手进化篇(新手级附ppt教程)

2005-1-4 10:55
10957

软件怎么判断我们是否注册了
不要忘了,软件最终是按照人的思维做的,我们回到自身来,“如果是你,你怎么判断别人是否注册了呢”,“我要别人输入用户名和注册码啊”,聪明的想法,很多软件也是这样做的,如豪杰超级解霸。(但是不是所以的软件,方法太多了,友情提示:这个世界没有完全通用的东西,除了你聪明的大脑)
具体一点呢??????????
我们把用户名按照某种方法运算得到一个真正的注册码和用户输入的进行比较不就知道了吗?Yeah,也就是
真正的注册码  =  f(用户名)
和Y  =  f(x) 是一样的
然后就是很经典的比较了,为什么说经典呢?
因为大概有60%的软件是这么做的,到底是什么比较呢,看看

请注意这里会有错误处理的噢,在这之前呢,就是经典比较啊,如果这里的错误处理提示我们诸如:注册错误之类的东西,我们就很容易定位到经典比较了。
那么上面的流程在汇编语言里面是怎么实现的呢?
        比较有2种方式,直接和间接,直接就是用:
                cmp x, y  
                je (jne) label
这里的x和y只是一个符号,实际上可能是寄存器和存储器
间接的呢?调用一个子程序比较,如下面的代码
if (strcmp(&x, & y))        //如果strcmp返回值是1
        printf(“right”);
else……………..//当然是错误拉
这里的strcmp也只是一个符号,现实可能有变化
用汇编语言描述呢?
        push &y;
        push &x;
        call strcmp;
        test ax,ax        ;判断返回值(也就是出口参数,也可以在子程序里判断)
        je……

2.为什么可以调试可执行程序呢
可能很多菜鸟有我这样的疑问,呵呵
调试可执行程序的理论基础:
我们都知道在汇编语言里面可以用debug来调试程序。但是为什么可以?
其实和简单,因为机器只识别的是0和1(准确的说你高电平和底电平,你可以简单的理解为灯泡亮和黑),我们称之为机器码,而我们的汇编语言与机器码是一一对应的,所以我们可以根据机器码得到对应的汇编代码,也可以反过来通过汇编代码得到对应的机器码,
如:在debug下我们可以看到
用debug测试一下:
-a
1370:0100 mov ax,bx
1370:0102
-u100               
1370:0100 89D8          MOV     AX,BX
这里的89D8就是MOV     AX,BX的机器码
3.破解教程都告诉我们,找到错误提示上面的第一个有条件跳转,改掉就可以爆破,为什么呢?因为程序是顺序执行的,只要我们找到提示出错的地方,那么在此之前必定已经比较完了,所以再往前面找找就看到了关键的比较,关键的地方就是上面的比较,如果我们改变的判断条件呢?如果改成不相等就注册成功,那么。。(嘿嘿,某同志传来不怀好意的笑声),那么不管我们输入什么都是“正版”的了,没有交钱的“正版”,这就是我们改变跳转的原因,也就是改变改变的判断条件

5.下面我们开始实战演习,虽然这只是一个简单的用S-Demo做的动画,但是看完了下面的文章你还是会收获很多,不相信,我晕,把简单的事情做到极限就成功了,呵呵
(1).爆破
这个很简单就不多讲了,运行程序,随便输入密码,确定,提示:“password wrong”,
用ollydbg载入这个动画,查找程序用到的字符串,找到password wrong,下个断点,还记得前面的理论吗?
再向前找找就可以找到比较的关键地方了(条件跳转),好的,找到的地址是:0040203F
0040202A  |. FFB6 A4000000  PUSH DWORD PTR DS:[ESI+A4]               ; /s2
下个断点,看看到底压入了堆栈什么
00402030  |. 8D45 CC        LEA EAX,DWORD PTR SS:[EBP-34]            ; |
00402033  |. 50             PUSH EAX                                 ; |s1
00402034  |. FF15 E0234100  CALL DWORD PTR DS:[<&MSVCRT._stricmp>]   ; \_stricmp                //这里看到了什么,stricmp,难道这就是传说中的关键比较吗?
但是比较之后没有跳转啊,是吗?仔细看看,比较之后的结果放在那里,eax !
下面不是有一个je吗?
0040203A  |. 83C4 20        ADD ESP,20        ;平衡堆栈
0040203D  |. 85C0           TEST EAX,EAX                ;测试返回值
0040203F  |. 74 15          JE SHORT test.00402056
修改为jne,保存,运行,ok,搞定,请你再次回顾前面的流程图
(2).寻寻觅觅找密码
还记得前面的流程图吗?如果我们在程序比较的时候中断程序会有什么发现呢?呵呵,这个时候会看到真正的密码,重新用ollydbg载入这个动画,下断点00402034
为什么要在这里下断点?好问题,因为这里看到了call DWORD PTR DS:[<&MSVCRT._stricmp>],看看流程图,明白了吗,呵呵
这里我们在堆栈区域可以看到我们输入试炼码和真正的密码,为什么在堆栈区域,因为在windows下通过堆栈传递参数。请看上面的简单分析.
(3).文件补丁的编写(c语言简单实现)
前面我们把je改成了jne,随便输入密码都可以了
实质是把机器码由74h改成75h,因为机器码和汇编指令是一一对应的,那么我们只要写个小东西,修改就可以了。我已经写好了,很短,很好懂。Crack.c,我们分析一下
#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,为什么呢?下面给出回答
                fseek(fp_out, 0x203f, SEEK_SET);
                fputc(0x75, fp_out);        //写入数据0x75,也就是把机器码74改为75,
//汇编则是 je 改为了jne
                fclose(fp_out);
                     
              return 0;
}

这里 0x203f = 0x0040203F ? 0x00400000
(4).让程序自动弹出正确的密码()
这个比较简单,如果你看懂了前面的东西,你也可以自己搞定,不要忘了和大家分享你的思想。如有问题请联系我,请提出你的具体问题,不要一来就问,自己动手试试才会进步。

考试完了,做了个演示ppt,希望对新手有帮助,另外我也是菜鸟,难的问题我也不懂,每个人都贡献自己的力量,相信大家进步很快的,呵呵

PS:一点个人建议:你总有一天会不再满足爆破,所以你不得不学习汇编语言来分析算法。这篇文章很简单,同时也送给大家一句简单的话:磨刀不误砍柴工,
学习asm和系统编程不会耽误你对crack的学习。我也是菜鸟,无论编程还是crack。所以我的话没有什么分量,还要靠你自己斟酌。人不能太盲目。有空的时候看看周围,看看想想自己的未来。 :)

[email]nguat@sohu.com[/email]附件:crack新手简单教程.rar


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (29)
雪    币: 16
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习一下,欢迎同学们踊跃提问!
2005-1-4 12:52
0
雪    币: 237
活跃值: (145)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
恩,写的不错,对我们新手来说很有用
2005-1-4 19:13
0
雪    币: 97697
活跃值: (200819)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持一下!!!
2005-1-4 19:22
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
5
期待下一篇diy
2005-1-4 19:50
0
雪    币: 159
活跃值: (89)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
很贴进我们菜鸟呀,哈哈
2005-1-4 22:01
0
雪    币: 181
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢很有启发
2005-1-5 10:33
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
支持一下!!!
2005-1-5 10:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
初次回帖,多多关照。
2005-1-5 10:50
0
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
好象在某个精华里面看到过也
2005-1-5 14:53
0
雪    币: 257
活跃值: (369)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
11
虽然简单,但写得很好!
2005-1-5 18:12
0
雪    币: 153
活跃值: (371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我也是菜鸟一个 看也看不懂 但不管怎么样 也要顶一下 没有你们我们是永远的走不远的 
2005-1-5 21:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
不错!但如果给“菜鸟”来看的话,还是有些难度的!
支持!
2005-1-6 09:57
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
收藏,认真学习
2005-1-6 11:22
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
将来我成为一名高手,我不会忘了这篇文章。谢谢!
2005-1-6 15:28
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
16
够直白的,呵呵,谢谢阿,收下了。。。
2005-1-6 15:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
我是新手,呵呵,打包回家学习!
2005-1-6 15:40
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
18
又仔细看了遍,感觉那个补丁程序不错。。。。呵呵。
又学到新东西了,谢谢阿。
2005-1-6 16:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
刚来,有点启蒙味道。多谢了。
2005-1-6 18:30
0
雪    币: 214
活跃值: (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好东西顶一下。
2005-1-7 01:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
谢谢,已经收藏,写的很好!第一次来,请多指教!
2005-1-7 06:37
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习了,顶上
2005-1-7 09:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
顶一下,值得学习.
2005-1-7 17:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
可惜,crack新手简单教程.rar找不到.
2005-6-25 06:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
下载不了:(
2005-6-25 09:42
0
游客
登录 | 注册 方可回帖
返回
//