Web21-web2(php逆向解密,富含逆向解密代码)
一.题目链接:
https://adworld.xctf.org.cn/challenges/list
二.开始解题
1.根据题目提示,发现是解密,打开题目,果然是解密,我们先来分析一下代码

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
//定义了一个名为encode的函数,它接收一个参数为$str(要加密的原始字符串)
function encode($str){
//字符串反转,strrev()是php内置函数,用于反转字符串
$_o=strrev($str);
// echo $_o;
//字符串处理循环
//从0开始,直到字符串$_0的长度结束,strlen($_o)用于获取$_o的长度,$_0是循环计数器,每次增加1
for($_0=0;$_0<strlen($_o);$_0++){
//substr()从字符串中提取子字符串,这里从$_o中提取在位置$_0上开始的第1个字符,存储在$_c
$_c=substr($_o,$_0,1);
//ord()函数获取字符的ASCII码,将该ASCII码值加1,结果存储在$__中
$__=ord($_c)+1;
//转换回字符,chr()函数用于将ASCII值转换回对应的字符
$_c=chr($__);
//拼接处理后的字符,将$_c拼接到变量$__的末尾
$_=$_.$_c;
}
//返回加密结果
return str_rot13(strrev(base64_encode($_)));
//循环结束,对$__进行了三层加密处理:
//base64_encode($_) -- 对字符串进行base64编码
//strrev() --反转base64编码后的字符串
//str_rot13() --对反转后的字符串进行ROT13编码
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
2.以及根据题目的提示,我们逆向出解密的代码
//解密思路:
要解密$miwen,我们就要逆向执行上面的步骤
1.ROT13解码
2.反转字符串
3.Base64解码
4.对每个字符的ASCII值减1
5.反转字符串
<?php
$miwen = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function decode($miwen) {
// Step 1: ROT13 解码(ROT13是自逆的)
$step1 = str_rot13($miwen);
// Step 2: 反转字符串(恢复Base64编码前的顺序)
$step2 = strrev($step1);
// Step 3: Base64 解码
$step3 = base64_decode($step2);
// Step 4: 逐字符ASCII值-1
$step4 = "";
for ($i = 0; $i < strlen($step3); $i++) {
$c = substr($step3, $i, 1);
$ord = ord($c) - 1;
$step4 .= chr($ord);
}
// Step 5: 反转字符串(恢复原始输入)
$step5 = strrev($step4);
return $step5;
}
echo decode($miwen);
?>

浙公网安备 33010602011771号