zoukankan      html  css  js  c++  java
  • bugku-PHP_encrypt_1(ISCCCTF)

    前言

    懒得写详细wp了。。。。

    我佛了 这个题纠结好久.........

    前言

    需要解密的密文:

    fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=

    打开赛题审源码分析

     1 function encrypt($data,$key)
     2 {
     3     $key = md5('ISCC');
     4     $x = 0;
     5     $len = strlen($data);
     6     $klen = strlen($key);
     7 
     8     for ($i=0; $i < $len; $i++) { 
     9         
    10         if ($x == $klen) 
    11         {
    12             $x = 0;
    13         }
    14         @$char .= $key[$x]; //把key里面的第一个字符拼接到char里面
    15         $x+=1; //x执行一次循环加一次1 有多少个字符串加多少次
    16         print_r("88:",$key[$x]);
    17     }
    18 
    19     echo $char."<br>";
    20 //传入有多少个字符串就取前多少个cmd5字符串赋值给char
    21 
    22 
    23     for ($i=0; $i < $len; $i++) {
    24         //取第data里面的第i个数据加上char里面的第i个数据 把他们的ord()ASCII值相加取余128
    25         $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    26     }
    27     print($str);
    28   
    29   //base64位加密
    30     return base64_encode($str);
    31 }

    逆向思维用PHP写解密脚本

     1 function jiemi($str1){
     2     echo "初始值:".$str1."<br>";
     3     $str=base64_decode($str1);
     4 
     5 
     6     $lens=strlen($str);
     7     $j=0;
     8     echo "经过base64解码后:".$str."<br>";
     9     echo "长度:".$lens."<hr>";
    10     $key1 = md5('ISCC');
    11     $key2 = md5('ISCC');
    12     $key=$key1.$key2;
    13     // for($j=0;$j<$lens;$j++){
    14     //     //$ord_str=ord($str[i]);
    15     //     echo $str[j];
    16 
    17     // }
    18     $jie_str="";
    19      for ($i=0; $i<$lens; $i++) {
    20           echo $i;
    21         echo "第一次字符串加密".$str[$i]."<br>";
    22 
    23  // @$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
    24 
    25             $str1=ord($str[$i]);
    26             echo "经过ord转换成ASCII值:".$str1."<br>";
    27 
    28             if($str1<128){
    29                 $str1=$str1+128;
    30             }else if($str>128){
    31                 $str1=$str+128;
    32             }else if($str>=256){
    33                 $str1=256+$str;
    34             }
    35             echo "经过128取余逆向:".$str1."<br>";
    36 
    37             $str2=$str1-ord($key[$i]);
    38             echo "减去CMD5附加的值:".$str2.":".$key[$i]."<br>";
    39                $str3=chr($str2);
    40                echo "emm:".$str3."<br>";
    41 
    42               $jie_str=$jie_str.$str3;
    43               //$jie_str=$str3;
    44 
    45 
    46     }
    47  
    48     print_r($jie_str);
    49 }

     经过修改代码得到两段代码合并即可

    //�lag�{asdqwdfasfdawfefqwdqwdadwqadawd} //29行代码+128
    //F���:��������������������������������� //29行代码不加128
    ////Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}  合并后flag
  • 相关阅读:
    风讯DotNetCMS sp5安装笔记
    datalist中实现自动编号写法
    windows server 2008 自动登录设置
    C#软件监控外部程序运行状态
    WPF启动屏幕SplashScreen
    Windows Server 2019 在桌面上显示“我的电脑”
    使用jquery的load方法加载html页面,html引入的js无效
    sql查询文章上一篇下一篇
    C#调用user32.dll Win32的API函数
    C#调用dll提示"试图加载格式不正确的程序
  • 原文地址:https://www.cnblogs.com/xhds/p/12231833.html
Copyright © 2011-2022 走看看