破解注冊程序流程
========
寫的不好大佬勿噴!!!!
首先寫個小易語言,易語言寫起來方便就寫了易語言的注冊程序,c語言調用winapi寫窗口類有點麻煩就采用易語言
按鈕源碼
在這個位置我們看一個我們寫的注冊程序的驗證流程:
|
|
1.點擊注冊按鈕
|
|
2.讀取注冊碼
|
|
3.判斷注冊碼合法性
|
|
4.返回結果
|
我們把程序放入OD
首先我們現收悉一下OD的界面(因為我也剛入門逆向不久,我只能用我的理解去寫可能不太權威,大佬勿噴)
我們看注冊碼的驗證流程,我們先更讀注冊碼的函數在易語言中常回調GETwindowTextA函數進行讀取
CTRL+G輸入我們跟蹤的表達式
這個是我們匯編指令的函數頭也就是GETWindowTextA函數的函數頭
我們在這下個斷點,讓程序跑起來
ok我們看到在這里我們點擊一下程序,程序就崩潰了,我們最終要的是在他讀取的時候斷下來而不是讓他一直斷在這,那這時我們怎么辦呢我們就需要下個條件斷點,那我們該怎么下呢,我們先看堆棧,我們定位到函數GETWindowTextA這個函數我們看一下它的幾個參數
這個001A186C就是它的句柄號,它是讀取的注冊的這個標簽的內容顯然不是我們要的效果,我們要的效果是讀取編輯框的內容后停下,那我們可以這么下,我們看esp寄存器,我們每次保存的位置都是棧頂esp這個位置,下面的位置為esp+4也就是它的第一個參數
我們就可以下這樣的條件斷點我們要讓他不等於這個句柄號的時候停下來因為我們每次斷的時候都是句柄為這個值的時候斷下來,所以我們讓他不等於這個的時候再段我們下的條件斷點就為esp+4不等於這個句柄號的時候才斷,shlft+f2下條件斷點
下完條件斷點的時候我們再跑一下是不是沒有斷的現象了,可以正常輸入了我們點一下注冊就正常斷下了,這個位置就是在讀取編輯框內容的時候斷下,我們接下去走,走到我們的彈窗位置,因為我們走到彈窗位置我們網上跟就能看到它的驗證那一塊
,我們用自動步過,ctrl+f8
在這個位置又進行了讀取這個我們不管,我們接着跑
ok我們到這個位置程序彈出了注冊失敗我們網上跟上去看斷點,我們發現一個call這個call可能是成功信息call,我們接下來往上定位看到函數頭下個斷點,把條件斷點去掉,然后我們跑一遍,我們在函數頭斷下,f8單步跳,發現一個大跳轉,這個位置是個關鍵跳我們在這下個斷點,跑一編,斷的這個位置就是jcc指令也就是我們的if判斷語句,我們在這個位置有兩個方法進行破解
第一個我們使用二進制nop填充也就是不執行if語句,直接往下走
第二個
我們就是在寄存器上操作,因為我們的jcc指令是在我們的efl寄存器je跳轉是看zf標志位我們把zf標志位強行修改,修改之后它就不進行跳轉讓他強行往下執行
最簡單的爆破就實現了