Start
IDA,F5
进行三次check
先是cut
:
strncat()
: 拼接字符串
strncpy()
: 字符串复制
该函数将flag
从a2
到a3
的部分剪切下来之后,存到a
这个变量中,
然后change
:
change函数cut中复制的a
, 传入对每个字符进行ASCII码加2, 并存回去
最后根据a6
的值进行验证
这里v4为输入的flag,第二和第三个为截取的大小,发现第一次check的是0-26
,
第二次check的是0-18
,第三次check的是19-26
,说明该flag的大小为26。
且第一次check
时调用的时cpf3(a)
回到change
函数,传入的a2为26, a3为2,所以就是每次将字符串的值加2
,最终得到cpf3
中的字符串
写出脚本
后面两个check就是唬人的,没啥用,当然了,也可以通过后面两个解出来
用后面两个解出flag
时会有个坑,第一个截取的是19
个字符,只处理18
个字符,第19
个字符是没有处理的。
所以得到的d
改回g
, 就ok了
该程序来源 https://www.52pojie.cn/thread-1179699-1-1.html