2018/11/28-LCTF-easyre

题目链接:https://pan.baidu.com/s/1whGqn75JvrO82XpIc2TyMg

提取码:q3nl

首先程序对输入的数据构建二叉树,节点的结构体:

程序使用递归的方式构建二叉树,比节点大的数据作为右孩子,比节点小的数据作为左孩子,构建完成后如果中序遍历二叉树,升序排列。

接着sub_4017DD函数对二叉树进行先序遍历。

接着将遍历节点值存放的数组传进sub_401D6E函数中。

接着分析sub_401D6E函数。

sub_4018F0是DES加密,密钥可以找到是"fa1conn",DES加密过程:明文64位->初始置换IP->轮加密变换->逆初始变换IP-1->密文。可以根据初始置换IP,初始逆置换IP-1,选择置换PC-1,选择置换PC-2四个常量表,以及16加密变换的for循环来识别是DES加密。

sub_40195A里面是一个三重循环,是将DES加密后的前36个数据与dword_408020数组存的36个数据当矩阵相乘得到一个6*6的矩阵。

sub_401A24是将得到的矩阵数据与dword_40B6D0数组中的数据比较,比较完矩阵的36位数据后,再比较DES加密后的最后四位的值。

这样我们就可以用python写出脚本进行矩阵逆运算,再进行DES解密,运行即可得到先序遍历的结果"LC-+)=1234[email protected]{the^VYXZfislrvxyz}"。

from numpy import *
from Crypto.Cipher import DES

A = [[0x17, 0x41, 0x18, 0x4E, 0x2B, 0x38], [0x3B, 0x43, 0x15, 0x2B, 0x2D, 0x4C], [0x17, 0x36, 0x4C, 0x0C, 0x41, 0x2B],
     [0x59, 0x28, 0x20, 0x43, 0x49, 0x39], [0x17, 0x2D, 0x1F, 0x36, 0x1F, 0x34], [0x0D, 0x18, 0x36, 0x41, 0x22, 0x18]]
mA = matrix(A)
B = [[0x0AA92, 0x0C006, 0x0A815, 0x0C920, 0x0D095, 0x0CAD1], [0x7004, 0x9B3C, 0x68A1, 0x0A2C1, 0x8B5B, 0x9EB5],
     [0x7E37, 0x7AA2, 0x4F95, 0x0A344, 0x82AC, 0x8C00], [0x432B, 0x71F7, 0x732D, 0x6E76, 0x70A1, 0x6F34],
     [0x0B465, 0x0E401, 0x0AF37, 0x0DAD2, 0x0DF89, 0x0ECFA], [0x657D, 0x6838, 0x5FCE, 0x977C, 0x71F4, 0x759E]]
mB = matrix(B)
mX = mB * mA.I
X = matrix.tolist(mX)

cipher = ‘‘
for i in range(6):
    for j in range(6):
        X[i][j] = int(round(X[i][j]))
        cipher += hex(X[i][j])[2:].zfill(2)
cipher += ‘733CF57C‘

cipher = cipher.decode(‘hex‘)
key = ‘fa1conn\x00‘
des = DES.new(key, DES.MODE_ECB)
plain = des.decrypt(cipher)
print(plain)

接着sub_401ACC确认flag前十八位的值,恢复后得到flag前十八位为”LCTF{this-RevlrSE=“

str = "LC-+)[email protected]{the^VYXZfislrvxyz}"
arr = [0,1,14,12,17,18,19,27,28,2,15,20,31,29,30,16,13,5]
for i in arr:
    print(str[i],end="")

接着又对二叉树进行后序遍历,然后调用sub_4021DE函数。

分析sub_4021DE函数。

sub_401D90函数中将flag中每个字符的ascii值的和作为srand()的种子,然后将401E79地址开始的值与rand()异或。

但是不能直接对程序的401E79处的值写脚本进行解密。

因为需要注意的是这只是第二段smc,在开始的时候是存在反调试的,并且反调试和第一段smc有关。也就是说两段smc正确处理后,才能得到正确的自解密函数。

我们选择patch掉程序中进程名,然后运行程序让第一段smc正确解密,我们当前程序从dump下来得到正确的第一段smc数据,然后写IDApython解密smc函数。

#rand()值
arr = [0x9B,0xBC,0x70,0x3A,0x99,0xF4,0x68,0xB0,0x5F,0x6F,0xDB,0xF1,0xD,0x53,0xA0,0x8C,0xC5,0xCE,0x83,0x25,0x6D,0xC0,0x33,0xC7,0xB0,0xB4,0x5C,0x7C,0x46,0x15,0x10,0x1B,0x76,0x9F,0x6B,0x62,0xD9,0x13,0x77,0x44,0x60,0x2F,0x4D,0x84,0x98,0xDD,0x7D,0x83,0x2D,0xAB,0xB0,0x57,0xAE,0x7B,0x8C,0x1C,0x8F,0x7B,0xD8,0x8F,0x74,0x58,0xE1,0xD9,0xAD,0xAF,0x1C,0xA8,0xFC,0xC5,0xC,0x84,0x9F,0x77,0x66,0x61,0x8A,0x74,0x74,0x70,0xF5,0xA9,0xB7,0x3B,0x16,0xFD,0xD0,0xF1,0x30,0x3F,0xA1,0xFE,0xCC,0x5C,0xAF,0xDF,0x46,0xD6,0xCA,0x35,0x8C,0x71,0xF1,0x18,0x23,0x30,0x70,0xAD,0x6B,0x7F,0x4B,0xFB,0x23,0xB2,0xDF,0xFA,0x2F,0xAE,0xC7]
address = 0x401E79
i =0
while(i <= 118):
    a = Byte(address + i) ^ arr[i]
    PatchByte(address + i,a)
    i = i + 1

接着处理一下即可对自解密函数进行反编译。

我们写出脚本可以得到flag后序遍历为”)[email protected]=-EFCSRXZYV^ferlsihzyxvt}{TL“。

arr = [0x7c,0x81,0x61,0x99,0x67,0x9b,0x14,0xea,0x68,0x87,0x10,0xec,0x16,0xf9,0x7,0xf2,0xf,0xf3,0x3,0xf4,0x33,0xcf,0x27,0xc6,0x26,0xc3,0x3d,0xd0,0x2c,0xd2,0x23,0xde,0x28,0xd1,0x1,0xe6]
for i in range(36):
    for j in range(0,7,2):
        arr[i] ^= 1 << (j + i % 2)
print(‘‘.join(map(chr,arr)))

函数 sub_401F3C()即确认flag后18位的顺序,我们进行恢复可以得到后十八位为”=^[email protected]+)fAxyzXZ234}“

然后flag即为”LCTF{this-RevlrSE=^[email protected]+)fAxyzXZ234}“。

原文地址:https://www.cnblogs.com/Fingerprint/p/10036094.html

时间: 2024-10-06 00:22:51

2018/11/28-LCTF-easyre的相关文章

2018.11.28 Android踩坑(读写文件)

在学到使用Android Device Monitor 查看文件的时候,发现Android Device Monitor在Android Studio里面找不到了,网上查了原来是被官方弃用了,现在通过命令行的方式启动 1.打开Project Structure找到sdk安装路径 2.找到这个路径打开里面tools文件夹下面的monitor.bat双击运行即可打开Android Device Monitor 虽然说找到了Android Device Monitor,但是打开报了个Could not

【谜客帝国】第142届出来混饭的主擂谜会(2018.11.30)

[谜客帝国]第142届出来混饭的主擂谜会(2018.11.30) 主持:瓷  计分:默沫 1.莫明其妙(礼貌用语)晚上好 2.漂泊母牵挂(字)嗨 3.一双玉臂千人枕(新称谓)女博客 4.半点朱唇万客尝(成语)任人唯亲 5.一场秋雨一场凉(医学名词)渐冻人 6.残月如弓,星星双映(字)弱 7.母亲伴内戚,端午西湖游(市名)上海 8.一心求平安(字)恙 9.二月伴儿游古迹(中药)元胡 10.“骑赤兔,提青偃,过五关,斩六将”(军用名词二 2+4)马刀,战斗减员 11.书法比赛(建筑名词)品字形结构

【谜客帝国】第141届幽谷寒梅主擂谜会(2018.11.15)

 [谜客帝国]第141届幽谷寒梅主擂谜会(2018.11.15) 主持:幽谷寒梅  计分:渣渣 1.捧来一掬春,三人分一分(字)拘 2.“薄技在身,胜握千金”(6字爆料某知名演员境况)陈小艺超有钱 3.但觉纣王仁心无存(6字旅游语,含吉林地名)感受德惠风光 [注:纣王名受(一作受德).惠风:仁心.仁政,汉张衡 <东京赋>:“惠风广被,泽洎幽荒.”] 4.并未让其交代(4字比较语,含古尊称)没令坦白 5.“白发垂项,佝偻携杖”(知名谜人专职,掉尾格)老罗背锅 6.毋为威武动屈心(南北朝人物)莫折

11.28 限定某个目录禁止解析php;11.29 限制user_agent;11.30,11.31 php相关配置(上下)

扩展: apache开启压缩  http://www.aminglinux.com/bbs/thread-5528-1-1.html apache2.2到2.4配置文件变更  http://www.aminglinux.com/bbs/thread-7292-1-1.html apache options参数  http://www.aminglinux.com/bbs/thread-1051-1-1.html apache禁止trace或track防止xss  http://www.aming

11.28 限定某个目录禁止解析php;11.29 限制user_agent;11.30-11.31

扩展 : apache开启压缩 : http://ask.apelearn.com/question/5528 apache2.2到2.4配置文件变更 : http://ask.apelearn.com/question/7292 apache options参数 : http://ask.apelearn.com/question/1051 apache禁止trace或track防止xss : http://ask.apelearn.com/question/1045 apache 配置htt

11.28限定某个目录禁止解析php11.29限制user_agent11.30-31php相关配置

11.28 限定某个目录禁止解析php例如一些目录允许上传图片,为防止有人上传带有病毒php文件,所以禁止php解析,一般存放静态的文件上的目录是不允许解析PHP文件的重新加载配置文件 创建upload目录,访问提示403状态码在浏览器打开是无法打开的,连访问的机会都没有将下图的注释掉再重新加载后测试,这时候不能解析了,显示它的源代码在浏览器打开提示下载11.29 限制user_agentvim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf重

11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31

11.28 限定某个目录禁止解析php 核心配置文件内容<Directory /data/wwwroot/www.123.com/upload>php_admin_flag engine off</Directory>curl测试时直接返回了php源代码,并未解析 curl -x127.0.0.1:80 'http://123.com/upload/123.php' 11.29 限制user_agent user_agent可以理解为浏览器标识核心配置文件内容<IfModul

Burn Down Chart(2018.5.28~2018.6.3)

任务安排 PM:曾子轩 前端: (2018.5.28 18:00前完成补充) 后端: 1.数据库组(艾寅中.陈志锴): 1)处理上一次代码无法访问表部分列的Bug. 2)改用云端数据库,熟悉事务处理概念,并要具体实现事务处理. 3)熟悉视图(View)的概念,将目前访问的数据都改为视图访问. 2.服务器组(邹卫其): 1)创建云端数据库. 2)编写通过IDEA链接云端数据库的使用文档. 3)阅读Taotao例程前四章内容,了解工程结构,并在组会中进行汇报. 3.事务逻辑组(曾子轩): 1)编写G

2018/11/12(python)

文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 f=open('实验文件.txt',encoding='gbk') data=f.read() print (data ) f.close() 读写都是字符串形式 读 f=open('实验文件.txt','r',encoding='gbk') print(f.readlines()) f.close() 写,会覆盖原文件 f=open('实验文件.txt','w',encoding='gbk')

2018.11.16 浪在ACM 集训队第五次测试赛

2018.11.16 浪在ACM 集训队第五次测试赛 整理人:李继朋 Problem A : 参考博客:[1]朱远迪 Problem B : 参考博客: Problem C : 参考博客: Problem D : 参考博客:[1]朱远迪 Problem E : 参考博客: 原文地址:https://www.cnblogs.com/QLU-ACM/p/9977949.html