zoukankan      html  css  js  c++  java
  • 日常暖手

    系统 : Windows xp

    程序 : easycrackme

    程序下载地址 :http://pan.baidu.com/s/1kU9Xvkr

    要求 : 注册机编写 

    使用工具 : OD

    可在“PEDIY CrackMe 2007”中查找关于此程序的讨论,标题为“easycrackme算法分析”。

    根据字符串定位关键算法:

    00404051  |.  50            push    eax                              ; /hWnd => 000706AE (class='Edit',parent=00270276)
    00404052  |.  E8 ADFCFFFF   call    <jmp.&user32.GetWindowTextLength>; GetWindowTextLengthA
    00404057  |.  8BD0          mov     edx, eax
    00404059  |.  8BDA          mov     ebx, edx
    0040405B  |.  85DB          test    ebx, ebx
    0040405D  |.  7E 10         jle     short 0040406F
    0040405F  |>  8D45 F8       /lea     eax, dword ptr [ebp-8]
    00404062  |.  BA D4414000   |mov     edx, 004041D4
    00404067  |.  E8 6CEEFFFF   |call    00402ED8
    0040406C  |.  4B            |dec     ebx
    0040406D  |.^ 75 F0         jnz     short 0040405F
    0040406F  |>  6A 32         push    32
    00404071  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
    00404074  |.  E8 27EFFFFF   call    00402FA0
    00404079  |.  50            push    eax                              ; |Buffer
    0040407A  |.  A1 34654000   mov     eax, dword ptr [406534]          ; |
    0040407F  |.  50            push    eax                              ; |hWnd => 000706AE (class='Edit',parent=00270276)
    00404080  |.  E8 77FCFFFF   call    <jmp.&user32.GetWindowTextA>     ; GetWindowTextA
    00404085  |.  A1 30654000   mov     eax, dword ptr [406530]
    0040408A  |.  50            push    eax                              ; /hWnd => 000506DC (class='Edit',parent=00270276)
    0040408B  |.  E8 74FCFFFF   call    <jmp.&user32.GetWindowTextLength>; GetWindowTextLengthA
    00404090  |.  8BD0          mov     edx, eax
    00404092  |.  8BDA          mov     ebx, edx
    00404094  |.  85DB          test    ebx, ebx
    00404096  |.  7E 10         jle     short 004040A8
    00404098  |>  8D45 FC       /lea     eax, dword ptr [ebp-4]
    0040409B  |.  BA D4414000   |mov     edx, 004041D4
    004040A0  |.  E8 33EEFFFF   |call    00402ED8
    004040A5  |.  4B            |dec     ebx
    004040A6  |.^ 75 F0         jnz     short 00404098
    004040A8  |>  6A 32         push    32
    004040AA  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    004040AD  |.  E8 EEEEFFFF   call    00402FA0
    004040B2  |.  50            push    eax                              ; |Buffer
    004040B3  |.  A1 30654000   mov     eax, dword ptr [406530]          ; |
    004040B8  |.  50            push    eax                              ; |hWnd => 000506DC (class='Edit',parent=00270276)
    004040B9  |.  E8 3EFCFFFF   call    <jmp.&user32.GetWindowTextA>     ; GetWindowTextA
    004040BE  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    004040C1  |.  E8 0AEEFFFF   call    00402ED0
    004040C6  |.  8BD0          mov     edx, eax
    004040C8  |.  85D2          test    edx, edx
    004040CA  |.  7F 1F         jg      short 004040EB
    004040CC  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
    004040CF  |.  BA E0414000   mov     edx, 004041E0                    ;  your name?
    004040D4  |.  E8 A7EDFFFF   call    00402E80
    004040D9  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
    004040DC  |.  BA F4414000   mov     edx, 004041F4                    ;  error
    004040E1  |.  E8 9AEDFFFF   call    00402E80
    004040E6  |.  E9 98000000   jmp     00404183
    004040EB  |>  33F6          xor     esi, esi
    004040ED  |.  8BDA          mov     ebx, edx
    004040EF  |.  85DB          test    ebx, ebx
    004040F1  |.  7E 19         jle     short 0040410C
    004040F3  |.  B8 01000000   mov     eax, 1
    004040F8  |>  8B4D FC       /mov     ecx, dword ptr [ebp-4]
    004040FB  |.  0FB64C01 FF   |movzx   ecx, byte ptr [ecx+eax-1]       ;  遍历用户名
    00404100  |.  8BF8          |mov     edi, eax
    00404102  |.  4F            |dec     edi
    00404103  |.  0FAFCF        |imul    ecx, edi
    00404106  |.  03F1          |add     esi, ecx
    00404108  |.  40            |inc     eax
    00404109  |.  4B            |dec     ebx                             ;  循环变量递减
    0040410A  |.^ 75 EC         jnz     short 004040F8
    0040410C  |>  8D1C12        lea     ebx, dword ptr [edx+edx]
    0040410F  |.  83C3 63       add     ebx, 63
    00404112  |.  81E3 FFFF0000 and     ebx, 0FFFF                       ;  去高位
    00404118  |.  81E6 FFFF0000 and     esi, 0FFFF                       ;  去高位
    0040411E  |.  C1E3 10       shl     ebx, 10
    00404121  |.  03F3          add     esi, ebx
    00404123  |.  8BDE          mov     ebx, esi
    00404125  |.  8BF3          mov     esi, ebx
    00404127  |.  83E6 0F       and     esi, 0F
    0040412A  |.  8B1CB5 B85040>mov     ebx, dword ptr [esi*4+4050B8]    ;  表中取数
    00404131  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
    00404134  |.  8B4D F8       mov     ecx, dword ptr [ebp-8]
    00404137  |.  BA 04424000   mov     edx, 00404204                    ;  0
    0040413C  |.  E8 DBEDFFFF   call    00402F1C                         ;  密码前面加上0
    00404141  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
    00404144  |.  E8 57FEFFFF   call    00403FA0
    00404149  |.  8BF0          mov     esi, eax
    0040414B  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
    0040414E  |.  BA F4414000   mov     edx, 004041F4                    ;  error
    00404153  |.  E8 28EDFFFF   call    00402E80
    00404158  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
    0040415B  |.  BA 10424000   mov     edx, 00404210                    ;  invalid
    00404160  |.  E8 1BEDFFFF   call    00402E80
    00404165  |.  3BDE          cmp     ebx, esi
    00404167  |.  75 1A         jnz     short 00404183
    00404169  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
    0040416C  |.  BA 20424000   mov     edx, 00404220                    ;  ok
    00404171  |.  E8 0AEDFFFF   call    00402E80
    00404176  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
    00404179  |.  BA 2C424000   mov     edx, 0040422C                    ;  thanks a lot
    0040417E  |.  E8 FDECFFFF   call    00402E80
    00404183  |>  6A 00         push    0
    00404185  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    00404188  |.  E8 13EEFFFF   call    00402FA0
    0040418D  |.  50            push    eax
    0040418E  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
    00404191  |.  E8 0AEEFFFF   call    00402FA0
    00404196  |.  50            push    eax                              ; |Text
    00404197  |.  A1 0C654000   mov     eax, dword ptr [40650C]          ; |
    0040419C  |.  50            push    eax                              ; |hOwner => 00270276 ('esaycrackme bY DiKeN',class='MyWindowClass')
    0040419D  |.  E8 8AFBFFFF   call    <jmp.&user32.MessageBoxA>        ; MessageBoxA

    Fun(用户名):

    004040F8  |> /8B4D FC       /mov     ecx, dword ptr [ebp-4]
    004040FB  |. |0FB64C01 FF   |movzx   ecx, byte ptr [ecx+eax-1]       ;  遍历用户名
    00404100  |. |8BF8          |mov     edi, eax
    00404102  |. |4F            |dec     edi
    00404103  |. |0FAFCF        |imul    ecx, edi
    00404106  |. |03F1          |add     esi, ecx
    00404108  |. |40            |inc     eax
    00404109  |. |4B            |dec     ebx                             ;  循环变量递减
    0040410A  |.^75 EC         jnz     short 004040F8
    0040410C  |>  8D1C12        lea     ebx, dword ptr [edx+edx]
    0040410F  |.  83C3 63       add     ebx, 63
    00404112  |.  81E3 FFFF0000 and     ebx, 0FFFF                       ;  去高位
    00404118  |.  81E6 FFFF0000 and     esi, 0FFFF                       ;  去高位
    0040411E  |.  C1E3 10       shl     ebx, 10
    00404121  |.  03F3          add     esi, ebx
    00404123  |.  8BDE          mov     ebx, esi
    00404125  |.  8BF3          mov     esi, ebx
    00404127  |.  83E6 0F       and     esi, 0F
    0040412A  |.  8B1CB5 B85040>mov     ebx, dword ptr [esi*4+4050B8]    ;  表中取数

    Fun(密码):

    00403FA0  /$  55            push    ebp
    00403FA1  |.  8BEC          mov     ebp, esp
    00403FA3  |.  83C4 F8       add     esp, -8
    00403FA6  |.  53            push    ebx
    00403FA7  |.  33D2          xor     edx, edx
    00403FA9  |.  8955 F8       mov     dword ptr [ebp-8], edx
    00403FAC  |.  8945 FC       mov     dword ptr [ebp-4], eax
    00403FAF  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
    00403FB2  |.  E8 D9EFFFFF   call    00402F90
    00403FB7  |.  33C0          xor     eax, eax
    00403FB9  |.  55            push    ebp
    00403FBA  |.  68 16404000   push    00404016
    00403FBF  |.  64:FF30       push    dword ptr fs:[eax]
    00403FC2  |.  64:8920       mov     dword ptr fs:[eax], esp
    00403FC5  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
    00403FC8  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
    00403FCB  |.  E8 B0EEFFFF   call    00402E80
    00403FD0  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
    00403FD3  |.  E8 F8EEFFFF   call    00402ED0                         ;  算出序列号长度
    00403FD8  |.  8BC8          mov     ecx, eax
    00403FDA  |.  41            inc     ecx
    00403FDB  |.  33D2          xor     edx, edx
    00403FDD  |.  B8 01000000   mov     eax, 1
    00403FE2  |>  03D2          /add     edx, edx                        ;  edx * 2
    00403FE4  |.  8D1492        |lea     edx, dword ptr [edx+edx*4]      ;  快速计算 edx * 5
    00403FE7  |.  8B5D F8       |mov     ebx, dword ptr [ebp-8]
    00403FEA  |.  0FB65C03 FF   |movzx   ebx, byte ptr [ebx+eax-1]       ;  遍历 序列号
    00403FEF  |.  03D3          |add     edx, ebx                        ;  累加
    00403FF1  |.  83EA 30       |sub     edx, 30
    00403FF4  |.  40            |inc     eax
    00403FF5  |.  3BC8          |cmp     ecx, eax
    00403FF7  |.^ 75 E9         jnz     short 00403FE2
    00403FF9  |.  8BDA          mov     ebx, edx
    00403FFB  |.  33C0          xor     eax, eax
    00403FFD  |.  5A            pop     edx
    00403FFE  |.  59            pop     ecx
    00403FFF  |.  59            pop     ecx
    00404000  |.  64:8910       mov     dword ptr fs:[eax], edx
    00404003  |.  68 1D404000   push    0040401D
    00404008  |>  8D45 F8       lea     eax, dword ptr [ebp-8]
    0040400B  |.  BA 02000000   mov     edx, 2
    00404010  |.  E8 F7EDFFFF   call    00402E0C
    00404015  .  C3            retn

    比较简单的二元函数,可以直接看出Fun(密码)是对从表中取的数字进行10进制->16进制的转换。

    打开http://www.cnblogs.com/ZRBYYXDM/p/5115596.html中搭建的框架,将OnBtnDecrypt函数编辑如下:

    void CKengen_TemplateDlg::OnBtnDecrypt() 
    {
        // TODO: Add your control notification handler code here
        CString str;
        GetDlgItemText( IDC_EDIT_NAME,str );                    //获取用户名字串基本信息。
        int len = str.GetLength();
    
        if ( len != 0 ){                                        //格式控制。
            DWORD NumList[] = {
                 0x19791126,    0x19791007,    0x11261979,    0x10071979,
                 0x12345678,    0x9ABCDEF0,    0x12123434,    0x78787878,
                 0xCCC6CCC6,    0xCC00CC00,    0xFFEFEFFF,    0xDDCC5555,
                 0x67678789,    0xCECECBCC,    0x778899AB,    0x44337766
            };
    
            DWORD Res = 0;
            for ( int i = 0 ; i != len ; i++ )
                Res += ( str[i] * i );
    
            DWORD Offset = 0;
            Offset = ( (len*2+0x63) & 0xFFFF ) << 0x10;
            Offset += Res & 0xFFFF;
            Offset &= 0xF;
    
            DWORD NameRes = NumList[Offset];
    
            CString PassWord;
            PassWord.Format( "%u",NameRes );
            SetDlgItemText( IDC_EDIT_PASSWORD,PassWord );
        }
        else
            MessageBox( "用户名格式错误!" );
    }

    再在OnInitDialog中添加此代码修改标题:SetWindowText(_T("Keygen"));

    运行效果:

  • 相关阅读:
    javaEE中的字符编码问题
    java泛型中<?>和<T>有什么区别?
    list去重,String[]去重,String[]去空,StringBuffer去重,并且以','隔开,list拆分
    字符串转驼峰
    动态生成16位不重复随机数、随机创建2位ID
    POI不同浏览器导出名称处理
    图片转流
    RSA加密解密
    idea 使用在java 包下的ftl、xml 文件编译问题
    深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5745667.html
Copyright © 2011-2022 走看看