攻防世界Web2

进入之后就是一段php代码

 注释也写的也很清楚了逆向解密就可以得到flag了

先审计一下代码

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){	
    $_o=strrev($str);  //这是反转字符串
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){  //
       
        $_c=substr($_o,$_0,1);  //从$_0=0位置开始,返回1个字符

        $__=ord($_c)+1;  //返回字符串首个字母的ASCII值

        $_c=chr($__);  //返回指定进制的ASCII值

        $_=$_.$_c;   //拼接两个变量的内容 赋值
    } 
    return str_rot13(strrev(base64_encode($_)));  //返回  ROT13 编码/解码(反转字符串(base64加密($_)))  的结果
}

highlight_file(__FILE__); 
/*
   逆向加密算法,解密$miwen就是flag
*/
?>  

来了解一下其中涉及的函数

strrev函数

反转字符串

 

 substr函数

截取字符串的一部分(取子串)

 第一个是源字符串,第二个参数规定在字符串的何处开始,第三个参数规定被返回字符串的长度。默认是直到字符串的结尾。

 ord函数

ord() 函数返回字符串的首个字符的 ASCII 值。

 chr()函数

chr() 函数从指定 ASCII 值返回字符。

 

 

 str_rot13()函数

str_rot13() 函数对字符串执行 ROT13 编码。

ROT13 编码把每一个字母在字母表中向前移动 13 个字母。数字和非字母字符保持不变。

编码和解码都是由相同的函数完成的。如果把已编码的字符串作为参数,那么将返回原始字符串。  

 大致都知道什么意思了,及开始编写 逆向代码

<?php
$secret="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$secret=base64_decode(strrev(str_rot13($secret)));

$m=$secret;

for($i=0;$i<strlen($secret);$i++){
	
$_c=substr($m,$i,1);
  $__=ord($_c)-1;    
  $__=chr($__);     

  $_=$_.$__; 
	
}

echo strrev($_);

?>

 解出flag:

flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值