cybrics ctf 2019 Hidden Flag writeup

本帖最后由 meanwhile 于 2019-7-30 23:19 编辑

原题链接:https://cybrics.net/tasks/hiddenflag
类型:内存取证,reverse
这道题在比赛的时候没有做出来,后来在网上找了好久才发现了writeup,附上原文链接https://teamrocketist.github.io/2019/07/27/Reverse-CyBRICS-CTF-Quals-2019-Hidden-Flag/,这题感觉难在比较综合,首先内存取证以前就没有接触过,下手的方向比较少,卡在了从一个系统的内存dump中找出目标程序,在第一步就跌倒了。。。
使用内存取证工具volatility分析文件,用imageinfo得到结果如下:

选择使用最新的Win10x64_17134来分析,然后使用pslist,psscan,windows等命令查找当前打开的程序和进程,结果一无所获,没有找到可以程序,再使用filescan扫面打开的文件,也没有什么收获,使用modules命令显示内核加载的驱动  
  
可以看到有两个驱动的位置比较奇怪,一个RamCapture…,看名字应该可以猜出是dmup出内存镜像的工具,另一个Flagostor.sys可能就是我们要找的目标,使用moddump把该文件dump出来,使用IDA打开程序的加载主函数如下  
  
图中打印函数之前的函数应该就是我们要分析的函数了,接下来的revese相对来说是比较简单的了  
  
  
  
先调用genetare生成一张表,然后加密函数直接简单的进行异或,加密和解密过程是一样,最后获得flag的脚本如下:
```
flag = map(ord,list('\x2D\xFB\x9B\xA8\x21\xF8\xB0\xB5\xFA\xEC\x58\xC5\xF9\x35\x57\xFA\xE1\x62\x0E\x19\x45\x7D\x33\x58\x6F\xC9\x88\x4F\x70\x82'))
nf=len(flag)
key=map(ord,list("qweasdzxc"))
table=[ i for i in range(256)]
nk=len(key)
def generate_table():
    a=0
    for i in range(256):
        a=(a+key[i%nk]+table)%256
        t=table
        table=table[a]
        table[a]=t
    print table
def decrypt():
    a1=0
    a2=0
    for i in range(nf):
        a1=(a1+1)%256
        a2=(a2+table[a1])%256
        t=table[a1]
        table[a1]=table [a2]
        table[a2]=t
        t=table[(table[a1]+table[a2])%256]
        flag=t^flag
generate_table()
decrypt()
print ''.join(map(chr,flag))
```
最后吐槽52竟然没有ctf的发帖板块  
插图真烦   

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员

    昵称

  • 取消
    昵称