2010年2月26日 星期五

OllyICE 4 PassWord hack

  1. OllyICE 可以模擬X86的Machine code,藉由Assembly的分析,找出斷點跟Register的status,達到PassWord hack. OllyICE支援軟體除錯、脫殼、分析算法 ... (破解) Ref http://forum.slime.com.tw/thread224674.html 詳細說明文件請上網google
  2. 這邊我們就以最簡單的方式來做教學, sample code 判斷輸入的值是否為 "1234", 確定就Pass.
  3. 打開OllyICE, 載入a.exe檔,因為我是用Cygwin內的gcc compiler出來的,所以要加入Cygwin的路徑,不然會fail,如果你是在Dos底下,請把Sample code抓回去,自己重新compiler一次. a.exe : 自行complier,THX sample code : http://sites.google.com/site/funningboy/perl_code/guess.c?attredirects=0&d=1
  4. 先按F9 run 一次,猜猜看程式的架構,發現會斷在 0040114E . /0F84 9C010000 je 004012F0 在console會出現input password的字樣. 就先隨便打入猜一下輸入的格式. 發現只要是chart的型態會出現無窮回圈,如果全int會跳過,表示輸入的PassWord是0~9的數字組合.
  5. 再透過查找關鍵字的方式,回推出Program所在的Address區段 按右鍵 search for -> all referenced text strings , 發現關鍵字, Pass Ok.得知記憶體的區段位置
  6. 再回到Assembly code的位置,發現 00401089 . 817D FC D2040>cmp dword ptr [ebp-4], 4D2 ; 要經過cmp才能夠往下走,所以在cmp這邊做斷點check.如果Pass,就會走到 00401092 . C70424 332040>mov dword ptr [esp], 00402033 ; ASCII "Pass Ok",LF. 所以我們就拿4D2當作input PassWord看看,發現可以走道Pass OK. 而4D2轉成10進位得1234,就大概可以猜出是否是PassWord. 或者是改JP的位置,直接跳過Check到PassOk,如果能直接跳到Pass Ok,就表示在Check的loop一定是輸入Pass Word的地方.
  7. 關掉OllyICE,重新打開a.exe,輸入1234就OK了 Ref: http://www.pediy.com/

沒有留言:

張貼留言