一個簡單的逆向

首先運行程序觀察程序的提示信息 可以看到程序首先
程序運行圖
一個字符串提示 隨便輸一個 ,出現另一個字符串u r wrong
然後
OD載入程序,字符串查找
這裏寫圖片描述
看到提示的字符串,單擊進入f2 下段點,運行程序,斷在
單步 跟下來
這裏寫圖片描述
讀取字符函數getch() 隨便輸入一個假碼,
這裏寫圖片描述
eax 的值正是輸入的假碼ascii的碼,可以看出這是一個存儲的過程
這裏寫圖片描述
繼續單步向下
這裏寫圖片描述
輸出函數printf
這裏寫圖片描述
向上 跳了回去 這是一個輸入的過程 沒有不是關鍵的比較算法,直接在下一句,下斷直接 運行過去
這裏寫圖片描述
這個比較 多次調試,可以發現這是一個字符長度的比較 然後 看來這個註冊碼的長度是17位
這裏寫圖片描述
這塊就能看出這個程序的算法,很簡單就是在12feb4地址開始每個四個字節,讀取一個數,在後面字符串swfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138
中以上面地址的數爲下標檢索字符串
剩下的寫python腳本
這裏寫圖片描述

跑出來感覺有點不對,放到程序裏運行一個果然不對 ,
重新載入OD ,運行,之前的算法確實是的
這裏寫圖片描述
向後才發現還有比較 跟蹤一下地址發現這個字符是在我們輸入的字符之後
看來這後面還有一些字符,
這裏寫圖片描述
根據比較,可以看出來剩下的幾個字符就是那幾個ascii碼,就是1024}
到此就搞定了
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章