IDA打开
shift+f12查看可疑字符串
双击flag 查看源代码
查看decry函数 打开流程图 F5查看源代码
开始慢慢搓代码
这段都是在赋值。
strcpy函数是一个用于拷贝字符串的函数,即将一个字符串中的内容拷贝到另一个字符串中。
strcat函数是一个用于追加字符串的函数,即将一个字符串中的内容追加到另一个字符串后面。
而text值为key3和v9的拼接值。同时还要注意v9存储方式为小端方式,即高位在前,实际存储应该要倒过来。
找到key3的值 可得text=‘killshadow’
为了方便计算 把src值和v9按R键转为字符串
这段是将key值转换为小写
src是用复制和连接函数生成的,src=‘ADSFKNDCLS’
同时转换为小写
得到key=’adsfkndcls‘
编写反脚本
# 定义密钥和文本
key = "adsfkndcls"
text = "killshadow"
# 初始化变量
v3 = 10 # 长度
# 转换结果字符串
result = ""
# 外层循环遍历文本中的每个字符
for i in range(len(text)):
# 内层循环遍历ASCII码值,从0到127
for j in range(128):
# 过滤非字母字符
if not ('A' <= chr(j) <= 'Z' or 'a' <= chr(j) <= 'z'):
continue
# 计算并比较,尝试找到匹配的字符
# 注意:Python中的字符可以通过ord()和chr()函数进行ASCII码与字符之间的转换
# 这里的解密逻辑与C代码中的逻辑尽可能保持一致,但进行了适当的调整
if (ord(chr(j)) - 39 - ord(key[v3 % 10]) + 97) % 26 + 97 == ord(text[i]):
result += chr(j)
v3 += 1
break
# 输出解密结果
print(result)
得到flag
flag{KLDQCUDFZO}