首页
社区
课程
招聘
[推荐]向大家请教和学习
发表于: 2006-11-18 06:03 7216

[推荐]向大家请教和学习

2006-11-18 06:03
7216
大家好!初次和大家见面。
看雪其实本人以前也来过几次,不过注册却只是近几天的事了。

今天,是我在这里第一次发帖,不写教程,也不贴心得,主要是向各位同好请教和学习。我准备了三个问题,从易到难:

1.相信这里的很多朋友都是用过Ollydbg这款调试软件。我使用过好几个版本,现在使用的是“聆风听雨汉化第二版”ODbyDYK v1.10 [2005.05.09]。不知道大家有没有注意过这款软件附加的那个Test文件夹。我在这里找到了一个Crackme,文件名是 CRACKME+asp.EXE 是Cruehead/MiB写的。本来想传给大家,不过本人现在还没有上传权限。如果大家实在找不到,以后我会补上。我要说的就是这个Crackme+asp的破解。注意:这个东西是加壳的,建议不论是新手还是老手都可以体会一下这个壳,不要直接找脱壳软件脱。我这里就不多说了...

2.不知这里有没有朋友玩过"秋之回忆"这类游戏,也叫Memories.Off。这是Kid出的一个系列AVG游戏。现在已经出了好几代了, 每一代都挺不错的。我的问题就是“秋之回忆2”(Memories.Off 2)的免CD。因为这个游戏必须插入光盘才能够玩,否则就会弹出错误消息框“No disc inserted"。有这个游戏的朋友跟跟看,能不能作出它的免CD来。提醒大家好好体会一下跟踪的过程。

3.最后一个问题是软件注册码的破解。不知道这里有多少人知道“法语助手”这款法语词典软件,本人觉得这款软件编的很不错,而且加密技术做得很好。本人能力有限,从来没有成功的找到它的注册码算法的。所以推荐给大家,留给各位高人们练手。软件下载官方地址http://www.francochinois.com/index.htm。最新版本《法语助手》2006。我们都是为了研究技术,希望这个软件的作者知道了不要来砍我~~XD...

前两个问题已经上传了,大家可以下载了。(第三个问题去官方网站下载,地址:http://www.francochinois.com/download/fhsetup.zip)


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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 235
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
晕,醉翁之意不在酒啊!
2006-11-18 17:12
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
我晕了
没看懂是什么意思
2006-11-18 18:15
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
这3个例子都是本人近年来做汉化、破解和程序设计的时候遇到的几个比较精彩的例子中的。虽然我标出了难易程度,但是可以告诉大家,都不是很好入手的目标。所以推荐给大家做练手之用,而且后两个例子绝对适合高手们。

推荐这三个例子的另一个原因是,这几个例子的技术侧重点也各有不同:

第一个例子是脱壳和破解注册码的。
第二个例子是破解制作免CD的。(文件没有壳的)
第三个例子要涉及到模块的跟踪和破解。具体哪些模块是关键,就要好好跟踪分析一下了。呵呵!(注:主程序没壳,不过一些关键的模块有壳)

最后一个例子破解出来的大大一定要发帖谈谈方法和心得,我这里先行谢过了

另附:第一个例子我已经上传,大家可以下载http://rapidshare.com/files/3877393/CRACKME_asp.rar
2006-11-19 01:36
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
不知道有人尝试过了吗?进度如何啊?
破解出来的朋友就来谈谈吧!没破出来也可以交流一下。
我的感觉是:
第一个crackme难的不是找注册码,而是脱壳。
他里面有两层壳。脱了外面的那层后,你再运行一下软件会发现整个都变了~~

第二个关键是在GetDriveTypeA上下断。但是,即使如此,你想断下来也不是一件易事,这个程序里面作了一些手脚...

第三个,我似乎找到了关键模块,但是还是不得要领。这个软件似乎用了多种编程语言,有VC 7.0也有.Net的。总之,还是需要大家的群策群力,共同研究了。
2006-11-20 20:13
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
和楼主一样,也是新手,以后向大家多多学习
2006-11-20 20:46
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
看了iamcrackin写的“HappyTown的0018个CRACKME”,觉得算法总结的还不是很清楚,所以我也来写一篇吧!

因为,今天无法发新帖子了,所以只能发在自己的帖子里面。关键的算法就在这里,看下文的注释:

0040117E   |.  68 C9000000        push 0C9                                         ; /Count = C9 (201.)
00401183   |.  50                 push eax                                         ; |Buffer
00401184   |.  68 E8030000        push 3E8                                         ; |ControlID = 3E8 (1000.)
00401189   |.  57                 push edi                                         ; |hWnd
0040118A   |.  FFD5               call ebp                                         ; \GetDlgItemTextA
0040118C   |.  8BF0               mov esi,eax
0040118E   |.  83FE 04            cmp esi,4                                        ;  用户名长度>=4
00401191   |.  0F8C CA000000      jl CrackMe_.00401261
00401197   |.  8BCE               mov ecx,esi
00401199   |.  81E1 01000080      and ecx,80000001
0040119F   |.  79 05              jns short CrackMe_.004011A6
004011A1   |.  49                 dec ecx
004011A2   |.  83C9 FE            or ecx,FFFFFFFE
004011A5   |.  41                 inc ecx
004011A6   |>  0F85 B5000000      jnz CrackMe_.00401261                            ;  用户名长度必须为偶数,否则就跳了
004011AC   |.  8D9424 D8000000    lea edx,dword ptr ss:[esp+D8]
004011B3   |.  56                 push esi
004011B4   |.  52                 push edx
004011B5   |.  E8 B6000000        call CrackMe_.00401270                           ;  小写转大写
004011BA   |.  83C4 08            add esp,8
004011BD   |.  85C0               test eax,eax
004011BF   |.  0F84 9C000000      je CrackMe_.00401261
004011C5   |.  8D4424 10          lea eax,dword ptr ss:[esp+10]
004011C9   |.  68 C9000000        push 0C9
004011CE   |.  50                 push eax
004011CF   |.  68 E9030000        push 3E9
004011D4   |.  57                 push edi
004011D5   |.  FFD5               call ebp
004011D7   |.  3BC6               cmp eax,esi
004011D9   |.  0F85 82000000      jnz CrackMe_.00401261
004011DF   |.  8D4C24 10          lea ecx,dword ptr ss:[esp+10]
004011E3   |.  50                 push eax
004011E4   |.  51                 push ecx
004011E5   |.  E8 86000000        call CrackMe_.00401270
004011EA   |.  83C4 08            add esp,8
004011ED   |.  85C0               test eax,eax
004011EF   |.  74 70              je short CrackMe_.00401261
004011F1   |.  8BC6               mov eax,esi
004011F3   |.  33FF               xor edi,edi
004011F5   |.  99                 cdq
004011F6   |.  2BC2               sub eax,edx
004011F8   |.  8BE8               mov ebp,eax
004011FA   |.  D1FD               sar ebp,1
004011FC   |.  3BEB               cmp ebp,ebx
004011FE   |.  7E 51              jle short CrackMe_.00401251
00401200   |>  8A4C7C 11          /mov cl,byte ptr ss:[esp+edi*2+11]               ;  取密码第二位
00401204   |.  8A447C 10          |mov al,byte ptr ss:[esp+edi*2+10]               ;  取密码第一位
00401208   |.  80E9 41            |sub cl,41                                       ;  cl= 第二位-41
0040120B   |.  2C 41              |sub al,41                                       ;  al= 第一位-41
0040120D   |.  0FBEF1             |movsx esi,cl                                    ;  esi=cl
00401210   |.  0FBEC8             |movsx ecx,al                                    ;  ecx=al
00401213   |.  BB 1A000000        |mov ebx,1A                                      ;  ebx=1A
00401218   |.  8D14C9             |lea edx,dword ptr ds:[ecx+ecx*8]                ;  edx=ecx*9=(密码第一位-41)*9
0040121B   |.  8D0472             |lea eax,dword ptr ds:[edx+esi*2]                ;  eax=(密码第一位-41)*9 + (密码第二位-41)*2
0040121E   |.  99                 |cdq                                             ;  求余数
0040121F   |.  F7FB               |idiv ebx                                        ;  eax=eax/ebx=eax/1A 且余数给edx
00401221   |.  0FBE847C D8000000  |movsx eax,byte ptr ss:[esp+edi*2+D8]            ;  eax=用户名第一位
00401229   |.  83E8 41            |sub eax,41                                      ;  eax=eax-41
0040122C   |.  3BD0               |cmp edx,eax                                     ;  比较eax和余数edx
0040122E       75 31              jnz short CrackMe_.00401261
00401230   |.  8D0476             |lea eax,dword ptr ds:[esi+esi*2]                ;  eax=esi*3=cl*3=(密码第二位-41)*3
00401233   |.  8D0C81             |lea ecx,dword ptr ds:[ecx+eax*4]                ;  ecx = ecx+eax*4 = al+eax*4 = (密码第一位-41)+(密码第二位-41)*0C
00401236   |.  03C1               |add eax,ecx                                     ;  eax=eax+ecx= (密码第一位-41)+(密码第二位-41)*0F
00401238   |.  8BCB               |mov ecx,ebx                                     ;  ecx=ebx=1A
0040123A   |.  99                 |cdq
0040123B   |.  F7F9               |idiv ecx                                        ;  eax=eax/1A 余数edx
0040123D   |.  0FBE847C D9000000  |movsx eax,byte ptr ss:[esp+edi*2+D9]            ;  eax=取用户名第二位
00401245   |.  83E8 41            |sub eax,41                                      ;  eax=用户名第二位-41
00401248   |.  3BD0               |cmp edx,eax                                     ;  比较eax和余数edx
0040124A   |.  75 15              |jnz short CrackMe_.00401261
0040124C   |.  47                 |inc edi                                         ;  edi++
0040124D   |.  3BFD               |cmp edi,ebp                                     ;  一组一组的来,每组两个字符,所以共(用户名长度/2)组
0040124F   |.^ 7C AF              \jl short CrackMe_.00401200
00401251   |>  5F                 pop edi
00401252   |.  5E                 pop esi
00401253   |.  5D                 pop ebp
00401254   |.  B8 01000000        mov eax,1
00401259   |.  5B                 pop ebx
0040125A   |.  81C4 90010000      add esp,190
00401260   |.  C3                 retn
00401261   |>  5F                 pop edi
00401262   |.  5E                 pop esi
00401263   |.  5D                 pop ebp
00401264   |.  33C0               xor eax,eax
00401266   |.  5B                 pop ebx
00401267   |.  81C4 90010000      add esp,190
0040126D   \.  C3                 retn

总结一下算法:

1。用户名和密码都必须是大小写字母(大写还是小写无关紧要)

2。用户名和密码的位数必须相同且为偶数,位数不能小于4。

算法关键是:

用户名的第一位-41H = [(密码第一位-41H)*9H + (密码第二位-41H)*2H] % 1AH

用户名的第二位-41H = [(密码第一位-41H)+(密码第二位-41H)*0FH] % 1AH

解上面这个方程组就行。(% 就是C里面的取余数运算)
后面的用户名和密码的3、4位;5、6位等等,都可以同样的方法算出。

我们可以看到,如果知道密码的两位来确定用户名比较好计算。因为,连续两位密码可以分别唯一的计算出两位用户名来。

一个简单的解:
由密码中的两位AB分别确定用户名的两位CP
用户名: CPCP
密码: ABAB

算法明白了,注册机很简单,就不写了。
creckme下载地址见iamcrackin的帖子。
这是我在这里写的第一篇半教程,半补充性质的文字。希望我在关键处的解释足够清楚,也希望大家能够喜欢。
2006-11-20 23:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你提供的地址下不了啊,你检查一下
2006-11-21 11:34
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
最初由 琰馥 发布
你提供的地址下不了啊,你检查一下


检查过了,可以下载。这是看雪推荐给还没有上传权限的用户的临时上传空间。
下载方法是:从地址进如一个网页--选择网页下方表格里面的free按钮--弹出的网页中添入彩色的认证码,按后面的download按钮就OK了。
2006-11-21 20:40
0
雪    币: 191
活跃值: (205)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
10
最初由 kaien 发布
看了iamcrackin写的“HappyTown的0018个CRACKME”,觉得算法总结的还不是很清楚,所以我也来写一篇吧!

因为,今天无法发新帖子了,所以只能发在自己的帖子里面。关键的算法就在这里,看下文的注释:

0040117E |. 68 C9000000 push 0C9 ; /Count = C9 (201.)
........


不错,学习了
2006-11-22 21:24
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
11
最初由 kaien 发布
...算法明白了,注册机很简单,就不写了
........

其实这个程序的算法的确很简单,但注册机却一点也不简单。不妨写个试试看?
2006-12-1 15:34
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
12
最初由 happytown 发布
其实这个程序的算法的确很简单,但注册机却一点也不简单。不妨写个试试看?


最近几天比较忙,很少上来了。看到你的要求,就临时赶写了一个简单的注册机发到论坛上来了。

话说回来,我发的那三个问题有人得出结果了吗?
2006-12-5 22:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 kaien 发布
看了iamcrackin写的“HappyTown的0018个CRACKME”,觉得算法总结的还不是很清楚,所以我也来写一篇吧!

因为,今天无法发新帖子了,所以只能发在自己的帖子里面。关键的算法就在这里,看下文的注释:

0040117E |. 68 C9000000 push 0C9 ; /Count = C9 (201.)
........


学习中
2006-12-8 03:10
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
14
主题已经修改,补上了下载地址,大家可以下载研究了。
祝大家好运!Bon chance!
2006-12-12 02:19
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
这么久了还没人做出来吗?顶一下...
2006-12-16 23:55
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
zcg
16
楼主推荐的没有一样偶入的了手!郁闷。。。
2006-12-18 17:55
0
雪    币: 234
活跃值: (25)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
17
就是因为不太好入手,所以才贴出来大家研究呀!

说个笑话,关于第二个题目,就是那个“秋之回忆2”的免CD。
几年前,当我刚刚开始接触制作免CD方面的问题的时候,在这方面绝对是小菜鸟一个。这时有朋友传我这个游戏,求我研究一下做个免CD。那时我是一点把握都没有,但好朋友开口了,也只好免为其难,只当学习,试试看了。根据个人编程方面的经验,我决定对GetDriveType这个函数下手。那时候OD还没有流行,我换了XP后运行冰河或TRW2000都不怎么灵光,于是就用w32dasm静态分析。费了九牛二虎之力后,结果,本来这游戏是插入正确光盘就会进入游戏配置对话窗口,没插入光盘就会显示消息框“no disk insert”,插入不正确的光盘会说“wrong disk insert”,经过乱改一通的结果是,不论是否插入光盘,程序一律显示“wrong disk insert”~~XDD
但是这个程序已经被我修改了n处,到后来,到底改了什么地方都不记了,只好放弃...
2006-12-21 05:23
0
游客
登录 | 注册 方可回帖
返回
//