行业知识
第九届中国海洋大学信息安全竞赛-WP by Rweb
第九届中国海洋大学信息安全CTF-WP (部分)
因为是新生赛嘛,题目还是比较简单的,不错很适合我玩哈哈哈,就差一丢丢拿奖,可惜呜呜,采购们的wp罢了,希望师傅们批评指正。
Reverse
一.钩子
顾名思义,盲猜是一手hook api的题,无壳,载入ida之后直接找一手真正的加密逻辑,先shift+f12看一手字符串。
看到假flag之后直接接着这个假的判断逻辑函数接着往上溯源,选中函数sub_7FF71CC712C0摁x,然后往回逆
继续选中StartAddress,摁x往回逆,然后到最后发现就是在装载主程序之前有先创建一个StartAddress的线程的操作,对于真正的加密逻辑进行了一个勾取
步入StartAddress,进入下图的RC4中(此处函数我已重命名)
然后就经典RC4魔改,取出密文,直接解密
贴出解密脚本如下:
key=[ 136, 227, 238, 17, 198, 73, 116, 165, 221, 152, 89, 233, 72, 247, 110, 191, 58, 179, 155, 223, 16, 66, 255, 153, 108, 227, 62, 5, 44, 101, 71, 239]table=[ 2, 204, 71, 179, 77, 108, 253, 154, 76, 78, 212, 139, 30, 129, 25, 10, 52, 38, 208, 255, 112, 182, 176, 146, 73, 179]S = list(range(256))T = [key[i % len(key)] for i in range(256)]v9=0for j in range(256): v9=(T[j]+S[j]+v9)%256 S[j],S[v9]=S[v9],S[j]a1=26v6=0v8=0for k in range(26): v6=(v6+1)%256 v8=(S[v6]+v8)%256 S[v6],S[v8]=S[v8],S[v6] print(chr(table[k]^S[(S[v8]+S[v6])%256]),end='')#flag{ho00OoOoOoked_gotcha} 二.xor++
签到题,直接贴出脚本如下:
data = [37,40, 36,33, 60, 42, 60, 30, 20, 40, 36, 40, 41,97, 50, 39, 63, 32, 12, 9, 32,104, 55, 46, 4, 63, 53,106,17, 7, 4, 61, 14,17, 38, 14, 26]key=67for i in range(len(data)): print(chr(data[i]^key),end='') key=key+1#flag{buT_diff1cultY_w0nt_ch4Nge_muCh} 三.睡_Lite
上手给了个hex文件,嘶,有点难受,没逆过单片机,确实不知道该咋分析,开始一直以为是arm架构,但是拖进 ida 之后好像有地址错误,嘶,卡了很久,最后还下载了个单片机的烧录软件,寻思烧录出来看看,但是后面才知道好像只知道hex文件是烧录不了的,最后回到最开始的起点,拿hex文件问了一下gpt才知道,这居然是个avr架构。。。。。。
然后转bin直接拖进ida选择avr架构,反编译成功,爽了。。。
题目说flag给的比较直接,然后看了最长的这个函数,有疑似flag的字符,应该就是直接提取
flag开头的几个字符,将字符传个r24寄存器之后都有一个call sub_48的操作,盲猜应该就是类似输出的操作,所以只需要把所有有call sub_48这个操作的字符提取出来即可。flag{dEl4y_n0_MoR3}
Pwn
一.摩登Pwn
运行显示,输入负数可以获取flag,看程序
stroul把输入转换成无符号整数,输入2147483648
flag{292be5d2-3a2f-4a03-ae34-c9a649c19d27}
Crypto
一.Base64*rot13
flag{ezez3zeze2ezEz}
二.模!
题目分析
from math import factorialfrom functools import reduceflag = "flag{xxxxxxxxxxxxxxxxxx}"def mooooo(s: str): res = 0 for i in s: #对flag中的字符进行匹配 res 114:'a',221:'b',210:'c',30:'d',1:'e',102:'f',21:'g',87:'h',48:'i',195:'j',128:'k',77:'l',5:'m',84:'n',4:'o',215:'p',63:'q',192:'r',178:'s',144:'t',72:'u',108:'v',37:'w',13:'x',175:'y',147:'z',140:'{',71:'}' }en_flag = 2508450541438803643416583335895451914701844680466330955847result_t = []for i in range(24): temp_x = en_flag % 256 result_t.insert(0, temp_x) en_flag = en_flag - temp_x en_flag = en_flag // 256for x in result_t: everyf = de_dict.get(x) print(everyf,end='')
上一篇:网易皮肤怎么用到服务器?
下一篇:剪枝例题一道