REVERSE-PRACTICE-BUUCTF-27
REVERSE-PRACTICE-BUUCTF-27
- [XMAN2018排位賽]Dragon Quest
- [羊城杯 2020]easyre
- [watevrCTF 2019]Repyc
- [2019紅帽杯]calc
[XMAN2018排位賽]Dragon Quest
elf文件,無殼,ida分析
main函數(shù),讀取輸入,start_quest函數(shù)驗證輸入,根據(jù)返回值判斷輸入是否正確
進(jìn)入start_quest函數(shù),首先是給hero數(shù)組添加元素,檢驗輸入的長度是否為28,輸入長度等于28則v7為0,否則v7為1
往下走,由于需要start_quest返回0x1337,則需v7為0,即輸入的長度等于28
sanitize_input函數(shù)對輸入進(jìn)行檢驗,由變量值傳遞可知,sanitize_input函數(shù)也要返回0x1337
進(jìn)入sanitize_input函數(shù),主要的邏輯為,輸入進(jìn)入transform_input函數(shù)處理,返回值與hero數(shù)組比較
進(jìn)入transform_input函數(shù),主要的邏輯為,取出輸入的一個字節(jié)input[i],v16初始值為0,v16每次加上input[i],然后返回v16,與hero數(shù)組的元素比較
已知hero數(shù)組,寫逆運(yùn)算腳本即可得到flag
[羊城杯 2020]easyre
exe程序,運(yùn)行后輸入,無殼,ida分析
main函數(shù),讀取輸入,檢驗輸入的長度是否為38,對輸入進(jìn)行三次變換,最后與Str2比較
三次變換都很容易理解,分別是常規(guī)base64,分組換位置,以及類似凱撒的右移三位
寫逆運(yùn)算腳本即可得到flag
[watevrCTF 2019]Repyc
.pyc文件,用uncompyle6反編譯得到源代碼,python2會檢測為非ascii碼,換成python3即可
佤 = 0 侰 = ~佤 * ~佤 俴 = 侰 + 侰def ?(?):? = 佤? = 佤? = [佤] * 俴 ** (俴 * 俴)? = [佤] * 100? = []while ?[?][佤] != '?':? = ?[?][佤].lower()亀 = ?[?][侰:]if ? == '?':?[亀[佤]] = ?[亀[侰]] + ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]] ^ ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]] - ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]] * ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]] / ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]] & ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]] | ?[亀[俴]]else:if ? == '?':?[亀[佤]] = ?[亀[佤]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]]else:if ? == '?':?[亀[佤]] = 亀[侰]else:if ? == '?':?[亀[佤]] = ?[亀[侰]]else:if ? == '?':?[亀[佤]] = ?[亀[侰]]else:if ? == '?':?[亀[佤]] = 佤else:if ? == '?':?[亀[佤]] = 佤else:if ? == '?':?[亀[佤]] = input(?[亀[侰]])else:if ? == '?':?[亀[佤]] = input(?[亀[侰]])else:if ? == '?':print(?[亀[佤]])else:if ? == '?':print(?[亀[佤]])else:if ? == '?':? = ?[亀[佤]]else:if ? == '?':? = ?[亀[佤]]else:if ? == '?':? = ?.pop()else:if ? == '?':if ?[亀[侰]] > ?[亀[俴]]:? = 亀[佤]?.append(?)continueelse:if ? == '?':?[7] = 佤for i in range(len( ?[亀[佤]])):if ?[亀[佤]] != ?[亀[侰]]:?[7] = 侰? = ?[亀[ 俴]]?.append(?)else:if ? == '?':? = ''for i in range(len(?[亀[佤]])):? += chr(ord(?[亀[佤]][i]) ^ ?[亀[侰]])?[亀[佤]] = ?else:if ? == '?':? = ''for i in range(len(?[亀[佤]])):? += chr(ord(?[亀[佤]][i]) - ?[亀[侰]])?[亀[佤]] = ?else:if ? == '?':if ?[亀[侰]] > ?[亀[俴]]:? = ?[亀[佤]]?.append(?)continueelse:if ? == '?':if ?[亀[侰]] > ?[亀[俴]]:? = ?[亀[佤]]?.append(?)continueelse:if ? == '?':if ?[亀[侰]] == ?[亀[俴]]:? = 亀[佤]?.append(?)continueelse:if ? == '?':if ?[亀[侰]] == ?[亀[俴]]:? = ?[亀[佤]]?.append(?)continueelse:if ? == '?':if ?[亀[侰]] == ?[亀[俴]]:? = ?[亀[佤]]?.append(?)continue? += 侰?([['?', 佤, 'Authentication token: '],['?', 佤, 佤],['?', 6, 'á×?óa(chǎn)?í?à??é????é?óé?àóé?ó??éóú???è??ùúé?ó?àù?éóa(chǎn)?éàóú?óòù??àé?à??é??é?àóéúóáé·?a×ú?ó?é3ú???è??ùúé??×ú? ×??é×ú?á×??é?é?ùú?é?ó×üü?éà×aóé×é?ùù?éa??é???é?é?ó×üü?éóúTù?é?à??é?ùú?é?éàùèóé?ù?éá?üüéóúTù?é??é×?áóüü\x97é?ù????ó\x9a?ù?\x99á×??à?a?3£?2??è·±a¨?'],['?', 俴, 俴 ** (3 * 俴 + 侰) - 俴 ** (俴 + 侰)],['?', 4, 15],['?', 3, 侰],['?', 俴, 俴, 3],['?', 俴, 俴, 4],['?', 佤, 俴],['?', 3],['?', 6, 3],['?', 佤, 'Thanks.'],['?', 侰, 'Authorizing access...'],['?', 佤],['?', 佤, 佤],['?', 佤, 俴],['?', 佤, 4],['?', 5, 19],['?', 佤, 6, 5],['?', 侰],['?'],['?', 侰, 'Access denied!'],['?', 侰],['?']])運(yùn)行后輸入,調(diào)試發(fā)現(xiàn),對輸入的處理很簡單,input[i]=((input[i])^135)-15,即輸入先異或135,再減去15,最后和那段長字符串比較,寫腳本即可得到flag
res="á×?óa(chǎn)?í?à??é????é?óé?àóé?ó??éóú???è??ùúé?ó?àù?éóa(chǎn)?éàóú?óòù??àé?à??é??é?àóéúóáé·?a×ú?ó?é3ú???è??ùúé??×ú? ×??é×ú?á×??é?é?ùú?é?ó×üü?éà×aóé×é?ùù?éa??é???é?é?ó×üü?éóúTù?é?à??é?ùú?é?éàùèóé?ù?éá?üüéóúTù?é??é×?áóüü\x97é?ù????ó\x9a?ù?\x99á×??à?a?3£?2??è·±a¨?" flag="" for c in res:flag+=chr((ord(c)+15)^135) print(flag) #watevr{this_must_be_the_best_encryption_method_evr_henceforth_this_is_the_new_Advanced_Encryption_Stand¨ard_anyways_i_dont_really_have_a_good_vid_but_i_really_enjoy_this_song_i_hope_you_will_enjoy_it_aswell!_youtube.com/watch?v=E5yFcdPAGv0}[2019紅帽杯]calc
exe程序,運(yùn)行后輸入,無殼,ida分析
三次輸入,對輸入一頓運(yùn)算,沒看懂
參考網(wǎng)上別的師傅的wp,2019紅帽杯 Writeup by X1cT34m
原來是在滿足input_2<input_1<input_3的條件下,得到input_1**3+input_2**3+input_2**3==42,即三個整數(shù)的立方和等于42
百度一下,果然有解
將程序的三個sleep函數(shù)patch掉,按input_2<input_1<input_3的條件輸入,得到flag
總結(jié)
以上是生活随笔為你收集整理的REVERSE-PRACTICE-BUUCTF-27的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我国人均GDP刚过1万美元,15年后就成
- 下一篇: 【你会用代码画年兽吗】20行代码使用JS