CTF題庫>實驗吧>該題不簡單 (無語了,想給你們製造點懸念都沒有了,哎!直接去做題吧)

打開鏈接
在這裏插入圖片描述
並且下載壓縮包解壓
題目要求找到 用戶名爲hello 的註冊碼
我們運行題目 看到
在這裏插入圖片描述
會一直提示錯誤
其實在ollydbg裏面可以看到的
在這裏插入圖片描述
但是這道題還是靜態分析吧 !!!
在IDA里根據 CrackeMe 2011 # 2
可以搜索字符串找到他=它
在這裏插入圖片描述
點進去之後 發現這個函數 sub_4011D0
在這裏插入圖片描述
F5反編譯得到
在這裏插入圖片描述

GetDlgItemText函數裏面的4個參數:

第一個是句柄 API都得通過句柄操作,如果在MFC中,本項可以不寫,默認爲this
第二個爲ID,即你想要得到那個控件的ID
第三個爲TEXT值, 你得先定義一個字符串用來獲取該值
第四個爲文本最大長度
函數功能:該函數獲取對話框中與控制有關的文本或標題。

函數原型:UINT GetDlgltemText(HWND hDlg,int nlDDlltem,LPTSTR IpString int nMazCount);
這個函數主要是讀取 hello 這個傳入的用戶名 

上面的都不太重要主要下面的
lstrcat是函數功能:該函數將字符串lpString2附加在另一個字符串lpString1後面。

strcpy,即string copy(字符串複製)的縮寫。
strcpy是一種C語言的標準庫函數,strcpy把含有’\0’結束符的字符串複製到另一個地址空間,返回值的類型爲char
*

知道了函數大致意思 接着分析題目

在這裏插入圖片描述
通過分析可以知道 , 這段代碼會將用戶輸入的用戶名的每個字符遍歷一遍把每個字符的序號(從 0 開始算)與這個字符的ASCII碼的平方相乘 , 然後整體再加上序號 , 得到的和繼續對 0x42 求餘 , 最後將結果加上 33 , 然後再轉爲ASCII碼然後再將上述結果連接在字符串 ‘Happy@’ 之後構成註冊碼

那麼我們編寫腳本完成

在這裏插入圖片描述
運行得到
在這裏插入圖片描述

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)

提交發現正確
在這裏插入圖片描述
之後提交即可哈哈哈哈哈
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章