nssctf_chicken_soup
2026/9/6 6:55:10 网站建设 项目流程


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

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

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

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

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

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

写解密脚本:

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=""defswap(b):b=b&0xffhigh=(b&0xf0)>>4low=(b&0x0f)<<4return(high|low)foriinrange(len(cipher)):step1.append(swap(cipher[i]))forjinrange(len(step1)-2,-1,-1):step1[j]=(step1[j]-step1[j+1])&0xff#print(step2)forninrange(len(step1)):flag+=(chr(step1[n]))print(flag)#print(step1)

然后得到flag:
本题知识点:1、花指令处理
2、代码分析
3、数据提取
4、高低四位的交换要注意用0xff截断
5、要逆序推算

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询