bugku-PHP_encrypt_1(ISCCCTF)

前言

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

 

上一篇:有向图,无向图有关概念


下一篇:Python3---内置函数---ord()