小工具知识网

当前位置: 首页 > 行业知识 > 第九届中国海洋大学信息安全竞赛-WP by Rweb

行业知识

第九届中国海洋大学信息安全竞赛-WP by Rweb

2026-11-14 00:55:34 来源:互联网转载

第九届中国海洋大学信息安全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='')

上一篇:网易皮肤怎么用到服务器?

下一篇:剪枝例题一道