本題參考了足夠多的題解,並且嘗試弄懂
首先,下載附件之後,發現就是exe,打開之後讓輸入密碼之類的,然後就直接拉入ida中了(不會脫殼,也幸好沒有殼),然後拉入之後,
主函數需要接着進入main0:
發現輸入的是pbdata,並且對於長度也有要求,也就是6個字符;在2處
然後對於(3)則是把ASCII碼轉爲數字,用法在:https://blog.csdn.net/zmx2473162621/article/details/103937585
而對於(5)strcat用法:https://blog.csdn.net/zmx2473162621/article/details/103937695
我們會發現,有把輸入的轉爲數字之後,必須大於100000,而這時,我們有理由相信,輸入的字符串,裏面都是數字,因爲如果不是,用atoi函數轉化過來之後就不滿足大於100000了!
接着就是把“@DBApp”附加到了輸入的後邊;
然後就是一個函數,我們進去之後再進去,發現:
這個東西我查了一下,是一個加密庫,他選擇了一個加密算法,那麼我們來看一下…加密後的結果就是:6E32D0943418C2C33385BC35A1470250DD8923A9,這個就是main函數裏面的,然後看一下長度40,就猜是sha1加密,加密之後長度爲40! 那麼就找一下py加密過程,就直接暴力
##import hashlib
##flag = "@DBApp"
##
##for i in range(100000,999999):
## s=str(i)+flag
## x=hashlib.sha1(s.encode())
## if x.hexdigest()=="6e32d0943418c2c33385bc35a1470250dd8923a9":
## print(str(i)+flag)
得出123321@DBApp,所以密碼是123321
第一層密碼破解出來了,然後看第二層:第二層大體差不太多,只是把123321@DBApp,追加到了輸入的後邊,然後發現:
也是一個加密,但是應該不是sha1加密了,看加密後的27019e688a4e62a649fd99cadaafdb4e,是32位的,那麼就有理由猜測是md5加密,查了一下,md5加密是不可能被暴力破解的,因爲有6+6+6個字符
所以就有一些不知所措,然後看別人的分析,發現裏面還有一層if,就進去
之後發現,這是個啥,就跟着大佬的思路去走,然後看見FindResourceA( )查找資源,(百度的),然後就是找到這個AAA文件,這時候也不知道改咋辦,就接着跟着大佬的思路走,發現要用
這個軟件打開這個exe文件,所以打開一下,發現:
這個裏面有數據;先放這裏,然後繼續看,接下來就是加載資源什麼的,然後再看到CreateFileA,前有一個函數,進去:
就是AAA取出的數與輸入的數據(因爲%v5了,所以就6個)異或一下,然後就得出結果,接下來的地方我也沒看懂,大佬說的異或出來的結果應該是rtf文件的頭文件,我就直接用winhex打開一個頭文件,然後看一下格式:
取前六個就可以了,然後和AAA前六個異或一下,就可以得到輸入;
py代碼:
rtf=[0x7b,0x5c,0x72,0x74,0x66,0x31]
aaa=[0x05,0x7d,0x41,0x15,0x26,0x01]
flag=""
for i in range(6):
tmp=rtf[i]^aaa[i]
flag+=chr(tmp)
print(flag)
得到flag:~!3a@0
第二層密碼,然後輸入,會發現在本目錄下多了一個rtf文件,然後就得出來了flag:Flag{N0_M0re_Free_Bugs}