CTFre-V&NCTF2020-strangeCpp

https://buuoj.cn/challenges#[V&N2020%20%E5%85%AC%E5%BC%80%E8%B5%9B]strangeCpp

 

先使用一下exe,發現是貌似檢測系統環境變量的程序

然後放入ida,定位一下他這個程序的主函數

可以看到引用了很多字符串,看一下他引用的字符串的位置:

然後有一個細節值得我們注意,那就是byte_140021008這段字符串被跳過去了,被一個很可疑的函數sub_140013580引用,我們跟蹤進去看一下

其實根據第一個截圖,就是主函數的截圖,我們知道dword_140021190變量是一個與CPU數目有關的東西,但是其實不重要,重要的是,我們要讓putchar這個實現,就是要讓if這個判斷能進入,也就是找到一個合適的dword_140021190變量的值,然後通過sub_140011384那個函數,讓result=607052314

sub_140011384函數:

通過以上條件,寫註冊機:

byte_140021008 = [0x26, 0x2C, 0x21, 0x27, 0x3B, 0x0D, 4, 0x75, 0x68, 0x34, 0x28,0x25, 0x0E, 0x35, 0x2D, 0x69, 0x3D]
result=0
result_end=0

for dword_140021190 in range(14549743):
    result=(((dword_140021190<<8)^(dword_140021190>>12))*291)&0xFFFFFFFF
    if(result==607052314):
        result_end=dword_140021190
        break
print("theNum:%d"%dword_140021190)
flag=""
for i in range(0,len(byte_140021008)):
    flag=flag+chr((result_end^byte_140021008[i])&0xFF)
print(flag)

然後得到輸出:

theNum:123456

flag{MD5(theNum)}

當dword_140021190=123456的時候,if條件能進入,得到flag是MD5(theNum)

顧名思義,我們要讓123456進行MD5編碼,然後得到最後的flag:

flag{e10adc3949ba59abbe56e057f20f883e}

 

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