逆向入门--简单win32CK逆向手记
最近入坑逆向不就,這個(gè)算是真正意義上的第一個(gè)CrackMe遂記錄逆向過程
初觀界面
一個(gè)經(jīng)典的輸入密碼并驗(yàn)證的小程序,先直接運(yùn)行!
隨便的輸入密碼,顯然不對,彈框 incurrent 的提示框
開始分析
直接拖入OD,搜索工具搜索 Incurrent 這個(gè)字符串
跟著搜索結(jié)果,找到Ctrl+G 找到內(nèi)存位置
在這里我們找到了真相,可以通過反匯編窗口很簡單的看到這個(gè)。
這段看著邏輯簡單清晰,通過 je 跳轉(zhuǎn)到 inCurrent 的MsgBox,
爆破點(diǎn)Found!
那么我們通過直接修改寄存器,或者修改匯編指令成為jnz即可實(shí)現(xiàn)對程序的爆破,效果如下
深入分析
因?yàn)檫@個(gè)CrackMe是要求拿到用戶名和密碼的,所以爆破實(shí)現(xiàn)是不行的,那么繼續(xù) 讀代碼
je的跳轉(zhuǎn)是由于 FZ 這個(gè)標(biāo)志位被置 1 所以發(fā)生跳轉(zhuǎn),那么我們向上找代碼,看看在哪里這個(gè)寄存器位被置一
由于截圖問題哈,這個(gè)關(guān)鍵一句沒接上。。。
cmp bx,si
這一句就是比較ebx的地位,和esi寄存器的低位,從而根據(jù)結(jié)果設(shè)置了標(biāo)志位
再往上,我可可以看到 OD 自動注釋的關(guān)鍵代碼,紅色的_vbaVarCmpEq更是說明了一切,很顯然是個(gè)字符串比較的調(diào)用
__vbastrcomp 比較兩個(gè)字符串,類似于 Window’s API lstrcmp
然后查詢函數(shù)的refer,得到上述的描述。
重要知識回顧 : 函數(shù)是從右往左壓棧的,所以最先壓入的,是最后一個(gè)參數(shù),然后是倒數(shù)第二個(gè)。
這里,在面的寄存器信息提示窗里面,已經(jīng)顯示出了這個(gè)壓入棧的地址對應(yīng)的Unicode的字符串,正是我們輸入的“密碼”
然后Call 這個(gè)函數(shù)進(jìn)行Cmp的比較
其實(shí)這里使用了一個(gè)投機(jī)取巧的方法,cmp 既然是比較那么 比較源,和比較目的必然是在棧中存放,那么咱們找找就好
果然不如所料,在這里就找到了咱們的用戶名密碼
激動的試一試
bingo!
結(jié)果如圖
小結(jié)
作為自己 的第一次 的CK 雖然不是很完美,但是也算是勉強(qiáng)成功
特別是函數(shù)壓棧這一塊,也是提升了自己的認(rèn)知
- 從右向左壓棧
- 返回值永遠(yuǎn)在eax里
- 對于win32程序有時(shí)候寄存器不夠返回值存儲,那么后面會壓入一個(gè)returnBuffer
總結(jié)
以上是生活随笔為你收集整理的逆向入门--简单win32CK逆向手记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VB程序逆向常用的函数
- 下一篇: Windows 全局钩子 Hook 详解