|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-01-19, 03:40 PM | #1 |
管理版主
|
密碼輸入破解教學
因為放假的關係
所以最近都沒有人提問題的說... (好無聊在yahoo混也只能一天回8則) 因此 這裡來一篇最簡單的 密碼輸入破解教學 使用的工具有: . OllyDbg v1.10、 . 自己用 C++寫的一個 密碼Pass判斷程式、 . Windows XP小算盤,請切換到工程模式、 . Dev-C++ C++程式如下 PHP 語法:
.先將上述C++編譯成 .exe檔 .接著開啟 OllyDbg(以下用OD簡稱OllyDbg) 將 .exe檔拖進去 在此先做簡單的 OD介紹 可以看到一些 OD所分析出的 迴圈 結構 (如:圖一 之 綠色框框 皆是) 好∼接著不多說 我們按下播放鍵(也就是執行鍵或 鍵盤F9)執行一次 如預料中(程式設計成) 你可鍵入5個數字鍵密碼 不是 password就會清除畫面要求重新輸入 此時我們再鍵入一次 4個數字鍵的密碼 回到 OD 按下暫停鍵(或著 鍵盤F12) .接著按住 F8或 F7 來步進執行 (兩著差別在 F8:反光條所指的指令到此已執行完成,F7:則是反光條所指的指令 還未執行) 可以看到程式一直在執行並跳來跳去 其中可發現有一個指令為 RETN 這是一個 "返回" 的動作 通常表示離開 副程式 所以我們就一直押著 F8 直到沒有出現 RETN 為止 (有一定的可能性 我們會碰到程式始終有 RETN 的情形,端看程式設計者的寫法而定 但在此我們不會碰到,所以不已討論例外情形) 此時會發現程式一直在一個圈子裡打鑽 判斷這很有可能是因為我們未完成程式所應達成的要求 比如 需輸入5個字但我們只輸入4個字, 還有一個可能就是 鍵盤等待輸入中(一般輸入密碼的裝置都是鍵盤) 在此教學實例中是在 以下四行中打鑽 語法:
004012DA E8 51050000 CALL <JMP.&msvcrt._kbhit> ; [_kbhit 004012DF 85C0 TEST EAX,EAX 004012E1 75 02 JNZ SHORT main.004012E5 004012E3 EB F5 JMP SHORT main.004012DA 語法:
004012E5 E8 36050000 CALL <JMP.&msvcrt._getch> ; |[_getch .接著按播放鍵繼續完成執行動作 也就是完成輸入 5個數字鍵密碼 如之前所猜測的一般: 程式跑到我們設的中斷點而自行 "暫停" 此時我們就改以按 F8 步進執行之 .一直執行下發現又回到剛剛的小迴圈了 此時看一下程式畫面果然密碼錯誤被清空了 所以我們需要放棄剛剛的中斷點 (對著該行再按一次 F2) 但 在此之前 先同上執行一次直到程式被中斷 此時取消剛剛的中斷點 .接著以一次按一下 F8方式 慢慢的看程式是如何回到 "小迴圈"的 經一行行的觀察下 主要是因為 語法:
0040132D EB 8B JMP SHORT main.004012BA 進而程式從上而下依序 一步步的跑回 "小迴圈"中 那為何會執行到這行呢? JMP 是無條件跳躍,所以我們往上看到周遭幾行 發現一個比較指令 (及條件跳躍指令) 語法:
00401324 817D F8 AE6300 CMP DWORD PTR SS:[EBP-8],63AE 0040132B 74 02 JE SHORT main.0040132F 記憶體位址 SS:[EBP-8]內的內容 與 63AE 比較 如果 等於 則跳到 main程式之 0040132F這個記憶體位址 執行 那我們就看到該位址後的程式段落 語法:
0040132F 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; || 00401332 894424 04 MOV DWORD PTR SS:[ESP+4],EAX ; || 00401336 C70424 0630400 MOV DWORD PTR SS:[ESP],main.00403006 ; ASCII 0A,"Pass word " 0040133D E8 6E050000 CALL <JMP.&msvcrt.printf> 00401342 C70424 1830400 MOV DWORD PTR SS:[ESP],main.00403018 ; ASCII "PAUSE" 00401349 E8 72050000 CALL <JMP.&msvcrt.system> 0040134E B8 00000000 MOV EAX,0 00401353 C9 LEAVE 00401354 C3 RETN 又有 00401353 C9 LEAVE 及 00401354 C3 RETN 程式結束返回等用語 (不一定會有LEAVE啦) 所以大膽假設到此 密碼判斷Pass通過而結束程式 .所以會過頭來 CMP DWORD PTR SS:[EBP-8],63AE 就是在比對密碼 在此設置中斷點 (並清除之前的中斷點) 按下播放鍵 輸入 12345 之密碼 接著程式如我們所預料的在此中斷暫停了 借由 OD所標示 (即為圖一之白框註解所在地) SS:[EBP-8] 內容是 00003039 恰巧是我們剛才輸入的值 (請用Windows XP小算盤輸入 12345 再按 "十六進位"即可得到 3039) 所以 63AE 就是密碼嘍 用小算盤翻成十進位是 25518 .當然最後就驗證看看 (為了順暢可以把中斷點清除掉) 按播放鍵 輸入 25518 ∼的確成功放行了 到此是一個簡單的密碼組合語言追蹤實驗 雖然講了很多 其實做過一次會發現一點都不難 當然在實驗外 想試著實作破解 並不是都會這麼順利 但這裡方法會了 有了觀念就只剩靈巧應用的問題了 因為是自己破自己的程式 所以不涉及市售軟體破解的衍伸問題 所以也不接受任何 軟體破解 的請求與討論 只針對這個例子作答覆 希望各位會喜歡 ~END~ 附件: (圖一 + main.exe + main.cpp) http://d.turboupload.com/d/290521/pa...ugtest.7z.html 至於 OllyDbg v1.10 請至 WWW(google) 或 emule 等搜得 (或使用其他 除錯軟體) |
送花文章: 2013,
|
向 mini 送花的會員:
|
chungwen (2007-08-17)
感謝您發表一篇好文章 |