[网鼎杯 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}

相关文章
|
9月前
|
算法
LeetCode刷题---简单组(三)
LeetCode刷题---简单组(三)
LeetCode刷题---简单组(三)
|
6月前
|
PHP
BUU [网鼎杯 2020 青龙组]AreUSerialz
BUU [网鼎杯 2020 青龙组]AreUSerialz
102 0
|
9月前
|
算法 C++
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
|
9月前
|
算法 C++
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
|
9月前
|
机器学习/深度学习 存储 人工智能
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
|
9月前
|
存储 人工智能 算法
小唐开始刷蓝桥(四)2017年第八届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(四)2017年第八届C/C++ B组蓝桥杯省赛真题
|
机器学习/深度学习 人工智能 C++
2019蓝桥杯B组C++真题题解(三)
2019蓝桥杯B组C++真题题解
|
机器学习/深度学习 人工智能 Java
2021蓝桥杯B组C++真题题解(三)
2021蓝桥杯B组C++真题题解
|
机器学习/深度学习 人工智能 C++
2019蓝桥杯B组C++真题题解(二)
2019蓝桥杯B组C++真题题解