前言

懒得写详细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
来源:https://www.cnblogs.com/xhds/p/12231833.html