文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → duelist crackme 4 破解

duelist crackme 4 破解

时间:2004/10/15 0:58:00来源:本站整理作者:蓝点我要评论(0)

 E_mail        ddxia@263.net (如果Crackme教学文章中有错,请来信:))
Web            http://go18.163.com/~ddxia
目标     duelist crackme 4
目标URL    http://go18.163.com/~ddxia/crackme/DueList/Due-cm4.zip
工具          SoftIce4.01 for NT    winapi.hlp 

    据readme.txt说,用秘密表的形式来进行加密,解起来有些困难。同时要做一个KEYGEN
    这次不用BPX MESSAGEBOXA 换一下口味!:)
    因为这次Crackme是要输入USER/CODE,一定要经过变化才进行比较,所以在Crackme得到
假的USER/CODE时,把它断下来。
    bpx getwindowtexta  ------啊哦!!没有用!
    bpx getdlgitem      ------与DLG操作有都断下来。
    结果按下check后,就给断下来了,F11 然后再按F12 返回Crackme的代码空间
    用SICE截下如下代码,COME ON BABY!!分析代码哦!!非常的有趣的活哦!:)

:u 401127 L13d
001B:00401127  6A00                PUSH      00
001B:00401129  6A00                PUSH      00
001B:0040112B  6A0E                PUSH      0E
001B:0040112D  6A03                PUSH      03
001B:0040112F  FF7508              PUSH      DWORD PTR [EBP+08]
001B:00401132  E841020000          CALL      USER32!SendDlgItemMessageA

    SendDlgItemMessage这个API调用了四次,来我们看一看它到底有什么用?

LONG SendDlgItemMessage(

    HWND hDlg,        // 对话框的句柄
    int nIDDlgItem,    // 控件的ID号
    UINT Msg,        // 传送的消息
    WPARAM wParam,    // 第一个消息参数
    LPARAM lParam     // 第二个消息参数
  );
    从程序中我们可以知道当UINT Msg=E 时 是取输入字符的个数
                当UINT Msg=D 时 是取输入字符的内容
001B:00401137  A3AF214000          MOV      [004021AF],EAX
                  ^^^^^^^^^^^^^^^^^^^^^^^^---->取输入USER的个数
001B:0040113C  83F800              CMP      EAX,00
001B:0040113F  0F84D5000000        JZ        0040121A
001B:00401145  83F808              CMP      EAX,08
001B:00401148  0F8FCC000000        JG        0040121A
                  ^^^^^^^^^^^^^^^^^^^^^^^----->检查输入个数是否
                                大于0小于8
001B:0040114E  8BF0                MOV      ESI,EAX
                  ^^^^^^^^^^^^^^^^^^^^^^^----->注意这个
001B:00401150  6A00                PUSH      00
001B:00401152  6A00                PUSH      00
001B:00401154  6A0E                PUSH      0E
001B:00401156  6A04                PUSH      04
001B:00401158  FF7508              PUSH      DWORD PTR [EBP+08]
001B:0040115B  E818020000          CALL      USER32!SendDlgItemMessageA
001B:00401160  83F800              CMP      EAX,00
001B:00401163  0F84B1000000        JZ        0040121A
001B:00401169  3BF0                CMP      ESI,EAX
001B:0040116B  0F85A9000000        JNZ      0040121A
                  ^^^^^^^^^^^^^^^^^^^^^^^------>比较user/code
                                 输入的个数是否相等
                                 相等就继续    
001B:00401171  6860214000          PUSH      00402160
001B:00401176  6A08                PUSH      08
001B:00401178  6A0D                PUSH      0D
001B:0040117A  6A03                PUSH      03
001B:0040117C  FF7508              PUSH      DWORD PTR [EBP+08]
001B:0040117F  E8F4010000          CALL      USER32!SendDlgItemMessageA
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->取的USER 放入402160    
001B:00401184  6879214000          PUSH      00402179
001B:00401189  6A10                PUSH      10
001B:0040118B  6A0D                PUSH      0D
001B:0040118D  6A04                PUSH      04
001B:0040118F  FF7508              PUSH      DWORD PTR [EBP+08]
001B:00401192  E8E1010000          CALL      USER32!SendDlgItemMessageA
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->取的CODE 放入402160
001B:00401197  B9FFFFFFFF          MOV      ECX,FFFFFFFF
001B:0040119C  41                  INC      ECX
001B:0040119D  0FBE8160214000      MOVSX    EAX,BYTE PTR [ECX+00402160]
001B:004011A4  83F800              CMP      EAX,00
001B:004011A7  7432                JZ        004011DB
001B:004011A9  BEFFFFFFFF          MOV      ESI,FFFFFFFF
001B:004011AE  83F841              CMP      EAX,41
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->41=‘A’                 
001B:004011B1  7C67                JL        0040121A
001B:004011B3  83F87A              CMP      EAX,7A
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->7A=‘z’
001B:004011B6  7762                JA        0040121A
001B:004011B8  83F85A              CMP      EAX,5A
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->41=‘Z’
001B:004011BB  7C03                JL        004011C0
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->这几句代码是判断
                                USER是否输入了字符                    
001B:004011BD  83E820              SUB      EAX,20
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->全部转化为大写
001B:004011C0  46                  INC      ESI
001B:004011C1  0FBE9617204000      MOVSX    EDX,BYTE PTR [ESI+00402017]
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->在402017表相对应的
                                位置
001B:004011C8  3BC2                CMP      EAX,EDX
001B:004011CA  75F4                JNZ      004011C0
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->表中找到后在去另一
                                40203C表去寻找对应
                                的值。
001B:004011CC  0FBE863C204000      MOVSX    EAX,BYTE PTR [ESI+0040203C]
001B:004011D3  898194214000        MOV      [ECX+00402194],EAX
001B:004011D9  EBC1                JMP      0040119C
:d 402017
0023:00402017 41 31 4C 53 4B 32 44 4A-46 34 48 47 50 33 51 57  A1LSK2DJF4HGP3QW
0023:00402027 4F 35 45 49 52 36 55 54-59 5A 38 4D 58 4E 37 43  O5EIR6UTYZ8MXN7C
0023:00402037 42 56 39 00                       BV9.

:d 40203c
0023:0040203C 53 55 37 43 53 4A 4B 46-30 39 4E 43 53 44 4F 39  SU7CSJKF09NCSDO9
0023:0040204C 53 44 46 30 39 53 44 52-4C 56 4B 37 38 30 39 53  SDF09SDRLVK7809S
0023:0040205C 34 4E 46 00                       4NF.


001B:004011DB  FF35AF214000        PUSH      DWORD PTR [004021AF]
001B:004011E1  6894214000          PUSH      00402194
001B:004011E6  6879214000          PUSH      00402179
001B:004011EB  E854000000          CALL      00401244
                  ^^^^^^^^^^^^^^^^^^^^^^----->比较子程序
                                  转换后的值与CODE相比较

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
比较程序代码:(虽然简单,但是有漏洞哦!:) 呵呵~~~ )
        当USER为一个字母的时候,CODE可以为任意字符 :)
        可以试一下 user:a /code:= 是可以的!!
        想一想,关键就在这个JCXZ      00401260的判断
        不知道是作者故意的,还是BUG,自己去想吧 呵呵~~~~~~
:u 401244 L20
001B:00401244  C8000000            ENTER    0000,00
001B:00401248  B801000000          MOV      EAX,00000001
001B:0040124D  8B7D08              MOV      EDI,[EBP+08]
001B:00401250  8B750C              MOV      ESI,[EBP+0C]
001B:00401253  8B4D10              MOV      ECX,[EBP+10]
001B:00401256  F3A6                REPZ CMPSB
001B:00401258  67E305              JCXZ      00401260
001B:0040125B  B800000000          MOV      EAX,00000000
001B:00401260  C9                  LEAVE
001B:00401261  C20C00              RET      000C
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


001B:004011F0  83F801              CMP      EAX,01
001B:004011F3  0F84DEFEFFFF        JZ        004010D7
001B:004011F9  EB1F                JMP      0040121A
001B:004011FB  837D1001            CMP      DWORD PTR [EBP+10],01
001B:004011FF  0F8422FFFFFF        JZ        00401127
001B:00401205  837D1002            CMP      DWORD PTR [EBP+10],02
001B:00401209  752F                JNZ      0040123A
001B:0040120B  E8B4000000          CALL      KERNEL32!ExitProcess
001B:00401210  B801000000          MOV      EAX,00000001
001B:00401215  E9FFFEFFFF          JMP      00401119
001B:0040121A  6800200000          PUSH      00002000
001B:0040121F  6801204000          PUSH      00402001
001B:00401224  68AE204000          PUSH      004020AE
001B:00401229  6A00                PUSH      00
001B:0040122B  E836010000          CALL      USER32!MessageBoxA
001B:00401230  B800000000          MOV      EAX,00000000
001B:00401235  E9DFFEFFFF          JMP      00401119
001B:0040123A  B800000000          MOV      EAX,00000000
001B:0040123F  E9D5FEFFFF          JMP      00401119 

                      下一步,如果按Crackme的要求是让我们写一个KEYGEN,俺天性就是懒懒懒.......于是
想出个馊主意,把增加代码把这个Crackme本身变成一个KEYGEN,孙悟空七十二变 呵呵~~~~~~~~

      步骤如下:
      1、先用TOPO软件定位我们加入代码的位置
      2、用HIEW来修改程序。

     用TOPO V1.2来玩一玩!首先在SCAN选项中选取 EXEC ONLY,是扫描代码段中有没有空
余的地方,增加我们要加入的代码。OPEN文件 due-cm4.exe 发现有285个字节可以利用。找个吉
利的数88,好!利用88个字节进行修改程序,程序定位在内存中位置为4014e3  物理位置为AE3。


        我们想达到的目的是当程序判断我们的CODE是错误的时候,让程序本身跳出一个对话框
来告诉大家正确的CODE :)
        首先,我们确定那里是合适加入代码的地方??很关键哦!我们找啊找,找到一个好
朋友 呵呵~~~~~
       
比较程序代码:
:u 401244 L20
001B:00401244  C8000000            ENTER    0000,00
001B:00401248  B801000000          MOV      EAX,00000001
001B:0040124D  8B7D08              MOV      EDI,[EBP+08]
001B:00401250  8B750C              MOV      ESI,[EBP+0C]
001B:00401253  8B4D10              MOV      ECX,[EBP+10]
001B:00401256  F3A6                REPZ CMPSB
001B:00401258  67E305              JCXZ      00401260
001B:0040125B  B800000000          MOV      EAX,00000000
                  ^^^^^^^^^^^^^^^^^^^^^^^^---->修改这句代码,
                            jmp 4014e3
                            而且非常的巧,代码长度一样    
001B:00401260  C9                  LEAVE
001B:00401261  C20C00              RET      000C

    ok let's go goo! 运行HIEW(真是一个酷B的软件),打开due-cm4.exe.
    按F4可以改变显示模式,选择DECODE。找到上面的代码
    按F3可以修改代码,按F2为切换到ASM模式。输入 JMP 0AE3(注意了这里的跳转地址为
物理地址)
    按F9存盘哦!
    按F5 可以GOTO  输入AE3!!
    在AE3处输入
内存地址    物理地址    代码 
4014E3        AE3          mov esi,[ebp][0000C]
4014E6        AE6          push 0
4014E8        AE8          push 4014FF
4014ED        AED         push esi
4014EE        AEE         push 0
4014F0        AF0         call  966
4014F5        AF5         mov eax,0
4014FA        AFA          jmp 860
        存盘
    按F4切换到HEX模式下,输入
4014FF            AFF  Correct Code:  (Edit by ddxia) 00
                            ^^^-->注意在HEX方式下输入    
    赶紧去试一试:)
    哎哟!差点忘了,再把以下这段消息
    Your registration info is invalid... Note that most.....
    改为:请输入小于等于8个字符的USER名(不能包括数字)CODE的长度要和USER的一样 00

    终于修改完了,好累啊!懒人经常走弯路。    

    啊!小子,没有完呢?想丢笔去HAPPY  呵呵~~~~~
    我们来弄明白这为什么要这样改???
内存地址    物理地址    代码 
4014E3        AE3          mov esi,[ebp][0000C]  ;把正确的CODE放入ESI
4014E6        AE6          push 0                      
4014E8        AE8          push 4014FF              
4014ED        AED         push esi         
4014EE        AEE         push 0
4014F0        AF0         call  966          ; CALL MESSAGEBOX         
4014F5        AF5         mov eax,0          ; 恢复被我们修改的代码
4014FA        AFA          jmp 860              ; 跳回LEAVE的位置

    看看WINAPI.HLP中的MESSAGEBOXa,需要什么参数

    int MessageBox(

        HWND hWnd,        // 窗口句柄     0------>缺省
        LPCTSTR lpText,        // 内容的地址    ESI---->CODE
        LPCTSTR lpCaption,    // 标题的地址     4014FF->我们加进的一串字符
        UINT uType         // 对话框的类型  0------>普通类型,只有一个OK按钮
      );    

    然后我们研究一下为什么是CALL 966 ??这个嘛!呵呵~~~~ Let's see
    40122b     call 401366        ---->当按F3 它就会变成call 966知道为什么了吧 :)
    401366  jmp messageboxa
    
    再来看一看 jmp 860 860又什么东东?:) 这个卖个关子了 呵呵!!
    (提示:按F5 输入860,回车,你就明白了 哈哈~~)
    
    终于写完了,怎么还没有人CALL我的,看来今天晚没有时间去HAPPY了,要整理整理我的
站点了 (遭到投诉了 呵呵~~~~~) 
                
    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程