剛接觸這題有點蒙蔽,做了好長時間才搞懂 以后給自己個提議首先尋找比較函數 就是說先找到那個strcmp因為往往這個地方就是判斷你輸入的序列號對不對的地方 接著在這里找到生成的序列號之后去找算法,算法往往在此之前。
發現沒有注冊按鈕 首先來PEID
沒有殼 首先用OD調試,沒有跳出什么輸入錯誤之類的東西,所以沒有CMP不好調試 利用dede反編譯工具 
看到有幾個函數 chkcode
下斷點
找到了一個serial
那么生成算法就在上面了 找吧同時發現了一些貓膩 首先找到了黑頭,并且已經入棧了
5 和字符串也已經入棧了 哈哈哈
name 入棧 萬事具備只差東風
接下來的 strcat 函數下斷點 估計是把以上字符串粘貼在一起吧
單擊界面中間的矩形陰影 每次都會且只會在Panel1Click事件斷下:
Panel1Click事件 這里寫圖片描述
在chkcode事件中我們知道,如果注冊碼正確,內存[ESI+30C]被賦值0x3E,否則內存[ESI+30C]等于0,顯然都不等于0x85,因此0x0045803B處的指令會發生跳轉,程序結束,就像什么也沒發生。 顯然,要讓0x0045803B處的指令不跳轉,那么內存[ESI+30C]的值就必須是0x85,所以應該還有其他地方會對[ESI+30C]進行寫操作。 雙擊界面中間的矩形陰影 每次都會依次在Panel1Click、Panel1DblClick和chkcode三個事件斷下,我們來看看雙擊事件:

在chkcode事件中我們知道,如果注冊碼正確,內存[ESI+30C]被賦值0x3E,否則內存[ESI+30C]等于0; 因此,若是注冊碼正確,內存[ESI+30C]會再次被賦值為0x85,否則內存[ESI+30C]依舊等于0。 答案依舊很明顯了
內存[ESI+30C]初始值為0;若是注冊碼正確,在chkcode事件中,內存[ESI+30C]被賦值0x3E,在Panel1DblClick事件(雙擊矩形陰影進行觸發)中被進一步賦值0x85,從而在Panel1Click事件(單擊或雙擊矩形陰影進行觸發)中0x0045803B處的指令就不會發生跳轉,從而反饋注冊成功的信息,最后界面的矩形陰影會被一幅照片取代。 如果要爆破,只需將0x0045803B處的跳轉指令NOP掉即可。
注冊機
# coding=utf8s = raw_input("name:")新聞熱點
疑難解答