D 7 Nsctf Web200

<!DOCTYPE html>

D.7.NSCTF web200

D.7.NSCTF web200

知识点一:substr() 函数返回字符串的一部分。语法:substr(string,start,length)

substr($_o,$_0,1)即将$_o从$_0开始剪切,减去一个字符,然后输出减的这个字符。$_0是从0开始,所以我们从头开始减。

所以$_c就是将$str最后一个字符减去,然后输出它。我们假设这个字符为X

知识点二:ord()将字符串的第一个字符变为ASCII码。

$_ _是将字符X的ASCII码(一个数字)加1.

知识点三:chr(),与ord()相反,它将ASCII码返回为字符。

知识点四:strlen(),返回字符串的长度。


问题一$_是多少?详见步骤一。

这就需要解密key密文,题目先base64编码再反转再凯撒加密,所以我们倒着解密。

问题二:$_o即$str的字符串长度到底是多少位?详细见步骤二。


分析:这个for循环,是$_0从0开始,每次循环加1,当循环的数字不小于“$_o的长度“时,就输出。

而$_o是将$str反转一下,不会改变字符串长度。

反转完了之后,我们剪切一个字符下来,ASCII码和字符换来换去的。

于是又赋值给$_c, 最后让输出的$_末尾加上$_c这个值。

$_是循环45次的$_c拼起来的,而$_c是每次截取$_o的第一位,也就是$str的最后一位。

假设$str为abcd, $_o为dcba, $_c依次截取d,c,b,a;将它们变为ASCII码然后减一再变为字符串

所以$_要转换为ASCII码


步骤一,求for循环结束后,还未加密的$_值。






所以$_=~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg


步骤二:



php脚本尝试了很多,但还是欠缺了,不能做到想要的效果。

就这样吧。20161127