
下载,查壳、64位、IDA打开、f5查看伪代码

解析代码:用户输入一个字符串,通过两次函数操作,与403000位置的值进行比对,一样就输出flag,
所以核心函数就是那三个函数,
点击函数,发现了经典的花指令

明显标红处是脏字节,先按U,然后右键nop掉,下面一个同样操作
然后两个函数就正常显示了,
第一个函数:sub_4010004,可以看到是一个重新赋值

第二个函数:sub_401080,可以看到是每一个字节高低4位互换

第三个函数sub_401110:可以看到是两者进行比较,一致的话返回1。

所以大概就有思路了:先看unk_403000处的值是多少,然后写解密脚本
可以看到连续38个字节是被比较的值,提取出来

写解密脚本:
python
cipher =[205, 77, 140, 125, 173, 30, 190, 74, 138, 125,
188, 124, 252, 46, 42, 121, 157, 106, 26, 204,
61, 74, 248, 60, 121, 105, 57, 217, 221, 157,
169, 105, 76, 140, 221, 89, 233, 215]
step1=[]
flag=""
def swap(b):
b= b & 0xff
high = (b & 0xf0)>>4
low = (b & 0x0f) << 4
return (high|low)
for i in range(len(cipher)):
step1.append(swap(cipher[i]))
for j in range(len(step1)-2,-1,-1):
step1[j]=(step1[j]-step1[j+1])&0xff
#print(step2)
for n in range(len(step1)):
flag+=(chr(step1[n]))
print(flag)
#print(step1)
然后得到flag:
本题知识点:1、花指令处理
2、代码分析
3、数据提取
4、高低四位的交换要注意用0xff截断
5、要逆序推算