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

相关文章
|
2月前
【洛谷 P1909】[NOIP2016 普及组] 买铅笔 题解(打擂台法)
**摘要:** P老师需买$n$支铅笔作礼物,商店有3种包装(数量、价格不等),不能拆包。目标是最少花费。输入包括$n$和每种包装的详情,输出最小花费。样例展示最优选择过程。代码使用打擂台法求解,读入$n$和包装信息,计算每种包装的最小花费,取最小值输出。
18 0
|
3月前
|
机器学习/深度学习 人工智能 测试技术
棋盘(来源:第十四届蓝桥杯省赛JavaA/C/研究生组 , 第十四届蓝桥杯省赛PythonC组)
棋盘(来源:第十四届蓝桥杯省赛JavaA/C/研究生组 , 第十四届蓝桥杯省赛PythonC组)
|
3月前
|
测试技术
蓝桥杯 2020 第一轮省赛 A 组 F 题(B 组 G 题)解码
蓝桥杯 2020 第一轮省赛 A 组 F 题(B 组 G 题)解码
40 0
[算法刷题题解笔记] 洛谷 P1003 [NOIP2011 提高组] 铺地毯 [枚举]
[算法刷题题解笔记] 洛谷 P1003 [NOIP2011 提高组] 铺地毯 [枚举]
洛谷刷题题解笔记----P1055 [NOIP2008 普及组] ISBN 号码(通过第4第8测试点)
洛谷刷题题解笔记----P1055 [NOIP2008 普及组] ISBN 号码(通过第4第8测试点)
|
C++
【C++题解】NOIP2015提高组 - 跳石头
【C++题解】NOIP2015提高组 - 跳石头
128 0
|
算法
2018 蓝桥杯省赛 B 组模拟赛(一)
2018 蓝桥杯省赛 B 组模拟赛(一)
|
人工智能 Java 测试技术
2023年B组蓝桥杯省赛考前好题整理
请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。 请将这个数的十进制形式作为答案提交。
696 0
每日一练蓝桥杯C/C++B组~蛇形填数
每日一练蓝桥杯C/C++B组~蛇形填数
111 30
每日一练蓝桥杯C/C++B组~蛇形填数