• 标 题:duelist crackme 1 破解 (5千字)
  • 作 者:丁丁虾
  • 时 间:2000-10-16 19:50:47
  • 链 接:http://bbs.pediy.com

duelist crackme 1 破解      (希望转载的时候保持完整)

作者    丁丁虾  ddxia/[CCG]
目标     duelist crackme 1
目标URL    http:\\go.163.com\~ddxia\crackme\DueList\Due-cm1.zip
工具          SoftIce4.01 for NT
乐趣            可以直接修改程序代码,得到序列号(懒人方法)^_^

    首先看看它的readme.txt(建议在Crack Crackme前,读一读,会有些帮助的),是 Duelist写的第一个纯ASM的Crackme。
    运行,会发现它需要一个序列号,别忙下中断,看看是那一种出错信息,随便填下123,然后按check按钮,会弹出一个出错对话框!然后按OK返回主程序。
    对症下药啦!:)
    Ctrl+D 激活SICE
    BPX MESSAGEBOXA
    Ctrl+D 返回程序。
    再按check按钮,就会拦截下来,跟着按F11跳出MESSAGEBOXA的系统代码(有点象TRW的Pmoudle),光带会停在001B:00401193
001B:0040117D  6800200000          PUSH      00002000
001B:00401182  6801204000            PUSH      00402001
001B:00401187  6863204000            PUSH      00402063
001B:0040118C  6A00                        PUSH      00
001B:0040118E  E85C010000          CALL      USER32!MessageBoxA
001B:00401193  E95CFFFFFF          JMP      004010F4
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^---->光标会停在此处
    有了结果,于是我们很想去知道原因是为什么?对吗?所以我们要回顾一下历史,(是啊!在代码的历史中,永远都不会过期,可以追寻,可以重新来过,也可以重头来过,但在现实中,历史永远是历史,现在的我们只能是回忆、留恋,如果想在你的历史长河里留下精彩瞬间,请把握好今天吧!!)

    简单注册方式:得到代码------》进行变化-----》然后进行比较----》对否?
                    我们可以看到如下的代码:
001B:004010FB  6A24                          PUSH      24
001B:004010FD  68F7204000              PUSH      004020F7
                      ^^^^^^^^^^^^^^^^^^^^^^^^----->GetDlgItemTextA是存放你输入注册码的地方            
001B:00401102  6A01                            PUSH      01
001B:00401104  FF7508                        PUSH      DWORD PTR [EBP+08]
001B:00401107  E855020000              CALL      USER32!GetDlgItemTextA
                      ^^^^^^^^^^^^^^^^^^^^^^^^----->得到注册码    
001B:0040110C  33C0                          XOR      EAX,EAX
001B:0040110E  80B8F720400000      CMP      BYTE PTR [EAX+004020F7],00
                      ^^^^^^^^^^^^^^^^^^^^^^^^----->比较是否输入?
001B:00401115  7418                              JZ        0040112F
001B:00401117  80B0F720400043      XOR      BYTE PTR [EAX+004020F7],43
001B:0040111E  80B0F72040001E      XOR      BYTE PTR [EAX+004020F7],1E
001B:00401125  80B0F720400055      XOR      BYTE PTR [EAX+004020F7],55
                      ^^^^^^^^^^^^^^^^^^^^^^^^----->进行注册码变化
001B:0040112C  40                          INC      EAX
001B:0040112D  E2DF                    LOOP      0040110E
001B:0040112F  83F800                  CMP      EAX,00
001B:00401132  7518                      JNZ      0040114C
                ^^^^^^^^^^^^^^^^^^^^^^^^----->转化完没有??
001B:00401134  6800200000          PUSH      00002000
001B:00401139  6801204000          PUSH      00402001
001B:0040113E  689D204000          PUSH      0040209D
001B:00401143  6A00                        PUSH      00
001B:00401145  E8A5010000          CALL      USER32!MessageBoxA
001B:0040114A  EBA8                    JMP      004010F4

001B:0040114C  6A24                      PUSH      24
001B:0040114E  68D3204000          PUSH      004020D3
001B:00401153  68F7204000          PUSH      004020F7
001B:00401158  E864000000          CALL      004011C1
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->进行比较的子程序
001B:0040115D  83F800                  CMP      EAX,00
                  ^^^^^^^^^^^^^^^^^^^^^^^^----->是否正确??
001B:00401160  741B                      JZ        0040117D                (JUMP )
001B:00401162  6800200000          PUSH      00002000
001B:00401167  6801204000          PUSH      00402001
001B:0040116C  6817204000        PUSH      00402017
001B:00401171  6A00                      PUSH      00
001B:00401173  E877010000          CALL      USER32!MessageBoxA

    我们可以注意到两个地址
    一个是    004020D3  -----存放着进过变化的注册码
    另一个是004020F7  -----用输入的注册码
:d 4020d3 4020f5
0023:004020D3 7B 61 65 78 64 6D 26 6B-7A 69 6B 63 65 6D 26 3C  {aexdm&kzikcem&<
0023:004020E3 26 66 6D 7F 6A 61 6D 7B-26 6A 71 26 6C 7D 6D 64  &fmjam{&jq&l}md
0023:004020F3 61 7B 7C 00 31 32 33 00-00 00 00 00 00 00 00 00  a{|.123.........
    
    程序进行变化的代码仅仅是XOR,一种非常简单加密方法,有BUG呵呵~~~~,于是用SICE修改代码为如下:
001B:0040110E  80B8D320400000      CMP      BYTE PTR [EAX+004020D3],00
001B:00401115  7418                              JZ        0040112F
001B:00401117  80B0D320400043      XOR      BYTE PTR [EAX+004020D3],43
001B:0040111E  80B0D32040001E      XOR      BYTE PTR [EAX+004020D3],1E
001B:00401125  80B0D320400055      XOR      BYTE PTR [EAX+004020D3],55
                    仅仅是把这四句中的004020F7换为004020D3,即修改F7为D3,然后让程序再运行一遍,呵呵~~程序会自动显示正确注册码!赶紧抄下来!
0023:004020D3 73 69 6D 70 6C 65 2E 63-72 61 63 6B 6D 65 2E 34  simple.crackme.4
0023:004020E3 2E 6E 65 77 62 69 65 73-2E 62 79 2E 64 75 65 6C  .newbies.by.duel
0023:004020F3 69 73 74 00 31 32 33 00-00 00 00 00 00 00 00 00  ist.123.........
                    退出程序,重新运行,输入simple.crackme.4.newbies.by.dueist,OK 收工 :D
               
总结:在Crack中,可以发挥自己的主观能动性(哗!上青少年修养课啊!我倒.........) 发挥想象力,不需要居伲于哪一种方法,尽管去发挥。Crack的精华之处在于不断的探索和创新!
            
                        时间:2000.10.16 19:45
                        提议:该回家,爱护一下自己的胃了 :)