zoukankan      html  css  js  c++  java
  • 破解 AD_CM#3

    系统 : Windows xp

    程序 : AD_CM#3

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

    要求 : 编写注册机

    使用工具 :IDA & OD

    可在看雪论坛中查找关于此程序的破文:http://bbs.pediy.com/showthread.php?t=28995

     

    IDA载入程序,找出提示破解成功的字串“Well done Cracker, You did it!”并定位关键代码:

    0045817F  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
    00458182  |.  8B87 D8020000 mov     eax, dword ptr [edi+2D8]
    00458188  |.  E8 FFBEFCFF   call    0042408C
    0045818D  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
    00458190  |.  8B87 D8020000 mov     eax, dword ptr [edi+2D8]
    00458196  |.  E8 F1BEFCFF   call    0042408C
    0045819B  |.  837D F0 00    cmp     dword ptr [ebp-10], 0            ;  用户名为空?
    0045819F  |.  75 0A         jnz     short 004581AB
    004581A1  |.  B8 88824500   mov     eax, 00458288                    ;  ASCII "Enter you name, pls."
    004581A6  |.  E8 39C1FEFF   call    004442E4
    004581AB  |>  8D55 EC       lea     edx, dword ptr [ebp-14]
    004581AE  |.  8B87 DC020000 mov     eax, dword ptr [edi+2DC]
    004581B4  |.  E8 D3BEFCFF   call    0042408C
    004581B9  |.  837D EC 00    cmp     dword ptr [ebp-14], 0            ;  序列号为空?
    004581BD  |.  75 0A         jnz     short 004581C9
    004581BF  |.  B8 A8824500   mov     eax, 004582A8                    ;  ASCII "Enter the serial, pls."
    004581C4  |.  E8 1BC1FEFF   call    004442E4
    004581C9  |>  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  取用户名
    004581CC  |.  E8 ABB9FAFF   call    00403B7C                         ;  取长度
    004581D1  |.  8BD8          mov     ebx, eax
    004581D3  |.  85DB          test    ebx, ebx
    004581D5  |.  7E 2D         jle     short 00458204
    004581D7  |.  BE 01000000   mov     esi, 1                           ;  初始化循环变量
    004581DC  |>  8B45 FC       /mov     eax, dword ptr [ebp-4]          ;  取用户名
    004581DF  |.  0FB64430 FF   |movzx   eax, byte ptr [eax+esi-1]       ;  迭代用户名字串
    004581E4  |.  B9 03000000   |mov     ecx, 3
    004581E9  |.  33D2          |xor     edx, edx
    004581EB  |.  F7F1          |div     ecx                             ;  字符 除以 3
    004581ED  |.  8D55 E8       |lea     edx, dword ptr [ebp-18]         ;  取一段内存
    004581F0  |.  E8 0FF9FAFF   |call    00407B04                        ;  将商将从十六进制的数据转化为十进制的字串
    004581F5  |.  8B55 E8       |mov     edx, dword ptr [ebp-18]
    004581F8  |.  8D45 F8       |lea     eax, dword ptr [ebp-8]          ;  取一段内存
    004581FB  |.  E8 84B9FAFF   |call    00403B84                        ;  连接算出的子密钥
    00458200  |.  46            |inc     esi                             ;  循环变量自增
    00458201  |.  4B            |dec     ebx
    00458202  |.^ 75 D8         jnz     short 004581DC
    00458204  |>  8D45 F4       lea     eax, dword ptr [ebp-C]           ;  取一段内存
    00458207  |.  8B4D F8       mov     ecx, dword ptr [ebp-8]           ;  取连接好的密钥
    0045820A  |.  BA C8824500   mov     edx, 004582C8                    ;  ASCII "ADCM3-"
    0045820F  |.  E8 B4B9FAFF   call    00403BC8                         ;  连接字串
    00458214  |.  8D55 E4       lea     edx, dword ptr [ebp-1C]          ;  取一段内存
    00458217  |.  8B87 DC020000 mov     eax, dword ptr [edi+2DC]
    0045821D  |.  E8 6ABEFCFF   call    0042408C
    00458222  |.  8B55 E4       mov     edx, dword ptr [ebp-1C]          ;  取序列号
    00458225  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  取连接好的密钥
    00458228  |.  E8 5FBAFAFF   call    00403C8C                         ;  对比字串,返回0 表示字串相同
    0045822D  |.  75 0A         jnz     short 00458239
    0045822F  |.  B8 D8824500   mov     eax, 004582D8                    ;  ASCII "Well done Cracker, You did it!"

    以上,算法分析完毕,这真的是一个非常简单的crackme,我们直接打开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();
        CString Temp,PassWord;
    
        if ( len != 0 ){                                        //格式控制。
            for ( int i = 0 ; i != len ; i++ ){
                Temp.Format( "%d",( str[i] / 3 ) );
                PassWord += Temp;
            }
    
            PassWord = "ADCM3-" + PassWord;
            SetDlgItemText( IDC_EDIT_PASSWORD,PassWord );
        }
        else
            MessageBox( "用户名格式错误!" );
    }

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

    运行效果:

     

    我们一路奋战,不是为了改变世界,而是不让世界改变我们 ——《熔炉》
  • 相关阅读:
    第4章-控制执行流程
    第3章-运算符
    第2章-对象
    第10章-内部类II
    第10章-内部类
    基于gtest、gmock、mockcpp和lcov的C语言LLT工程 —— LLT构造和lcov查看覆盖率实例
    字符设备驱动框架讲解
    基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建
    给 Virtualbox 中 Ubuntu 系统设置静态 IP
    小白请教几个关于Java虚拟机内存分配策略的问题
  • 原文地址:https://www.cnblogs.com/ZRBYYXDM/p/5138636.html
Copyright © 2011-2022 走看看