a.a.a com.reverse.daydayup.a com.reverse.daydayup.b com.reverse.daydayup.MainActivity
public static boolean a(String paraString) { // int v6 = 4; Check.a = 0; Check.b = 0; // MainActivity.b.getSettings(). //setUserAgentString(MainActivity.b.getSettings(). //getUserAgentString() + ";" + Check.a + ";" + Check.b); // 以「-」分割字符串 String[] subString = paraString.split("-"); // 分割後必須產生4個子串:即格式爲xxxx-xxxx-xxxx-xxxx if(subString.length == 4) { int i = 0; while(i < subString.length) { // 檢查四個字串,要求長度也爲4,而且只能爲字母或數字 if(subString[i].length() == 4) { int k; for(k = 0; k < subString[i].length(); ++k) { if( !(subString[i].charAt(k) >= '0' && subString[i].charAt(k) <= '9') && !(subString[i].charAt(k) >= 'A' && subString[i].charAt(k) <= 'Z') && !(subString[i].charAt(k) >= 'a' && subString[i].charAt(k) <= 'z')) { return false; } } ++i; } else { return false; } } // 知足條件,進入b方法 return Check.b(paraString); } return false; }
public static boolean b(String paraString) { // int v8 = 3; // int v6 = 2; String[] subString = paraString.split("-"); char[] subString0 = subString[0].toCharArray(); char[] subString1 = subString[1].toCharArray(); char[] subString2 = subString[2].toCharArray(); char[] subString3 = subString[3].toCharArray(); // (a,b)意思是第a部分的第b個字符 // (1,1)==(4,2)-3 // (1,4)==(4,3)| 1(最低位變爲1) // (4,3)的ASCII是奇數 if(subString0[0] == subString3[1] - 3 && subString0[3] == (((char)(subString3[2] | 1))) && subString3[2] % 2 != 1) { // a = (4,4)^ 55 Check.a = subString3[3] ^ 55; // (4,3)==(1,3)+ 8 // (4,1)==(1,1)- 2 // (4,2)==(1,4)^ 18 // (1,2)* 2 ==(1,3)-8 // (4,4)==(1,3) if(subString3[2] == subString0[2] + subString0.length * 2 && subString3[0] == subString0[0] - subString0.length / 2 && subString3[1] == (((char)(subString0[3] ^ 18))) && subString0[1] * 2 == subString0[2] - 8 && subString3[3] == subString0[2]) { // (2,2)+12==(2,4) // (3,2)* 2 == (2,4)- 11 if(subString.length * 3 + subString1[1] == subString1[3] && subString2[1] * 2 == subString1[3] - 11) { // b = (2,3)- 117 Check.b = subString1[2] - subString2.length ^ 113; // (2,1)+(3,1)== 187 // (2,1)+(3,4)== 210 // (2,4)^(2,3)== 47 // (2,1)^(2,2)== 15 // (3,3)^(2,2)== 5 if(subString1[0] + subString2[0] == 187 && subString1[0] + subString2[3] == 210 && (subString1[3] ^ subString1[2]) == 47 && (subString1[0] ^ subString1[1]) == 15 && (subString2[2] ^ subString1[1]) == 5 && // (4,4)^ 55 >(2,3)- 117 // (4,4)^ 55 < 100 Check.a > Check.b && Check.a < 100) { return true; // MainActivity.b.getSettings() //.setUserAgentString(MainActivity.b.getSettings() //.getUserAgentString() + ";" + Check.a + ";" + Check.b); } } } } return false; }
/** * 主函數 ShellCode * @param args */ public static void main(String[] args) { for(char c21='0';c21<='z';c21++) { for(char c43='0';c43<='z';c43++) { StringBuilder result = new StringBuilder(""); char c13=(char) (c43-8); char c12=(char) ((c13-8)/2); char c14=(char) (c43 | 1); char c22=(char) (c21^15); char c24=(char) (c22+12); char c23=(char) (c24^47); char c31=(char) (187-c21); char c32=(char) ((c24-11)/2); char c33=(char) (c22^5); char c34=(char) (210-c21); char c42=(char) (c14^18); char c11=(char) (c42-3); char c41=(char) (c11-2); char c44=c13; result.append(c11); result.append(c12); result.append(c13); result.append(c14); result.append('-'); result.append(c21); result.append(c22); result.append(c23); result.append(c24); result.append('-'); result.append(c31); result.append(c32); result.append(c33); result.append(c34); result.append('-'); result.append(c41); result.append(c42); result.append(c43); result.append(c44); if (a(result.toString())==true) { System.out.println("OK:"+result); } } } }
運行程序,程序輸出:html
OK:d2lu-bmVy-Y7hp-bgtl OK:h4py-bmVy-Y7hp-fkxp OK:d2lu-dkXw-W6nn-bgtl OK:h4py-dkXw-W6nn-fkxp OK:d2lu-fiZu-U5ll-bgtl OK:h4py-fiZu-U5ll-fkxp OK:d2lu-naBm-M1dd-bgtl
按順序提交測試,恰好第一個就是flagjava
XCTF{d2lu-bmVy-Y7hp-bgtl}
題目是一個txt文檔:數組
XCTF{(37,99)(19,99)(19,108)(28,99)(28,108)(37,108)(37,117)(28,117)(19,117)}
(19,117)(28,117)(37,117) (19,108)(28,108)(37,108) (19,99)(28,99)(37,99)
7 8 9 4 5 6 1 2 3
XCTF{314256987}
#include <stdio.h> int main(int argc, char *argv[]) { char array[118][118]; for(int i=0;i<118;i++) { for(int j=0;j<118;j++) { array[i][j]=' '; } } array[37][99]='1'; array[19][99]='7'; array[19][108]='8'; array[28][99]='4'; array[28][108]='5'; array[37][108]='2'; array[37][117]='3'; array[28][117]='6'; array[19][117]='9'; for(int i=0;i<118;i++) { for(int j=0;j<118;j++) { printf("%c",array[i][j]); } } return 0; }
7 8 9 4 5 6 1 2 3
XCTF{178452369}