這小節是通過斷在GetPrivateProfileStringA,然后找到注冊碼的。
?
1.運行程序
輸入假碼111111,提示重啟。通過這判斷這是一個重啟來驗證的,那么它是如何來驗證的呢?觀察程序目錄下會發現有一個名為“config.ini"的文件
?
?
那么判斷是通過讀取ini文件來進行驗證的。所以可以在GetPrivateProfileStringA處下斷點,在它讀取了ini中的注冊碼后,必然會與真碼進行比較,那么我們就可以找到真碼了。載入OD
?
下API斷點:GetPrivateProfileStringA。這次是在這里設置斷點:
?
?
?
運行程序,斷下來
?
?
?
?
此時,就位于了GetPrivateProfileStringA函數里面。這里記錄一下,我們利用這個斷點,是因為這個軟件是有殼,我們為了進入用戶領空進行操作,所以利用了這個斷點。
?
現在我們要脫離系統領空,進入程序領空,就用不到這個函數斷點了。
?
所以Alt+F9返回到用戶代碼去。
?
?
?
?
?
?
?
觀察匯編代碼
?
從系統空間返回程序了,可是這里沒什么關鍵跳,也沒再寄存器窗口里看到可疑的字符串。只好一路F8直到retn。
跳出了上個call后,還是沒發現什么。只好繼續F8了。不久,就又斷在了GetPrivateProfileStringA處,還是老辦法Alt+F9返回到用戶代碼去。
返回用戶空間后,只好繼續F8。F8的過程中,觀察堆棧和寄存器,不久就會出現這個:

?
?
可疑字符串出現了,感覺都復制出來,一一試驗一下。
?
?
經測試我們找到了真碼
?
?