首页
社区
课程
招聘
[原创]简单变形算法分析及注册机`
发表于: 2007-1-1 15:15 9723

[原创]简单变形算法分析及注册机`

2007-1-1 15:15
9723

【破文作者】 大菜一号>.<
【  crack 】  
【破解难度】 简单,献给像我等这样的菜鸟学习
【作者邮箱】 kkxlnbukn@126.com
【使用工具】 ollydbg
【破解平台】 WinXP
偶学了汇编和C之后`破解就非常容易上手了!一上午狂分析十几个crack。。虽然没有每个都写出注册机`但每个都解决了!(头昏脑胀!倒床不起~)
挑了个有注册机,的简单变形算法写了篇破文``

这个crack有大虾破过了~~偶可没看答案!(跪下。。)相信偶呀5555555555哇55。。`。`。

上次版主说不够详细,,所以偶这次打字打得手麻(感谢笨笨雄版主恩典。)`````。。
特意把新手们很不理解的地方都说出来(只要偶这个新手知道。。:))

根据查找字符串``我们将断点设在这里:
004014CE  |.  894D E0       mov dword ptr ss:[ebp-20],ecx
(为啥要断在这里??)
查找到错误信息后,向上找跳转,在OD里面向上找第一个如这样:

0040151C  |.  E9 A2000000   jmp crackme3.004015C3
00401521  | (>)<=这个``就会知道是从哪里跳到这里的了,点下后顺红线向上找。找到后那就是关键跳转,就断在其前面(不是前一个代码),靠自己判断,断一次不对再重新来,(没人追杀你``可以慢慢来)    8B45 E0       mov eax,dword ptr ss:[ebp-20]
00401524  |.  05 E0000000   add eax,0E0
00401529  |.  50            push eax

断下后往下看``可以很容易看到很经典的变形``下面分析:

先看这里`
004014CE  |.  894D E0       mov dword ptr ss:[ebp-20],ecx
004014D1  |.  8D4D E4       lea ecx,dword ptr ss:[ebp-1C]
004014D4  |.  E8 83030000   call <jmp.&MFC42.#540><======================取name;(别问怎么知道`自己跟下啦`别比我还懒)
004014D9  |.  C745 FC 00000>mov dword ptr ss:[ebp-4],0
004014E0  |.  8D4D F0       lea ecx,dword ptr ss:[ebp-10]
004014E3  |.  E8 74030000   call <jmp.&MFC42.#540>
004014E8  |.  C645 FC 01    mov byte ptr ss:[ebp-4],1
004014EC  |.  8B4D E0       mov ecx,dword ptr ss:[ebp-20]
004014EF  |.  81C1 A0000000 add ecx,0A0
004014F5  |.  E8 AA030000   call <jmp.&MFC42.#3876><=====================取name长度(同上)汗..
004014FA  |.  8945 EC       mov dword ptr ss:[ebp-14],eax
004014FD  |.  837D EC 05    cmp dword ptr ss:[ebp-14],5<=================name长度与5比较
00401501  |.  7F 05         jg short crackme3.00401508<==================大于5就跳``不跳就玩完!!
00401503  |.  E9 BB000000   jmp crackme3.004015C3
00401508  |>  8B4D E0       mov ecx,dword ptr ss:[ebp-20]
0040150B  |.  83C1 60       add ecx,60
0040150E  |.  E8 91030000   call <jmp.&MFC42.#3876><=====================取假码长度
00401513  |.  8945 E8       mov dword ptr ss:[ebp-18],eax
00401516  |.  837D E8 05    cmp dword ptr ss:[ebp-18],5<=================假码长度与5比较
0040151A  |.  7F 05         jg short crackme3.00401521<==================大于5就跳``不跳geme over!
0040151C  |.  E9 A2000000   jmp crackme3.004015C3
00401521  |>  8B45 E0       mov eax,dword ptr ss:[ebp-20]
00401524  |.  05 E0000000   add eax,0E0
00401529  |.  50            push eax
0040152A  |.  8B4D E0       mov ecx,dword ptr ss:[ebp-20]
0040152D  |.  81C1 A0000000 add ecx,0A0
00401533  |.  E8 66030000   call <jmp.&MFC42.#3874>
00401538  |.  8B4D E0       mov ecx,dword ptr ss:[ebp-20]
0040153B  |.  81C1 E4000000 add ecx,0E4
00401541  |.  51            push ecx
00401542  |.  8B4D E0       mov ecx,dword ptr ss:[ebp-20]
00401545  |.  83C1 60       add ecx,60
00401548  |.  E8 51030000   call <jmp.&MFC42.#3874>
0040154D  |.  8B55 E0       mov edx,dword ptr ss:[ebp-20]
00401550  |.  81C2 E0000000 add edx,0E0
00401556  |.  52            push edx
00401557  |.  8D4D E4       lea ecx,dword ptr ss:[ebp-1C]
0040155A  |.  E8 39030000   call <jmp.&MFC42.#858>
0040155F  |.  8B45 E0       mov eax,dword ptr ss:[ebp-20]
00401562  |.  05 E4000000   add eax,0E4
00401567  |.  50            push eax
00401568  |.  8D4D F0       lea ecx,dword ptr ss:[ebp-10]
0040156B  |.  E8 28030000   call <jmp.&MFC42.#858>
00401570  |.  33C0          xor eax,eax-------------------------------------------
00401572  |.  33DB          xor ebx,ebx                                |
00401574  |.  33C9          xor ecx,ecx                              全清零,,准备变形
00401576  |.  B9 01000000   mov ecx,1                                  |                <=================================
0040157B  |.  33D2          xor edx,edx-------------------------------------------                                     转|
0040157D  |.  8B45 E4       mov eax,dword ptr ss:[ebp-1C]                                                                |
                                                                                                                         |
以下为name变形:                                                                                                                 |
                                                                                                                         |
0040157D  |.  8B45 E4       mov eax,dword ptr ss:[ebp-1C]<==============把name传到eax                                         |
00401580  |>  8A18          /mov bl,byte ptr ds:[eax]------  <==========================取name第一个字符                 |
00401582  |.  32D9          |xor bl,cl                   |   <==========================将其ascii的十六进制与cl异或,(cl)=1h,
00401584  |.  8818          |mov byte ptr ds:[eax],bl    |   <==========================结果传到ds:[eax]首字节,(OD)跟时可以下d 00373a58看到
00401586  |.  41            |inc ecx                    变形 <==========================ecx+1(主要是为上面变形准备,下次则与2h异或.....)
00401587  |.  40            |inc eax                     |   <==========================eax+1(主要是控制次数)
00401588  |.  8038 00       |cmp byte ptr ds:[eax],0     |   <==========================eax与0比较
0040158B  |.^ 75 F3         \jnz short crackme3.00401580--   <==========================不等再往上循环`(依次取name的各个字符来变形`)

偶输入的name: jiangwu55<=========变形后: kkbjbqr=

以下为code变形:

0040158D  |.  33C0          xor eax,eax-------------------------------
0040158F  |.  33DB          xor ebx,ebx
00401591  |.  33C9          xor ecx,ecx             全清零..
00401593  |.  B9 0A000000   mov ecx,0A<=========================================ecx赋个0ah,,主要作为下面变形异或操作数
00401598  |.  33D2          xor edx,edx-------------------------------
0040159A  |.  8B45 F0       mov eax,dword ptr ss:[ebp-10]<==================假码传到eax
0040159D  |>  8A18          /mov bl,byte ptr ds:[eax]<======================取假码第一个字符
0040159F  |.  32D9          |xor bl,cl<=====================================与cl异或
004015A1  |.  8818          |mov byte ptr ds:[eax],bl<======================结果传到ds:[eax],下00373aa8可看到
004015A3  |.  41            |inc ecx<=======================================ecx+1,则为0bh,,
004015A4  |.  40            |inc eax<=======================================eax+1,变形次数
004015A5  |.  8038 00       |cmp byte ptr ds:[eax],0<=======================与0比较
004015A8  |.^ 75 F3         \jnz short crackme3.0040159D<===================不等则继续变形

偶输入的code: 121212<==========变形后: ;9=??=

以下为变形后的name与code一个一个对比:

004015AA  |.  8B45 E4       mov eax,dword ptr ss:[ebp-1C]<================变形后的name传到eax
004015AD  |.  8B55 F0       mov edx,dword ptr ss:[ebp-10]<================变形后的code传到edx
004015B0  |>  33C9          /xor ecx,ecx<=================================ecx清零
004015B2  |.  8A18          |mov bl,byte ptr ds:[eax]<====================取变形后的name的第一个字符
004015B4  |.  8A0A          |mov cl,byte ptr ds:[edx]<====================取变形后的code的第一个字符
004015B6  |.  3AD9          |cmp bl,cl<===================================取后对比
004015B8  |.  75 09         |jnz short crackme3.004015C3<=================不等则跳``跳则玩完
004015BA  |.  40            |inc eax<=====================================eax+1,指向下一个name的字符
004015BB  |.  42            |inc edx<=====================================edx+1,指向下一个code的字符
004015BC  |.  8038 00       |cmp byte ptr ds:[eax],0<=====================eax与0比较,,看是否对比完
004015BF  |.^ 75 EF         \jnz short crackme3.004015B0<=================没完继续

整个变形总结:
1、取name的每个字符依次与从1~9异或(位数大于9,,则开始与a~f异或,还大于则开始与10后面的数异或`直到各位异或完)
2、取code的每个字符依次与从0A~0F异或(位数大于0F,则开始与10。。后面的数异或,直到各位异或完)
3、把变形完后的name和code逐个对比~~

name: jiangwu55
code: a`ngl~b,.

整个算法就是这样了`可以写出注册机了```注册机如下:(这次的注册机乱了`输入格式偶也不想调了`简单就好:)西西`~~)
#include <stdio.h>
#include <string.h>
void main()
{
    char name[100],code[100];
    char namex[100],codex[100];
    char a[100];
    int  b[100];
    int i,k=0,s=0,n=10,m=0xa,x=1;
    printf("name: ");
    gets(name);
    k=strlen(name);
    for(i=0;i<k;i++)
       {
        a[i]=x;
        x++;
}
    for(i=0;i<k;i++)
        {
            b[i]=m;
            s++;
            m++;
}
    for(i=s+1;i<k;i++)
        {
            b[i]=n;
            n++;
}
    for(i=0;i<k;i++)
       namex[i]=name[i]^a[i];
    for(i=0;i<k;i++)
        name[i]=namex[i]^b[i];
    printf("code: ");
    puts(name);
loop:
    goto loop;
    }
变形过程并不复杂,,只要找到关键断点断下后~会注意到的!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (25)
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
给出注册机``
上传的附件:
2007-1-1 15:18
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
你可以脱离新手区,向更高层次发展了,建议去下面连接,找一个没人分析过的CRACKME分析一下
http://bbs.pediy.com/showthread.php?s=&threadid=36112

希望不久的将来可以看到你在『CrackMe & ReverseMe』版面的破文
2007-1-1 15:50
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
谢谢版主支持``
偶学了可以出窗口的编程之后,,会去的
2007-1-1 15:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
写的好详细哦,学到很多。。。谢谢啦。。。
2007-1-1 21:14
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
6
简明易懂!不错。
C,我忘得差不多啦
2007-1-1 21:29
0
雪    币: 82
活跃值: (531)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
听说能分析出算发写出注册鸡就是高手了.
学习..
前来想楼主淘点宝(两个月怎么学滴)
2007-1-2 08:31
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
8
学习啊再学习中...
2007-1-2 08:54
0
雪    币: 196
活跃值: (290)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
值得学习
2007-1-2 21:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呵呵,还是有点不明白
也存了吧
2007-1-2 22:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
等我有点空再研究了
2007-1-3 03:23
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
12
最初由 heimei 发布
听说能分析出算发写出注册鸡就是高手了.
学习..
前来想楼主淘点宝(两个月怎么学滴)


努力呀!去看看看雪老大的置顶``那里有新手建议``很不错
2007-1-3 09:23
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
听说此人只有16岁,现读初三,但每天逃课学破解!!不知道这样是对还是错!
2007-1-3 18:54
0
雪    币: 249
活跃值: (130)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
14
最初由 浪流 发布
听说此人只有16岁,现读初三,但每天逃课学破解!!不知道这样是对还是错!


这孩子不错,很早就看出了学校是没有什么前途的,支持!!!
2007-1-4 09:15
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
15
哈哈``被你知道了!!
到底哪个尤大报的料~~`
16岁学破解```有人反对么??~
2007-1-4 09:22
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
16
最初由 浪流 发布
听说此人只有16岁,现读初三,但每天逃课学破解!!不知道这样是对还是错!


逃课?```西西~
并不一定要上九年义务教育呀!偶上破解也一样~~~~

偶可觉得没啥错``考试又不是不会过!也没啥好担心的`学点实在的东东那才有用
2007-1-4 10:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
不错,感觉能明白了?呵呵 看来我也有进步.
2007-1-4 11:26
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
努力学习中!
2007-6-26 09:53
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
19
果然是长江后浪推前浪,前浪死在沙滩上

each(name) xor 1 = each(code) xor x
两边 xor x

each(name) xor 1 xor x = each(code)

因此patch 为keygen

0040159A    8B45 E4         mov     eax, [ebp-1C]

004015CA    FF75 E4         push    dword ptr [ebp-1C]
004015CD    90              nop
004015CE    90              nop
2007-6-26 23:37
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
20
满眼都是生猛的幼齿。
2007-6-26 23:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21

得知道楼主只有十六岁,我真的佩服的不得了
想我十六岁那会就知道玩游戏机
十八岁终于能上网了也正是CS流行时期

向楼主学习,
2007-6-28 13:13
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习一下了!!
2007-6-28 13:28
0
雪    币: 228
活跃值: (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
23
写的很详细,多谢了!
2007-6-28 18:14
0
雪    币: 228
活跃值: (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
24
精辟!!!长见识了!!!
2007-6-28 18:26
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
还是要学习的??
2007-6-28 19:19
0
游客
登录 | 注册 方可回帖
返回
//