0%

isa_ctf1

签到题

  1. 直接查看源代码
  2. 注意到url命名不正常 (居然是indxe.htm)
    使用Fiddler请求index.htm文件

    Debug

拖进IDA,查看一下伪C代码,入口处设置了rand的seed,因此查看调用_rand的函数


发现只有prlntf函数调用了,于是查看该函数

这就是关键代码了。

接下来计算call的偏移地址,把调用puts改为调用prlntf

所以需要知道2A FF FF FF是怎么来的 (EB就是call)


_puts相对于当前代码00401CE1 的偏移值为 E1-10 =D1
而FF-2A=D5 D5=D1+4
所以2A = FF –(D1+4)

而prlntf相对于当前代码00401CE1的偏移值为 CE1-370 =971
所以所求值= FFFF –(971+4)= F68A

所以打开IDA的Hex视图,修改2A FF 为8A F6(刚开始改的F68A,是错误的,参考了一下上面调用__main的偏移发现要倒过来写)

保存后返回,发现已经变成调用prlntf函数了(这仅仅是在IDA中修改了,真正修改需要使用2进制编辑工具修改才能生效)

接下来有两种方法(区别仅仅在于是否永久修改Hex):

  1. 在call puts处下断点,动态调试,运行到断点处在HexView中手动修改跳转偏移,同时在调用prlntf的下一行下断,以便观察输出的flag
  2. 使用2进制编辑工具修改生效后,由于程序一闪而过,所以继续IDA动态调试,调用prlntf的下一行下断,以便观察输出的flag

大佬的凝视

图片为PNG格式,直接拖进010搜png文件尾,发现附加有RAR文件

截断,复制到新文件中,发现有密码(经测试不是伪加密,密码也没跑出来,还试了图片中的日文,也是错误的
使用Stegsolve查看图片,发现Blue色道可疑

使用Analyse->Data Extract发现压缩包密码

解压缩以后得到flag.zip,发现是伪加密,修复后解压出其中的flag.txt,是一段base64后的字符串
解base64得到flag

So_easy

直接拖进010搜png文件尾,发现附加有一段字符串和一个RAR文件

字符串结尾是3D3D猜测是base64,16进制转10进制字符串后解码base64,得到提示

hint:the password is what you see!

由于是rar,可设置中文密码,输入“优雅矜持端庄腿麻站会儿”解压得到一张明显修改了高度的图片,直接暴力修改高度为1024得到flag
(用脚本爆破高度也行,脚本见下文)

学姐真美

拖进010,搜文件尾,发现附加有一个不知道是啥的文件,街区提取之

经观察推测是png文件(有IHDR),修复文件头后显示出一张图

继续拖进010,提示crc32校验错误,利用python脚本跑出正确高度为620,修改后显示出一个二维码

脚本如下:

1
2
3
4
5
6
7
8
9
10
import os
import binascii
import struct

misc = open("lalalaa.png","rb").read()
for i in range(1024):
data = misc[12:20] + struct.pack('>i',i)+ misc[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0xA9B72B91:
print(i)

解码得到一个提示

pass is 13bytes,please input its hex value.u must know where is wrong :P.

IHDR是13字节,pass就是密码的缩写,所以文件需要解密
使用steghide解密得到flag

突破重围

得到的是一个bmp文件(后面一大堆空字节, 直接删除),拖进010,
经观察16进制,感觉应该是png文件(有IHDR),修复文件头后显示出第一层key

搜文件尾,发现附加有RAR文件,导出
解压得到wave.mp3和sinx_cosx.rar(又有密码。。。。
应该解析波形得出密码吧。。。。
还有第三层。。。。
到此放弃

关于逆向题

拖进IDA,找到了关键代码,然而,不会解啊= =