下载得到pyc文件,尝试反编译,未能完全成功,问题出在flag3
str = 'jYygTOy' + 'cmNycWNyYmM1Ujf'
import base64def flag1():code = str[::-3]result = ''for i in code:ss = ord(i) - 1result += chr(ss)print result[::-1]def flag2():code = str[::-2]result = ''for i in code:ss = ord(i) - 1result += chr(ss)print result[::-2]def flag3():pass
flag1()
尝试用uncompyle6
比对上面的代码,推测第一段显示的字符串均为有效字符串,提取出来,发现是个逆序的base64编码结果
=cWbihGfyMzNllzZ0cjZzMWN5cTM4YjYygTOycmNycWNyYmM1Ujf
上java,翻转一下
static String rev(String str) {String str_r = (new StringBuilder(str)).reverse().toString();return str_r;
}
结果:
fjU1MmYyNWcyNmcyOTgyYjY4MTc5NWMzZjc0ZzllNzMyfGhibWc=
base64解密
static String bas64(String str) {Base64.Decoder de = Base64.getDecoder();String str_bas = new String((de.decode(str)));return str_bas;
}
结果:
~552f25g26g2982b681795c3f74g9e732|hbmg
又是一个逆序,再次翻转
结果:
gmbh|237e9g47f3c597186b2892g62g52f255~
怀疑凯撒加密,尝试解密(借鉴自:51cto)
static String caesar(int key, String str) {StringBuilder es &#61; new StringBuilder();for (int i &#61; 0; i < str.length(); i&#43;&#43;) {char c &#61; str.charAt(i);if (c > &#39;a&#39; && c < &#39;z&#39;) {c &#43;&#61; key % 26;if (c < &#39;a&#39;){c &#43;&#61; 26;}else if (c > &#39;z&#39;){c -&#61; 26;}} else if (c > &#39;A&#39; && c < &#39;Z&#39;) {c &#43;&#61; key % 26;if (c < &#39;A&#39;){c &#43;&#61; 26;}else if (c > &#39;Z&#39;){c -&#61; 26;}}es.append(c);}String str_ca &#61; es.toString();return str_ca;
}
结果&#xff1a;
是凯撒&#xff0c;又不完全是&#xff0c;flag也就是把字符串中所有字符的ASCII向前提了一位&#xff0c;那就从第五位开始移位
static void final_res(String str){System.out.print("flag");for (int i &#61; 4; i < str.length(); i&#43;&#43;) {char res &#61; (char)(str.charAt(i) - 1);System.out.print(res);}System.out.println();
}
最终结果&#xff1a;
flag{126e8g36f2c486075b1781g51g41f144}
完整代码&#xff1a;
import java.util.Base64;public class testpyc {public static void main(String[] args) {for (int i &#61; 26; i > 0; i--) {String result &#61; rev(caesar(i, bas64(rev("&#61;cWbihGfyMzNllzZ0cjZzMWN5cTM4YjYygTOycmNycWNyYmM1Ujf"))));if (i &#61;&#61; 1) {final_res(result);}}}static String rev(String str) {String str_r &#61; (new StringBuilder(str)).reverse().toString();return str_r;}static String bas64(String str) {Base64.Decoder de &#61; Base64.getDecoder();String str_bas &#61; new String((de.decode(str)));return str_bas;}static String caesar(int key, String str) {StringBuilder es &#61; new StringBuilder();for (int i &#61; 0; i < str.length(); i&#43;&#43;) {char c &#61; str.charAt(i);if (c > &#39;a&#39; && c < &#39;z&#39;) {c &#43;&#61; key % 26;if (c < &#39;a&#39;){c &#43;&#61; 26;}else if (c > &#39;z&#39;){c -&#61; 26;}} else if (c > &#39;A&#39; && c < &#39;Z&#39;) {c &#43;&#61; key % 26;if (c < &#39;A&#39;){c &#43;&#61; 26;}else if (c > &#39;Z&#39;){c -&#61; 26;}}es.append(c);}String str_ca &#61; es.toString();return str_ca;}static void final_res(String str){System.out.print("flag");for (int i &#61; 4; i < str.length(); i&#43;&#43;) {char res &#61; (char)(str.charAt(i) - 1);System.out.print(res);}System.out.println();}
}