題目說明
該題目由en1code.exe一個文件組成淌实。該文件是一個簡單的加密程序募逞,如果你輸入了一個正確的字符串,它將返回給你一個加密后的字符串cip驱显。
請大家運行該程序诗芜,并獲得cip即為成功。如果你不知道應該怎么辦埃疫,請看看你有沒有裝debug工具伏恐?
解題步驟:
1. 打補丁
修改一下條件語句
這樣就可以直接跳過判斷的部分
2. 逆向工程
由于之前出現(xiàn)問題的點就在于Test al,al后的JE分支判斷
我們就看一下之前修改過Al的部分,判斷al是0還是非0(那么也就是說栓霜,我只有將al設為非零才可以通過)我們看到最近的call指令前翠桦,有一個將eax向外賦值的操作,所以推斷在call en1code.0040139D中對eax進行了修改胳蛮。
我們跳到相關子程序部分销凑,看到在004013CE部分進行了對eax賦零的操作,正確的路徑應該是跳過著一條語句仅炊。我們往上看會發(fā)現(xiàn)闻鉴,只要004013c2語句應該cmp生成0:這就需要eax(dword ptr ss:[ebp-C])和dword ptr ss:[ebp-10]相等。
從子程序的開頭出茂洒,可以看到dword ptr ss:[ebp-10]被賦值為0A(10)。我們看一下004013B7的子程序
其他位置導致的no Wrong lenth…輸出瓶竭,所以意味著字符串長度應為10