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);
?>
posted @ 2025-04-24 16:20  sun010  阅读(33)  评论(0)    收藏  举报