查殼後程式是一個32位無殼的程式
拉到od和ida中分析一下
經過分析,
首先分析第一個字串比較的call
取字串的第一個字元,迴圈字串n次(n為字串的長度),將第一個字元相加n次,然後這個值=550也就是0x226
所以這裡只要滿足 字元*n=550 就可以,經過後面的分析這裡n需要填10(見下文)
也就是 7開頭長度為10 的字串
接下來除錯程式
在段首004010770地址下個斷點(ida中main函式開頭的地址)
我們一路單步(F8)來到這裡,這裡必須跳轉(可以修改標誌暫存器的S位改變是否跳轉),不然程式是不會進行字串比較的
下面那個call就是進行字串比較的call了
我們單步(F7)進入,發現這裡面有兩個跳轉
第一個jnz就是==550的判斷
第二個jnz是字串是否相等的判斷
對應ida中
這裡我們看到一串類似base64的字串
搜尋字串看一下
猜測這裡他自定義了base64編碼表
解密得到
因為這裡解密到的長度是10,所以上面的n才為10,不然加密後的字串長度是不夠的
此時我們測試一下,
當演算法call執行完成後我們修改字串為 上面解密到的,我們看能不能成功
在記憶體視窗中修改後
然後來到字串比較的地方
我們可以看到要進行比較的兩個字串是一樣的
所以現在
只需要讓我們輸入的字串經過演算法call後等於 =>=:<2>?=2
然後分析一下演算法的call
演算法call裡主要就是這個call,然後這個call執行了4次,我們點進去
分析
第一次執行的是4
第二次1
第三次2
第四次3
此時只需要將 =>=:<2>?=2 反推回來
也就是
先每一位+1,再除啦第一位後面每一位-3,再每一位xor9 就可以了
然後寫指令碼