前言
懒得写详细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