首页
社区
课程
招聘
[旧帖] [原创]griefwolf Crackme 2.0的简单分析 0.00雪花
发表于: 2008-8-18 10:00 3641

[旧帖] [原创]griefwolf Crackme 2.0的简单分析 0.00雪花

2008-8-18 10:00
3641
【文章标题】: griefwolf Crackme 2.0的简单分析
【文章作者】: samisgod
【作者邮箱】: 21gh#163.com
【作者主页】: bysfl.cn
【作者QQ号】: 598620772
【下载地址】: 附件
【保护方式】: 注册码
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  废话不多说,载入OD后通过字符串参考很快可以定位关键点
  
  00401C80  /> \55            push    ebp
  00401C81  |.  8BEC          mov     ebp, esp
  00401C83  |.  81EC B4000000 sub     esp, 0B4
  00401C89  |.  53            push    ebx
  00401C8A  |.  56            push    esi
  00401C8B  |.  57            push    edi
  00401C8C  |.  51            push    ecx
  00401C8D  |.  8DBD 4CFFFFFF lea     edi, [local.45]
  00401C93  |.  B9 2D000000   mov     ecx, 2D
  00401C98  |.  B8 CCCCCCCC   mov     eax, CCCCCCCC
  00401C9D  |.  F3:AB         rep     stos dword ptr es:[edi]
  00401C9F  |.  59            pop     ecx
  00401CA0  |.  894D FC       mov     [local.1], ecx
  00401CA3  |.  A1 40544100   mov     eax, dword ptr [415440]
  00401CA8  |.  8945 B4       mov     [local.19], eax
  00401CAB  |.  8B0D 44544100 mov     ecx, dword ptr [415444]
  00401CB1  |.  894D B8       mov     [local.18], ecx
  00401CB4  |.  66:8B15 48544>mov     dx, word ptr [415448]
  00401CBB  |.  66:8955 BC    mov     word ptr [ebp-44], dx
  00401CBF  |.  A0 4A544100   mov     al, byte ptr [41544A]
  00401CC4  |.  8845 BE       mov     byte ptr [ebp-42], al
  00401CC7  |.  B9 09000000   mov     ecx, 9
  00401CCC  |.  BE 14544100   mov     esi, 00415414                 ;  这里是"1234567890abcdefghijklmnopqrstuvwxyz"
  00401CD1  |.  8D7D 8C       lea     edi, [local.29]
  00401CD4  |.  F3:A5         rep     movs dword ptr es:[edi], dwor>
  00401CD6  |.  A4            movs    byte ptr es:[edi], byte ptr [>
  00401CD7  |.  6A 32         push    32
  00401CD9  |.  8D4D DC       lea     ecx, [local.9]
  00401CDC  |.  51            push    ecx
  00401CDD  |.  68 E8030000   push    3E8
  00401CE2  |.  8B4D FC       mov     ecx, [local.1]
  00401CE5  |.  E8 48040000   call    <jmp.&MFC42D.#2439_CWnd::GetD>
  00401CEA  |.  6A 32         push    32
  00401CEC  |.  8D55 C4       lea     edx, [local.15]
  00401CEF  |.  52            push    edx
  00401CF0  |.  68 E9030000   push    3E9
  00401CF5  |.  8B4D FC       mov     ecx, [local.1]
  00401CF8  |.  E8 35040000   call    <jmp.&MFC42D.#2439_CWnd::GetD>
  00401CFD  |.  8D45 DC       lea     eax, [local.9]
  00401D00  |.  50            push    eax                           ; /s
  00401D01  |.  E8 A0040000   call    <jmp.&MSVCRTD.strlen>         ; \strlen
  00401D06  |.  83C4 04       add     esp, 4                        ;这里取用户名长度
  00401D09  |.  85C0          test    eax, eax
  00401D0B  |.  75 22         jnz     short 00401D2F                ;不为空就跳
  00401D0D  |.  6A 00         push    0
  00401D0F  |.  6A 00         push    0
  00401D11  |.  68 00544100   push    00415400                      ;  用户名不能为空!
  00401D16  |.  8B4D FC       mov     ecx, [local.1]
  00401D19  |.  E8 0E040000   call    <jmp.&MFC42D.#3517_CWnd::Mess>
  00401D1E  |.  8BF4          mov     esi, esp
  00401D20  |.  6A 00         push    0                             ; /status = 0
  00401D22  |.  FF15 A4764100 call    dword ptr [<&MSVCRTD.exit>]   ; \exit
  00401D28  |.  3BF4          cmp     esi, esp
  00401D2A  |.  E8 09040000   call    <jmp.&MSVCRTD._chkesp>
  00401D2F  |>  C745 C0 00000>mov     [local.16], 0
  00401D36  |.  EB 09         jmp     short 00401D41
  00401D38  |>  8B4D C0       /mov     ecx, [local.16]              ;  local.16为循环计数器
  00401D3B  |.  83C1 01       |add     ecx, 1                       ;  每循环一次计数器+1
  00401D3E  |.  894D C0       |mov     [local.16], ecx              ;  保存计数器
  00401D41  |>  837D C0 0A     cmp     [local.16], 0A               ;  已循环次数与0xA对比
  00401D45  |.  7D 3B         |jge     short 00401D82               ;  循环结束,跳出循环
  00401D47  |.  8B55 C0       |mov     edx, [local.16]
  00401D4A  |.  0FBE7415 B4   |movsx   esi, byte ptr [ebp+edx-4C]   ;  这里出现"EBOOKMAKER"
  00401D4F  |.  8D45 DC       |lea     eax, [local.9]               ;  
  00401D52  |.  50            |push    eax                          ; /s
  00401D53  |.  E8 4E040000   |call    <jmp.&MSVCRTD.strlen>        ; \strlen
  00401D58  |.  83C4 04       |add     esp, 4                       ;  取用户名长度
  00401D5B  |.  8BC8          |mov     ecx, eax
  00401D5D  |.  8B45 C0       |mov     eax, [local.16]              ;  
  00401D60  |.  33D2          |xor     edx, edx
  00401D62  |.  F7F1          |div     ecx
  00401D64  |.  0FBE5415 DC   |movsx   edx, byte ptr [ebp+edx-24]   ;  以上做了用户名不足10位时的循环操作
  00401D69  |.  03F2          |add     esi, edx                     ;  把EBOOKMAKER和用户名ASC依位相加
  00401D6B  |.  8BC6          |mov     eax, esi
  00401D6D  |.  99            |cdq
  00401D6E  |.  B9 24000000   |mov     ecx, 24                      ;  ecx=0x24
  00401D73  |.  F7F9          |idiv    ecx                          ;  ASC/0x24
  00401D75  |.  8B45 C0       |mov     eax, [local.16]              ;  edx为余数
  00401D78  |.  8A4C15 8C     |mov     cl, byte ptr [ebp+edx-74]    ;  ebp-74指向1234567890abcdefghijklmnopqrstuvwxyz
  00401D7C  |.  884C05 D0     |mov     byte ptr [ebp+eax-30], cl    ;  再加上edx这个指针进行查表,然后保存
  00401D80  |.^ EB B6         \jmp     short 00401D38                  ;继续循环
  00401D82  |>  C645 DA 00    mov     byte ptr [ebp-26], 0
  00401D86  |.  8D55 C4       lea     edx, [local.15]
  00401D89  |.  52            push    edx                           ; /s
  00401D8A  |.  E8 17040000   call    <jmp.&MSVCRTD.strlen>         ; \strlen
  00401D8F  |.  83C4 04       add     esp, 4
  00401D92  |.  8BF0          mov     esi, eax
  00401D94  |.  8D45 D0       lea     eax, [local.12]
  00401D97  |.  50            push    eax                           ; /s
  00401D98  |.  E8 09040000   call    <jmp.&MSVCRTD.strlen>         ; \strlen
  00401D9D  |.  83C4 04       add     esp, 4
  
  至此,注册码的生成操作已经很明了了
  通过把用户名ASC与EBOOKMAKER依位相加,分别除以0x24
  余数作为指针对1234567890abcdefghijklmnopqrstuvwxyz查表
  连接后即得注册码了
  
  正在试用VC9,写个keygen
  本人编程很垃圾,不要笑啊....
  在VC9绿色版下编译通过
  
  // keygen001.cpp : 定义控制台应用程序的入口点。
  //
  
  #include "stdafx.h"
  #include "keygen001.h"
  
  #ifdef _DEBUG
  #define new DEBUG_NEW
  #endif
  
  
  // 唯一的应用程序对象
  
  CWinApp theApp;
  
  using namespace std;
  
  int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  {
          int nRetCode = 0;
  
          // 初始化 MFC 并在失败时显示错误
          if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
          {
                  // TODO: 更改错误代码以符合您的需要
                  _tprintf(_T("错误: MFC 初始化失败\n"));
                  nRetCode = 1;
          }
          else
          {
                  // TODO: 在此处为应用程序的行为编写代码。
  start:
         char key1[]="EBOOKMAKER";
         char key2[]="1234567890abcdefghijklmnopqrstuvwxyz";
             char user[50];
             char rs;
             cout<<"请输入用户名"<<endl;
             cin>>user;
             int len=strlen(user),rlen,aasc,ssi;
             cout<<"你的注册码是"<<endl;
             for (ssi=0;ssi<10;ssi++)
             {
                     rlen=ssi;
                     if (len<10)
                     {
             rlen=ssi%len;
                     }
                     aasc=key1[ssi]+user[rlen];
                     aasc%=0x24;
             rs=key2[aasc];
                     cout<<rs;
             }
             cout<<endl<<endl;
             goto start;
          }
  
          return nRetCode;
  }
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年08月18日 9:57:58

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 239
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
PS
原作者对比用的代码MS有问题...
2008-8-18 10:55
0
雪    币: 239
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
CM使用的是Debug编译...
所以没装VC可能不好运行
2008-8-18 16:21
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
多谢这位兄弟了!我小鸟一只,知道的很少,刚刚入门,编程也很屁哈!多谢指导!
2008-8-18 16:46
0
雪    币: 239
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
我编程也很菜,谈不上指导,呵呵
2008-8-18 23:01
0
游客
登录 | 注册 方可回帖
返回
//