該提不簡單
阿新 • • 發佈:2017-10-29
壓縮包 鏈接 fin nba counter 要求 註釋 pac pytho
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
無語了,想給你們制造點懸念都沒有了,哎!直接去做題吧
解題鏈接: http://ctf5.shiyanbar.com/crack/3/
關鍵字:
破解 逆向 調試
破解[crackme1.zip](http://ctf5.shiyanbar.com/crack/3/CrackMe1.zip)壓縮包的程序
要求:請找出用戶名為hello的註冊碼
下載並解壓題目提供程序
嘗試運行程序 :
Paste_Image.png
Paste_Image.png
發現輸入錯誤的時候會有一個 AlertDialog 彈出 , 提示 "密鑰無效"
首先使用 bash 的 file 工具查看一下文件類型 :
Paste_Image.png
CrackMe1.exe: PE32 executable (GUI) Intel 80386, for MS Windows
打開 IDA , 載入該程序 , 由於我們之前運行該程序的時候註意到了關鍵字符串 "密鑰無效"
這時可以通過搜索定位 "密鑰無效"
Paste_Image.png
雙擊後面的註釋跳轉到 圖形視圖
Paste_Image.png
這裏調用了這個函數 : sub_4011D0
當返回值不為 0 的時候 , 就跳轉到 密鑰無效
的分支
我們繼續查看這個函數 : sub_4011D0
直接 f5 反編譯為 C代碼
Paste_Image.png
Paste_Image.png
通過分析可以知道 , 這段代碼會將用戶輸入的用戶名的每個字符遍歷一遍
把每個字符的序號(從 0 開始算)與這個字符的ASCII碼的平方相乘 , 然後整體再加上序號 , 得到的和繼續對 0x42 求余 , 最後將結果加上 33 , 然後再轉為ASCII碼
然後再將上述結果連接在字符串 ‘Happy@‘ 之後構成註冊碼
分析清楚了思路 , 然後就是寫註冊機
#!/usr/bin/env python
username = "Hello"
counter = 0;
password = "Happy@"
for i in username:
password = password + chr((counter + counter * ord(i) * ord(i)) % 0x42 + 33)
counter = counter + 1
print(password)
運行後結果為 :
Paste_Image.png
得到 hello 用戶的註冊碼為 : Happy@!GA0U
Paste_Image.png
作者:王一航
鏈接:http://www.jianshu.com/p/6e7396cdb0f1
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
該提不簡單