第六周

这周还是看web题,打开这道题,界面如下


有界面可知道这是个php自定义加密函数,只要写出相应的解密算法就行。简单的php解密,加密从上往下加密,解密的时候就得从下往上解密。首先先分析代码中用到的几个函数:

(1)strrev是一个将字符串进行翻转的函数。

(2)substr是一个取字符串子串的函数,其用法为strsub(str, start, length),第一个参数为字符串,第二个参数为起始位置,第三个参数为子串长度,返回的结果就是str字符串从start这个位置开始的长度为length的子串。

(3)ord函数的参数为字符串,此函数将返回字符串第一个字符的Acsii码。

(4)chr函数的参数为整型,此函数将从指定的ASCII值返回字符。

(5)"."用于连接字符串。

(6)base64_encode是对字符串参数进行base64编码,与之对应的解码函数为base64_decode。

(7)str_rot13是对字符串参数进行ROT13编码,ROT13是它自己本身的逆反;也就是说,要还原ROT13,套用加密同样的算法即可得。

php我没学过,于是百度了一下php相关的信息并学习了一下其他大佬的wp,大概弄懂了这段代码的意思:

首先是将原文进行反转,然后再将反转后的字符串的每一个字符值+1,接下来再进行base64编码、反转和ROT13编码,得到我们的密文。加密的核心就是把每个字符向前移了一位(ascii码加1)

所以想要得到原文,因为所有的操作都是可逆的,我们只需要将这些步骤反着来一遍即可,代码如下:

<?php

$_code = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

$_code = str_rot13($_code);

$_code = strrev($_code);

$_code = base64_decode($_code);

//echo $_code;

$_ans = "";

for($x = 0; $x < strlen($_code); $x++) {

$t = substr($_code, $x, 1);

$t1 = ord($t) - 1;

$t = chr($t1);

$_ans = $_ans . $t;

}

$_ans = strrev($_ans);

echo $_ans;

?>

最后得到flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

总结:这道题其实算是一道简单的逆向,题目给了一段加密代码,我们就得进行相应的解码,需要对代码进行分析,然后对应每一步进行相应的解码。这道题所用到的知识点有:(1)php脚本编写 (2)简单的编码知识

目前看来我还得进行更多的php代码学习,多解码多编码,得培养一下编码和解码意识,有时候看代码有些看不懂,还需要更多的深入了解。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容