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