首页
社区
课程
招聘
[原创]第一次分析cm 写注册机(适合新手)
发表于: 2009-9-11 13:40 5367

[原创]第一次分析cm 写注册机(适合新手)

2009-9-11 13:40
5367
【文章标题】: 第一次分析cm (适合新手)
【文章作者】: 思远软件
【作者邮箱】: c_s_y@126.com
【作者QQ号】: 495544622
【软件名称】: Crack me之 zugo.exe
【软件大小】: 28.0 KB
【下载地址】: http://bbs.pediy.com/showthread.php?t=58867
【加壳方式】: 无
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD
【操作平台】: windows xp
【软件介绍】: 很简单的cm
【作者声明】: 很简单的cm 第一次写,写的不好请大家多多指教。
--------------------------------------------------------------------------------
【详细过程】
  学习破解3年了 这是我第一次写cm,写的不好,请大家多多指点。(前人已经分析过 呵呵)
  打开cm,查找asicc ,可以很容易找到 good boy!和bad boy ,点击进入!
  然后在004010F9下段  运行程序 输入 exekill  123456789 断下
  到了这里
  
  0040107C  |.  8B35 08404000 mov     esi, dword ptr [<&KERNEL32.Globa>;  kernel32.GlobalAlloc
  00401082  |.  8D43 01       lea     eax, dword ptr [ebx+1]
  00401085  |.  50            push    eax                              ; /MemSize
  00401086  |.  6A 40         push    40                               ; |Flags = GPTR
  00401088  |.  C745 0C 08190>mov     dword ptr [ebp+C], 1908                      ;       a1=1908
  0040108F  |.  FFD6          call    esi                              ; \GlobalAlloc
  00401091  |.  8945 10       mov     dword ptr [ebp+10], eax
  00401094  |.  8B45 14       mov     eax, dword ptr [ebp+14]
  00401097  |.  40            inc     eax
  00401098  |.  50            push    eax                              ; /MemSize
  00401099  |.  6A 40         push    40                               ; |Flags = GPTR
  0040109B  |.  8945 FC       mov     dword ptr [ebp-4], eax           ; |
  0040109E  |.  FFD6          call    esi                              ; \GlobalAlloc
  004010A0  |.  8945 14       mov     dword ptr [ebp+14], eax
  004010A3  |.  8D43 01       lea     eax, dword ptr [ebx+1]
  004010A6  |.  50            push    eax                              ; /Count
  004010A7  |.  8B35 A8404000 mov     esi, dword ptr [<&USER32.GetDlgI>; |USER32.GetDlgItemTextA
  004010AD  |.  FF75 10       push    dword ptr [ebp+10]               ; |Buffer
  004010B0  |.  68 E8030000   push    3E8                              ; |ControlID = 3E8 (1000.)
  004010B5  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd
  004010B8  |.  FFD6          call    esi                              ; \GetDlgItemTextA
  004010BA  |.  FF75 FC       push    dword ptr [ebp-4]                ; /Count = A (10.)
  004010BD  |.  FF75 14       push    dword ptr [ebp+14]               ; |Buffer
  004010C0  |.  57            push    edi                              ; |ControlID => 3EA (1002.)
  004010C1  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd
  004010C4  |.  FFD6          call    esi                              ; \GetDlgItemTextA
  
  
  004010C4  |.  FFD6          call    esi                              ; \GetDlgItemTextA
  004010C6  |.  33C0          xor     eax, eax
  004010C8  |.  85DB          test    ebx, ebx
  004010CA  |.  7E 17         jle     short 004010E3
  004010CC  |>  8B4D 10       /mov     ecx, dword ptr [ebp+10]
  004010CF  |.  8B55 0C       |mov     edx, dword ptr [ebp+C]          ;  a1=1908  这里取an
  004010D2  |.  03D3          |add     edx, ebx                        ;  a+用户名长度
  004010D4  |.  0FBE0C08      |movsx   ecx, byte ptr [eax+ecx]         ;  第n个用户名的asicc码
  004010D8  |.  0FAFCA        |imul    ecx, edx                        ;  (a+用户名长度)*那个数的asicc码
  004010DB  |.  40            |inc     eax                             ;  指向下一个数
  004010DC  |.  894D 0C       |mov     dword ptr [ebp+C], ecx          ;  算出来的数值存储
  004010DF  |.  3BC3          |cmp     eax, ebx                        ;  比较是否计算完所有用户名
  004010E1  |.^ 7C E9         \jl      short 004010CC                  ;  没有计算完就返回
  004010E3  |>  FF75 14       push    dword ptr [ebp+14]
  004010E6  |.  E8 8D010000   call    00401278
  004010EB  |.  59            pop     ecx
  004010EC  |.  8B4D 0C       mov     ecx, dword ptr [ebp+C]
  004010EF  |.  6A 00         push    0
  004010F1  |.  81F1 FAF9A900 xor     ecx, 0A9F9FA                     ;  算出来的和 0A9f9fa 异或
  004010F7  |.  3BC8          cmp     ecx, eax
  004010F9  |.  75 0C         jnz     short 00401107
  004010FB  |.  68 98504000   push    00405098                         ;  good boy!
  00401100  |.  68 7C504000   push    0040507C                         ;  terima kasih kerana mencuba
  00401105  |.  EB 0A         jmp     short 00401111
  00401107  |>  68 70504000   push    00405070                         ;  bad boy!
  0040110C  |.  68 4C504000   push    0040504C                         ;  tidak tepat, sila cuba sekali lagi
  
  
  
  
  这里是关键算法以及我的分析,
  
  
  #include<stdio.h>
#include "string.h"
#include "windows.h"
void main()
{
        char s[100];
        long a=0x1908,i,l;
        char *p = s;
        printf("请输入用户名");
        gets(s);
        l=strlen(s);
        for(i=1;i<=l;i++)
        {
                a=a+l;
                a=a*(int)(*p);
                p++;
        }
        a=a^0xA9F9FA;

        printf("注册码为%d",a);
        system("pause");

}  
--------------------------------------------------------------------------------
【经验总结】
  1 要想破解学好 必须要细心 要有耐心
  2 必须有一定的编程功底,我c不是很好,写注册机用了很长时间
  3 要会猜测
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年09月09日 13:38:48

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 205
活跃值: (12)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
学了三年破解,才写注册机啊 要是我都能写脱壳机了 哈哈 思远你... 我伊戈尔

祝你早日成高手
2009-9-11 13:46
0
雪    币: 88
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
哎 是3年前才开始学 那时候还是高一末吧 ,一直很迷茫 ,这次有信心了 呵呵!
2009-9-11 13:49
0
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
好的开端继续努力
建议找个没人写过精华文章的CrackMe的文章来发表可能更好。
2009-9-11 13:58
0
雪    币: 9
活跃值: (142)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
5
来看看!!!!!!!!!!!!!!!!!!!
2009-9-11 14:02
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
6
嘻嘻,还好都能看懂。。。
2009-9-11 16:50
0
雪    币: 390
活跃值: (15)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
很不错啊,呵呵,一起继续加油吧。。
2009-9-12 14:07
0
游客
登录 | 注册 方可回帖
返回
//