题目:BUUCTF Java逆向解密
没壳,是re f="/tags/JAVA.html" title=java>java文件(大概) ida打开看不懂,找了网页上的re f="/tags/JAVA.html" title=java>java反编译 Decompiler.com 没用过re f="/tags/JAVA.html" title=java>java啊…暂且用sublime打开 还好还挺好懂的
re>ref="/tags/JAVA.html" title=java>java">import re f="/tags/JAVA.html" title=java>java. util. ArrayList ;
import re f="/tags/JAVA.html" title=java>java. util. Scanner ;
public class Reverse {
public static void main ( String [ ] args) {
Scanner s = new Scanner ( System . in) ;
System . out. println ( "Please input the flag :" ) ;
String str = s. next ( ) ;
System . out. println ( "Your input is :" ) ;
System . out. println ( str) ;
char [ ] stringArr = str. toCharArray ( ) ;
Encrypt ( stringArr) ;
}
public static void Encrypt ( char [ ] arr) {
ArrayList < Integer > Resultlist = new ArrayList ( ) ;
for ( int i = 0 ; i < arr. length; ++ i) {
int re sult = arr[ i] + 64 ^ 32 ;
Resultlist . add ( re sult) ;
}
int [ ] KEY = new int [ ] { 180 , 136 , 137 , 147 , 191 , 137 , 147 , 191 , 148 , 136 , 133 , 191 , 134 , 140 , 129 , 135 , 191 , 65 } ;
ArrayList < Integer > KEYList = new ArrayList ( ) ;
for ( int j = 0 ; j < KEY . length; ++ j) {
KEYList . add ( KEY [ j] ) ;
}
System . out. println ( "Result:" ) ;
if ( Resultlist . equals ( KEYList ) ) {
System . out. println ( "Congratulations!" ) ;
} else {
System . err. println ( "Error!" ) ;
}
}
}
re>
唯一有的说的就是那句
re>int re sult = arr[i] + 64 ^ 32;
re>
注意加优先级比异或高,逆推得到
re>arr[i] = (re sult ^ 32) - 64
re>
写代码!
re>int a[ ] = { 180 , 136 , 137 , 147 , 191 , 137 , 147 , 191 , 148 , 136 , 133 , 191 , 134 , 140 , 129 , 135 , 191 , 65 } ;
for ( int i = 0 ; i < sizeof ( a) / sizeof ( int ) ; i++ )
cout << char ( ( a[ i] ^ 32 ) - 64 ) ;
re>