Justctf2025
Satellite
一道misc+re的题
给了一个流量包,直接wireshark分析,这一行非常清楚的flag字样,点击看到了text,猜测是密文
{“text”: “5771D410 CFFE844D
24B50FCB BBDC1973
A7A935E5 C3468242
950DFCCE 94794B06
7F876A21 5D96EE09”}
可以通过查找字符串,找到相关语句,然后交叉引用找到主函数,这里就是找到的加密函数位置,是一个tea加密,没啥变化,可以直接写脚本解密
注意key的提取,从dword_14B98[98]开始取,一共四位
1 |
|
justCTF{TheConnection_w4s_interrupted}
baby-goes-re
一个go语言程序,先来简单了解一下
接口调用方式(itab
, rtype
, interface{}
)
标准库调用(fmt.Fprintln
, fmt.Fprint
, fmt.Fscanln
)
调用 main_CheckFlag
-加密函数
主函数就是从这个大数据模块:从 aSmallMapWithNo + 3605
开始,共 338660 字节,然后调用main_CheckFlag函数
加密过程简单的来说就是
flag 的第 k 个字符必须等于 babymemory[51*k + 4919]
flag的字符长度为53,k从0-52,即babymemory 起始地址:0x4CA8C0 + 3605 = 0x4CB5F5
为了方便直接用idapython,也可以把aSmallMapWithNo内容dump出来然后解
1 |
|
justCTF{W3lc0m3_t0_R3v1NG!_Th4t_w45nt-s0-B4d-w45_1t?}
6pack
依旧是misc+re的题
先看go语言程序,找到main函数位置
接着分析调用的一些函数
sub_4C8820函数用于创建ipv6 header
sub_4CA0E0函数发送数据包
sub_4CABA0函数使用flate/zlib解压并读取所有数据,从这里就可以推测要分析的代码应该就在给的流量包里面
流量包分析提取数据只能交给misc师傅来提取了,过程也是很艰辛的,最后得到了一个exe文件
得到的exe文件有一层upx壳,一键脱壳就行
主函数的逻辑就是,先输入一个参数,要求在30720-32767之间,这里得要爆破,如果传入的参数不对,后续通过动调得到的代码就不对,这里的v12是密钥,密钥判断
sub_7FF65E8E2730函数的作用是读取给的6-pack文件,找到.go.runtimeinfo节,然后读取加密的shellcode
注意放在同一个文件夹下,动调的时候要用到,不然动调不起来。
sub_7FF65E8E26E0函数,使用 SystemFunction033 解密 shellcode,这里就涉及到第二个参数,其实就是flag。这里真实的逻辑是一个smc,动调的时候能够解密得到可执行代码
这里经过动调之后把SystemFunction033的字节按c/p可以识别成函数,这里有一个长度判断,就是第二个参数(flag的长度,我们要把传入的参数改为36
这里就是一个很明显的smc,动调过之后把byte_1B8CCB50100字节进行反编译就能得到我们要分析的代码
主要代码:
1 |
|
这里的加密函数(loc_2320BE5026D + 2),这个是没有自动识别的函数,自己手动编译一下,这是主要的加密内容,这个函数对 3 字节输入计算 SHA256 哈希,输出 32 字节
哈希值就是unk_1B8CCB503D0[384]内容,一共12个正确的哈希值
爆破脚本:
1 |
|