duelist crackme 1 破解 (5千字)

看雪資料發表於2000-10-16

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
                        提議:該回家,愛護一下自己的胃了 :)

相關文章