CG-CTF simple machine

这题讲道理还是蛮坑的,有些点如果不会的话,会卡死你,然后就是代码有点长,需要有很好的耐心。
找到主函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的mmap函数,是一个分配内存的函数,主要是存放文件的,下午也是百度了下才知道,这东西对于文件的存取和共享修改的效率有很高的提高,这里就简要的认为是个分配内存空间的函数,同时360的加固反调试mmap函数会去检测traceid的值,进行反调试,虽然这种绕过也挺简单的。2333
二.加密函数,加密在这两个函数里面。
在这里插入图片描述
首先第一个函数,点击进入。
在这里插入图片描述
发现这个函数,将那个分配的内存空间,当做栈来操作了。
在这里插入图片描述
这个函数,是入栈
在这里插入图片描述
这个函数,是出栈。
这个可以点击进去看,就是相当于手动撸了个出栈和入栈的代码。
重点是下面的代码,变量很多,要耐心看。。。
在这里插入图片描述
相等于.input[i]^arr[i%arr.length],这里就比较好逆向回去了,再继续看第二个加密函数
在这里插入图片描述
发现就是调换个位置。。写个脚本直接还原回去就完事了。

tmp="feeddeadbeefcafe"
lentmp=len(tmp)
# xxx^tmp[i%lentmp]
#
arr=[0x00, 0x03, 0x09, 0x3A, 0x05, 0x0E, 0x02, 0x16, 0x0F, 0x1F, 0x12, 0x56, 0x3B, 0x0B, 0x51, 0x50, 0x39, 0x00, 0x09, 0x1F, 0x50, 0x04, 0x14, 0x57, 0x3B, 0x12, 0x07, 0x3C, 0x1C, 0x3A, 0x15, 0x05, 0x0B, 0x08, 0x06, 0x01, 0x04, 0x12, 0x16, 0x39, 0x05, 0x0B, 0x50, 0x57, 0x09, 0x12, 0x0A, 0x27, 0x13, 0x17, 0x0E, 0x02, 0x55,0x18]
t1=[z for z in range(54)]
for i in range(3):
  for j in range(18):
    t1[i+3*j]=arr[18*i+j]
flag=""
for w in range(54):
  flag+=chr(ord(tmp[w%lentmp])^t1[w])
print(flag)



在这里插入图片描述

posted @ 2020-04-11 00:19  YenKoc  阅读(213)  评论(0编辑  收藏  举报