[网鼎杯 2020 青龙组]jocker 题解

简介: [网鼎杯 2020 青龙组]jocker 题解

32位无壳

堆栈有问题

先修堆栈在反编译

查看关键函数

对输入的字符串进行了加密

加密之后omg函数中与存储的字符串进行比较

我们先解密这个

提取数据

 

解密脚本

data=[0x66,0x6b,0x63,0x64,0x7f,0x61,0x67,0x64,0x3b,0x56,0x6b,0x61,0x7b,0x26,0x3b,0x50,0x63,0x5f,0x4d,0x5a,0x71,0x0c,0x37,0x66]
flag=""
for i in range(len(data)):
    if(i&1):
        flag+=chr(data[i]+i)
    else:
        flag+=chr(data[i]^i)
print(flag)

flag{fak3_alw35_sp_me!!}

是假flag

这个循环是一个代码自修改(SMC)

就是执行了这一段循环,才能还原出encrypt代码数据

首先encrypt存在堆栈问题

实用OD,断点打在这里

输入刚才的假flag就能成功运行到这里

函数已经解密完成

然后dump文件

重新用IDA打开dump后的文件

重新用IDA加载dump后的文件,进入到了encrypt函数

解密,这个函数只与flag的前19位进行了加密,解密得到flag的前半段

data=[0x0e,0x0d,0x09,0x06,0x13,0x05,0x58,0x56,0x3e,0x06,0x0c,0x3c,0x1f,0x57,0x14,0x6b,0x57,0x59,0x0d]
str="hahahaha_do_you_find_me?"
flag=""
for i in range(len(data)):
    flag+=chr(data[i]^ord(str[i]))
print(flag)

flag{d07abccf8a410c

观察最后的finally函数查看最后的部分

我们猜测最后的密文':',是'}'与某个值异或的结果

其他四位也是与这个数异或的得到的

a=ord(':')^ord('}')
str="%tp&:"
flag2=""
flag1="flag{d07abccf8a410c"
for i in range(len(str)):
    flag2+=chr(ord(str[i])^a)
print(flag1+flag2)

flag{d07abccf8a410cb37a}

目录
打赏
0
0
0
0
4
分享
相关文章
开心档之Bootstrap4 输入框组
开心档之Bootstrap4 输入框组
51 0
|
8月前
|
PHP
BUU [网鼎杯 2020 青龙组]AreUSerialz
BUU [网鼎杯 2020 青龙组]AreUSerialz
116 0
|
8月前
|
【Deepin 20系统】Linux系统修改MATLAB 打开默认地址(默认工作空间)
如何在Linux系统中修改MATLAB的默认打开地址(默认工作空间),通过编辑matlabrc.m文件来设置启动MATLAB时的初始目录。
192 0
开心档之 boostrap 按钮组
Bootstrap 4 中允许我们将按钮放在同一行上。可以在 <div> 元素上添加 .btn-group 类来创建按钮组。
开心档 - 软件开发入门之 Bootstrap4 输入框组
我们可以使用 .input-group 类来向表单输入框中添加更多的样式,如图标、文本或者按钮。
每日一题——一次编辑(双百通过)
每日一题——一次编辑(双百通过)
122 0
每日一题——一次编辑(双百通过)
Linux网络基本配置命令(我路过你的心,你不肯留)(一)
Linux网络基本配置命令(我路过你的心,你不肯留)(一)
255 0
Linux网络基本配置命令(我路过你的心,你不肯留)(一)
Linux网络基本配置命令(我路过你的心,你不肯留)(二)
Linux网络基本配置命令(我路过你的心,你不肯留)(二)
121 0
Linux网络基本配置命令(我路过你的心,你不肯留)(二)
LeetCode每日一题(22)——一次编辑
一次编辑 1.题目 2.示例 3.思路 4.代码
144 0