天天看點

一個簡單的逆向

首先運作程式觀察程式的提示資訊 可以看到程式首先

一個簡單的逆向

一個字元串提示 随便輸一個 ,出現另一個字元串u r wrong

然後

OD載入程式,字元串查找

一個簡單的逆向

看到提示的字元串,單擊進入f2 下段點,運作程式,斷在

單步 跟下來

一個簡單的逆向

讀取字元函數getch() 随便輸入一個假碼,

一個簡單的逆向

eax 的值正是輸入的假碼ascii的碼,可以看出這是一個存儲的過程

一個簡單的逆向

繼續單步向下

一個簡單的逆向

輸出函數printf

一個簡單的逆向

向上 跳了回去 這是一個輸入的過程 沒有不是關鍵的比較算法,直接在下一句,下斷直接 運作過去

一個簡單的逆向

這個比較 多次調試,可以發現這是一個字元長度的比較 然後 看來這個注冊碼的長度是17位

一個簡單的逆向

這塊就能看出這個程式的算法,很簡單就是在12feb4位址開始每個四個位元組,讀取一個數,在後面字元串swfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138

中以上面位址的數為下标檢索字元串

剩下的寫python腳本

一個簡單的逆向

跑出來感覺有點不對,放到程式裡運作一個果然不對 ,

重新載入OD ,運作,之前的算法确實是的

一個簡單的逆向

向後才發現還有比較 跟蹤一下位址發現這個字元是在我們輸入的字元之後

看來這後面還有一些字元,

一個簡單的逆向

根據比較,可以看出來剩下的幾個字元就是那幾個ascii碼,就是1024}

到此就搞定了

一個簡單的逆向

繼續閱讀