美文网首页
cybrics ctf 2019 Hidden Flag wri

cybrics ctf 2019 Hidden Flag wri

作者: 喝豆腐脑加糖 | 来源:发表于2019-08-02 13:24 被阅读0次

    内存取证的reverse 题目链接:https://cybrics.net/files/20190717.zip.torrent

    主要工具为:volatility ida

    由于之前没使用过volatility,刚开始使用的是windows版,结果全是乱码,且进程目录也不全

    windows版镜像查看结果

    镜像信息

    windows进程查看结果

    进程信息

    Linux版本

    j镜像信息 进程信息

    两者差距很大,建议的profiiles中最好使用winx64_17134,毕竟更新比较多,其他的话可能也会产生乱码,进程全部flase的问题

    这里通过查看进程信息也没找到有用的东西,查看其中的文件可以找到两个在C盘的sys文件,全部dump下来


    python vol.py -f /home/*********/dbg/20190717.mem --profile Win10x64_17134 moddump -b 0xfffff8005db00000 -D .

    使用ida分析两个文件,有用的是Flagostor.sys

    图片.png

    找到sub_FFFFF8005DAF14B0加密函数,其中有两个加密函数

    图片.png
    encrypt1
    
      v9 = a2;
      v8 = a1;
      len = -1;
      do
        ++len;
      while ( *(a1="qweasdzxc"+ len) );  #计算字符串的长度
      v6 = 0;
      for ( i = 0; i < 256; ++i )
        *(a2 + i) = i;                                #给数组赋值
      for ( j = 0; j < 256; ++j )
      {
        _mm_lfence();
        v2 = (*(v8 + j % len) + *(v9 + j) + v6) >> 31;
        v6 = (v2 + *(v8 + j % len) + *(v9 + j) + v6) - v2;
        switch((j + v9), (v6 + v9));  #数组中字符位置切换
      }
      return 0;
    

    转换python为

    def encrypt1(key):
        table = []
        for i in xrange(256):
            table.append(i)
        v6 = 0
        for j in xrange(256):
            v2 = ord(key[j%len(key)]) + table[j] + v6
            v6 = ((v2&0xff) + v2) - v2
    
            v = table[j]
            table[j] = table[v6]
            table[v6] = v
        return table
    

    第二个encrypt2函数

    __int sub_FFFFF8005DAF12E0(__int a1, __int a2, __int a3)
    {
    
      v13 = a3;
      v12 = a2;
      v11 = a1;
      v7 = 0;
      v8 = 0;
      v9 = 0;
      len = -1;
      do
        ++len;
      while ( *(a2 + len) );   #计算字符串长度
      while ( v9 < v10 )
      {
        v3 = v7 + 1;
        v7 = (BYTE4(v3) + v7 + 1) - BYTE4(v3);
        v4 = (*(v11 + v7) + v8) >> 31;
        v8 = (v4 + *(v11 + v7) + v8) - v4;
        switch((v7 + v11), (v8 + v11));      #switch
        v5 = (*(v11 + v8) + *(v11 + v7)) >> 31;
        *(v9 + v13) = *(v9 + v12) ^ *(v11 + (v5 + *(v11 + v8) + *(v11 + v7)) - v5);
        ++v9;
      }
      return 0;
    }
    

    大致和encrypt函数相同,转化为python为

    def encrypt2(table,flagB):
        l = len(flagB)
        flag = []
        for x in xrange(l):
            flag.append('x')
    
        local_38 = 0;
        local_34 = 0;
        local_28 = 0;
        local_20 = l;
        while (local_28 < local_20):
            local_38 = local_38 + 1 & 0xff
            local_34 = local_34 + table[local_38] & 0xff
            
            aux = table[local_38]
            table[local_38] = table[local_34]
            table[local_34] = aux
    
            flag[local_28] = table[table[local_38]+table[local_34] & 0xff] ^ ord(flagB[local_28])
    
            local_28 = local_28 + 1;
          
        return ''.join([chr(x) for x in flag])
    

    联立得到 flag: cybrics{H1DD3N_D33P_1N_NTKRNL}

    图片.png

    解密分析文件部分不复杂

    {未完待续}

    原文连接:https://teamrocketist.github.io/2019/07/27/Reverse-CyBRICS-CTF-Quals-2019-Hidden-Flag/?tdsourcetag=s_pctim_aiomsg

    相关文章

      网友评论

          本文标题:cybrics ctf 2019 Hidden Flag wri

          本文链接:https://www.haomeiwen.com/subject/rubcdctx.html