网鼎杯-2020-青龙组-jocker

二木 王者

(SMC自解密+XOR+猜!)

正如这道题的名字,我做的时候就挺jocker的,题不是很难,但是最后的猜猜大法才能出flag是我没想到的,而且就算是把flag解出来了,给程序也不会有正确的回显,这就挺…..jocker

IDA打开,很容易知道flag为24位,进行了三个加密,我们分别分析

image-20231004181449084

wrong函数,就是一个简单的加密函数

image-20231004181735810

omg函数就是对上面那个函数的检验

image-20231004181820843

这里我们就可以解出第一层密码,我们可以知道这个密码是假的

下面的两个函数需要进行SMC解密

对于SMC两种方法,一种用脚本,一种直接动调

脚本:

1
2
3
4
from idc_bc695 import *
s=0x402219 #加密地址
for i in range(224): #循环
PatchByte(s+i,Byte(s+i)^0x41) #加密的间隔 Byte(s+i)^0x99表示需要进行的加密操作

使用动调其实更好追踪

动调

对于encrypt函数,就是一个简单的异或加密,这里我们提取数据,进行异或就可以解出前十八个字符

image-20231004182807653

接下来就到了最jocker的时刻,

finally函数,这里通过合理猜测,我们可以知道%tp&:这五个就是我们的对比字符,然后仔细分析下面的代码,我们可以惊奇的发现,这个代码是无意义的!!!!!

后来乱猜,异或,把:异或了}试了试,最后解出flag…….

image-20231004182948862

flag{d07abccf8a410cb37a}

 评论
目录