31.PHP_encrypt_1(ISCCCTF)

 

 

31.PHP_encrypt_1(ISCCCTF)

把文件下载并解压得到一个给字符串加密的PHP

 1 <?php
 2 function encrypt($data,$key)
 3 {
 4     $key = md5('ISCC');
 5     $x = 0;
 6     $len = strlen($data);
 7     $klen = strlen($key);
 8     for ($i=0; $i < $len; $i++) { 
 9         if ($x == $klen)
10         {
11             $x = 0;
12         }
13         $char .= $key[$x];
14         $x+=1;
15     }
16     for ($i=0; $i < $len; $i++) {
17         $str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
18     }
19     return base64_encode($str);
20 }
21 ?>

代码意思大概是传入一个flag作为参数赋值给data变量得到得到了上面给出的字符串:fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=  

由此我们只要根据 encrypt 函数写对应的 decrypt函数,刚入门,不会写,啊啊哈哈,参考一下大佬的,转载于https://www.cnblogs.com/huangming-zzz/

 1 <?php
 2 function decrypt($str) {
 3     $mkey = "729623334f0aa2784a1599fd374c120d";
 4     $klen = strlen($mkey);
 5     $tmp = $str;
 6     $tmp = base64_decode($tmp);  // 对 base64 后的字符串 decode
 7     $md_len = strlen($tmp); //获取字符串长度
 8     $x = 0;
 9     $char = "";
10     for($i=0;$i < $md_len;$i++) {  //  取二次加密用 key;
11         if ($x == $klen)  // 数据长度是否超过 key 长度检测
12             $x = 0;
13         $char .= $mkey[$x];  // 从 key 中取二次加密用 key
14         $x+=1;
15     }
16     $md_data = array();
17     for($i=0;$i<$md_len;$i++) { // 取偏移后密文数据
18         array_push($md_data, ord($tmp[$i]));
19     }
20     $md_data_source = array();
21     $data1 = "";
22     $data2 = "";
23     foreach ($md_data as $key => $value) { // 对偏移后的密文数据进行还原
24         $i = $key;
25         if($i >= strlen($mkey)) {$i = $i - strlen($mkey);}
26         $dd = $value;
27         $od = ord($mkey[$i]);
28         array_push($md_data_source,$dd);
29         $data1 .= chr(($dd+128)-$od);  // 第一种可能, 余数+128-key 为回归数
30         $data2 .= chr($dd-$od);  // 第二种可能, 余数直接-key 为回归数
31     }
32     print "data1 => ".$data1."<br>\n";
33     print "data2 => ".$data2."<br>\n";
34 }
35 $str = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=";
36 decrypt($str);
37 ?>

运行结果:

31.PHP_encrypt_1(ISCCCTF)

 

Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}

上一篇:逆向破解入门之VM下浮点算法提取(附练习程序和源码)


下一篇:python数据结构-如何让字典有序