-
-
[原创]看雪CTF2019参赛题目
-
2019-5-29 11:53 2907
-
参赛分析
参赛的题目是一个安卓的程序,由于安卓webview在4.4后开始使用chrome的内核,所以经过测试,安卓8.1及以上的webview版本是可以成功的执行webassembly的。(低版本没有测,该题目不能保证在低版本下成功运行)。
故使用webassembly作为出题的依据,由于无法像桌面版的chrome那样直接动态调试webassembly,解题者需要讲安卓程序上的html网页转移至桌面版即可动态调试。但由于webassembly的字节码不同于x86,需要解题者对webassembly的字节码进行研究才能解题。
主要算法
首先html网页如下(安卓程序中将main.wasm直接作为二进制的字符串放在了html中,但是解题流程不变化):
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> body { background-color: rgb(255, 255, 255); } </style> </head> <script> var instance; fetch('../out/main.wasm').then(response => response.arrayBuffer() ).then(bytes => WebAssembly.instantiate(bytes)).then(results => { instance = results.instance; }).catch(console.error); function check_flag(){ var value = document.getElementById("key_value").value; instance.exports.set_input_flag_len(value.length); for(var ii=0;ii<value.length;ii++){ instance.exports.set_input_flag(value[ii].charCodeAt(),ii); } var ret = instance.exports.check_key(); if (ret == 1){ document.getElementById("tips").innerHTML = "Congratulations!" } else{ document.getElementById("tips").innerHTML = "Not Correct!" } } </script> <body> <div>Key:<input id="key_value" type="text" name="key"style="width:80%"; value=""><input type="submit" value="check" onclick="check_flag()"></div> <div> <label id="tips" ></label></div> </body> </html>
html中调用了wasm中的check_flag函数进行验证。
wasm的源码如下:
#include <string.h> #include <stdio.h> #define WASM_EXPORT __attribute__((visibility("default"))) char input_flag[200]={0}; int input_flag_len=0; int check_a(); int o(char* a ,char* b, char* c, char* d){ int a1 = *a*23||*b**b^12^*c&3345^*a; int a2 = *c||*a&*b-32%(*b+23&&*d); int a3 = *a^*d+4||98&(*c+*b+*d); int a4 = *b&32+*c||*d*(*b+*c+*a+98); int a5 = *a*255**c+98**d&69**a+78**c||22; int a6 = *c||*d+45+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a3*a5; } else{ a1 = a4||a5-a4; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii*(a2+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 24; *b = *b ^ 9; *c = *c ^ 3; *d = *d ^ 107; return *a^0x70^a1^a2^a1^a2; } } int oo(char* a ,char* b, char* c, char* d){ int a1 = *a*263||*b^91^*c&345; int a2 = *c||*a-22%(*b+293); int a3 = *a^*d+14||8&(*c+*b+*d); int a4 = *b&322+*c||(*b+*c+*a+38); int a5 = *a*55**c+8**d&6**a+7**c||2; int a6 = *c||*d+5+*c+*d||*c+*a&*d; if(a1+a2 != a6+a4){ a1 = a3+a1*a5; } else{ a1 = a4*a5-a4; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii*(a1+a2+a3); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 1; *b = *b ^ 90; *c = *c ^ 50; *d = *d ^ 87; return *a^0x64^a1^a2^a1^a2; } } int ooo(char* a ,char* b, char* c, char* d){ int a1 = *a||*b**b^12^*c^*a; int a2 = *c||*a&*b-32%(*b&&*d); int a3 = *a^*d+4&(*c+*b+*d); int a4 = *b&32+*c||*d*(*b+*c+*a); int a5 = *a**c**d&69**a+78**c; int a6 = *c||*d+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a3*a2; } else{ a1 = a4-a5-a4; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii/2*(a1+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 48; *b = *b ^ 93; *c = *c ^ 64; *d = *d ^ 70; return *a^0x66^a1^a2^a1^a2; } } int oooo(char* a ,char* b, char* c, char* d){ int a1 = *a*23||*b**b^12^*c&3345^*a; int a2 = *c||*a&*b-(*b+23&&*d); int a3 = *a^*d+4||(*c+*b+*d); int a4 = *b&32+*c||*d*(*b+*c+*a); int a5 = *a**c**d&69**a+8**c; int a6 = *c||*d+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a3*a5; } else{ a1 = a4||a5-a4; } for(int ii=0;ii<112&& a1!=0;ii++ ){ a1 += ii*(a2+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a4+a5; } else{ *a = *a ^ 43; *b = *b ^ 70; *c = *c ^ 86; *d = *d ^ 61; return *a^0x60^a1^a2^a1^a2; } } int ooooo(char* a ,char* b, char* c, char* d){ int a1 = *a||*b**b^12^*c&3345^*a; int a2 = *c||*a&*b-32%(*b&&*d); int a3 = *a^*d+4||98&(*c+*b+*d); int a4 = *b+*c||*d*(*b+*c+*a+98); int a5 = *a**c+98**d**a+78**c||22; int a6 = *c||*d+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a3*a5; } else{ a1 = a4||a5-a4; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii*(a2+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 2; *b = *b ^ 67; *c = *c ^ 23; *d = *d; return *a^0x90^a1^a2^a1^a2; } } int oooooo(char* a ,char* b, char* c, char* d){ int a1 = *a||*b**b^*c^*a; int a2 = *c||*a&*b%(*b&&*d); int a3 = *a^*d&(*c+*b+*d); int a4 = *b+*c||*d*(*b+*c+*a); int a5 = *a**c**d**a**c; int a6 = *c||*d+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a3*a5; } else{ a1 = a4||a5-a4; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii*(a2+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 50; *b = *b ^ 83; *c = *c ^ 31; *d = *d ^ 38; return *a^0x45^a1^a2^a1^a2; } } int ooooooo(char* a ,char* b, char* c, char* d){ int a1 = *a*23||*b**b^12^*c&3345^*a; int a2 = *c||*a&*b-32%(*b+23&&*d); int a3 = *a^*d+4||98&(*c+*b+*d); int a4 = *b&32+*c||*d*(*b+*c+*a+98); int a5 = *a*255**c+98**d&69**a+78**c||22; int a6 = *c||*d+45+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a3*a5; } else{ a1 = a4||a5-a2; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii*(a2+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 42; *b = *b ^ 1; *c = *c ; *d = *d ^ 16; return *a^0x32^a1^a2^a1^a2; } } int oooooooo(char* a ,char* b, char* c, char* d){ int a1 = *a*23||*b**b^12^*c&3345^*a; int a2 = *c||*a&*b-32%(*b+23&&*d); int a3 = *a^*d+4||98&(*c+*b+*d); int a4 = *b&32+*c||*d*(*b+*c+*a+98); int a5 = *a*255**c+98**d&69**a+78**c||22; int a6 = *c||*d+45+*c||*a+*d||*c+*a&*d; if(a1+a2 != a3+a4){ a1 = a2+a1*a5; } else{ a1 = a4||a5-a4; } for(int ii=0;ii<16&& a1!=0;ii++ ){ a1 += ii*(a2+a3+a4+a5); } if( *a+*b+*c+*d == -1) { return a1+a2+a3+a4+a5+a6; } else{ *a = *a ^ 16; *b = *b ^ 30; *c = *c ^ 64; *d = *d ; return *a^0x44^a1^a2^a1^a2; } } WASM_EXPORT int set_input_flag(int value,int offset) { input_flag[offset] = (char)value; return 0; } WASM_EXPORT int set_input_flag_len(int length) { input_flag_len = length;// (char)value; return 0; } WASM_EXPORT int check_key(){ o(&input_flag[0],&input_flag[1],&input_flag[2],&input_flag[3]); oo(&input_flag[4],&input_flag[5],&input_flag[6],&input_flag[7]); ooo(&input_flag[8],&input_flag[9],&input_flag[10],&input_flag[11]); oooo(&input_flag[12],&input_flag[13],&input_flag[14],&input_flag[15]); ooooo(&input_flag[16],&input_flag[17],&input_flag[18],&input_flag[19]); oooooo(&input_flag[20],&input_flag[21],&input_flag[22],&input_flag[23]); ooooooo(&input_flag[24],&input_flag[25],&input_flag[26],&input_flag[27]); oooooooo(&input_flag[28],&input_flag[29],&input_flag[30],&input_flag[31]); return xxx(); } int xxx() { if(input_flag[0] * 108 +input_flag[1] * 111 +input_flag[2] * 92 +input_flag[3] * 194 +input_flag[4] * 124 +input_flag[5] * 240 +input_flag[6] * 126 +input_flag[7] * 81 +input_flag[8] * 144 +input_flag[9] * 103 +input_flag[10] * 161 +input_flag[11] * 50 +input_flag[12] * 67 +input_flag[13] * 15 +input_flag[14] * 127 +input_flag[15] * 232 +input_flag[16] * 188 +input_flag[17] * 19 +input_flag[18] * 233 +input_flag[19] * 153 +input_flag[20] * 231 +input_flag[21] * 40 +input_flag[22] * 112 +input_flag[23] * 106 +input_flag[24] * 135 +input_flag[25] * 90 +input_flag[26] * 67 +input_flag[27] * 20 +input_flag[28] * 248 +input_flag[29] * 45 +input_flag[30] * 48 +input_flag[31] * 174 != 359512 ){return 0;} if(input_flag[0] * 227 +input_flag[1] * 78 +input_flag[2] * 195 +input_flag[3] * 81 +input_flag[4] * 10 +input_flag[5] * 248 +input_flag[6] * 186 +input_flag[7] * 171 +input_flag[8] * 148 +input_flag[9] * 194 +input_flag[10] * 40 +input_flag[11] * 180 +input_flag[12] * 17 +input_flag[13] * 212 +input_flag[14] * 104 +input_flag[15] * 90 +input_flag[16] * 178 +input_flag[17] * 26 +input_flag[18] * 225 +input_flag[19] * 209 +input_flag[20] * 32 +input_flag[21] * 169 +input_flag[22] * 94 +input_flag[23] * 156 +input_flag[24] * 154 +input_flag[25] * 56 +input_flag[26] * 244 +input_flag[27] * 149 +input_flag[28] * 120 +input_flag[29] * 131 +input_flag[30] * 13 +input_flag[31] * 101 != 387514 ){return 0;} if(input_flag[0] * 83 +input_flag[1] * 44 +input_flag[2] * 95 +input_flag[3] * 131 +input_flag[4] * 30 +input_flag[5] * 55 +input_flag[6] * 46 +input_flag[7] * 36 +input_flag[8] * 67 +input_flag[9] * 109 +input_flag[10] * 69 +input_flag[11] * 251 +input_flag[12] * 8 +input_flag[13] * 248 +input_flag[14] * 40 +input_flag[15] * 154 +input_flag[16] * 251 +input_flag[17] * 86 +input_flag[18] * 112 +input_flag[19] * 9 +input_flag[20] * 174 +input_flag[21] * 197 +input_flag[22] * 38 +input_flag[23] * 14 +input_flag[24] * 202 +input_flag[25] * 60 +input_flag[26] * 117 +input_flag[27] * 188 +input_flag[28] * 136 +input_flag[29] * 145 +input_flag[30] * 240 +input_flag[31] * 53 != 301487 ){return 0;} if(input_flag[0] * 152 +input_flag[1] * 162 +input_flag[2] * 112 +input_flag[3] * 57 +input_flag[4] * 102 +input_flag[5] * 182 +input_flag[6] * 10 +input_flag[7] * 139 +input_flag[8] * 30 +input_flag[9] * 7 +input_flag[10] * 145 +input_flag[11] * 127 +input_flag[12] * 148 +input_flag[13] * 5 +input_flag[14] * 165 +input_flag[15] * 109 +input_flag[16] * 110 +input_flag[17] * 234 +input_flag[18] * 113 +input_flag[19] * 33 +input_flag[20] * 192 +input_flag[21] * 45 +input_flag[22] * 65 +input_flag[23] * 105 +input_flag[24] * 140 +input_flag[25] * 116 +input_flag[26] * 35 +input_flag[27] * 48 +input_flag[28] * 155 +input_flag[29] * 25 +input_flag[30] * 234 +input_flag[31] * 25 != 296549 ){return 0;} if(input_flag[0] * 101 +input_flag[1] * 189 +input_flag[2] * 236 +input_flag[3] * 118 +input_flag[4] * 141 +input_flag[5] * 148 +input_flag[6] * 197 +input_flag[7] * 7 +input_flag[8] * 108 +input_flag[9] * 104 +input_flag[10] * 45 +input_flag[11] * 130 +input_flag[12] * 39 +input_flag[13] * 164 +input_flag[14] * 88 +input_flag[15] * 241 +input_flag[16] * 108 +input_flag[17] * 107 +input_flag[18] * 76 +input_flag[19] * 34 +input_flag[20] * 210 +input_flag[21] * 29 +input_flag[22] * 156 +input_flag[23] * 90 +input_flag[24] * 139 +input_flag[25] * 151 +input_flag[26] * 10 +input_flag[27] * 97 +input_flag[28] * 209 +input_flag[29] * 46 +input_flag[30] * 82 +input_flag[31] * 113 != 344514 ){return 0;} if(input_flag[0] * 182 +input_flag[1] * 13 +input_flag[2] * 50 +input_flag[3] * 102 +input_flag[4] * 155 +input_flag[5] * 230 +input_flag[6] * 3 +input_flag[7] * 225 +input_flag[8] * 237 +input_flag[9] * 163 +input_flag[10] * 38 +input_flag[11] * 176 +input_flag[12] * 115 +input_flag[13] * 105 +input_flag[14] * 203 +input_flag[15] * 26 +input_flag[16] * 72 +input_flag[17] * 111 +input_flag[18] * 96 +input_flag[19] * 240 +input_flag[20] * 139 +input_flag[21] * 117 +input_flag[22] * 153 +input_flag[23] * 120 +input_flag[24] * 151 +input_flag[25] * 25 +input_flag[26] * 49 +input_flag[27] * 90 +input_flag[28] * 98 +input_flag[29] * 7 +input_flag[30] * 179 +input_flag[31] * 72 != 346892 ){return 0;} if(input_flag[0] * 170 +input_flag[1] * 150 +input_flag[2] * 226 +input_flag[3] * 101 +input_flag[4] * 110 +input_flag[5] * 99 +input_flag[6] * 127 +input_flag[7] * 101 +input_flag[8] * 203 +input_flag[9] * 209 +input_flag[10] * 187 +input_flag[11] * 100 +input_flag[12] * 226 +input_flag[13] * 186 +input_flag[14] * 252 +input_flag[15] * 39 +input_flag[16] * 65 +input_flag[17] * 67 +input_flag[18] * 225 +input_flag[19] * 174 +input_flag[20] * 1 +input_flag[21] * 187 +input_flag[22] * 214 +input_flag[23] * 22 +input_flag[24] * 74 +input_flag[25] * 99 +input_flag[26] * 129 +input_flag[27] * 254 +input_flag[28] * 13 +input_flag[29] * 97 +input_flag[30] * 156 +input_flag[31] * 61 != 386678 ){return 0;} if(input_flag[0] * 1 +input_flag[1] * 88 +input_flag[2] * 118 +input_flag[3] * 232 +input_flag[4] * 60 +input_flag[5] * 252 +input_flag[6] * 133 +input_flag[7] * 177 +input_flag[8] * 185 +input_flag[9] * 222 +input_flag[10] * 32 +input_flag[11] * 48 +input_flag[12] * 1 +input_flag[13] * 242 +input_flag[14] * 240 +input_flag[15] * 218 +input_flag[16] * 81 +input_flag[17] * 22 +input_flag[18] * 73 +input_flag[19] * 171 +input_flag[20] * 139 +input_flag[21] * 72 +input_flag[22] * 106 +input_flag[23] * 62 +input_flag[24] * 156 +input_flag[25] * 134 +input_flag[26] * 220 +input_flag[27] * 19 +input_flag[28] * 77 +input_flag[29] * 94 +input_flag[30] * 154 +input_flag[31] * 117 != 348667 ){return 0;} if(input_flag[0] * 189 +input_flag[1] * 173 +input_flag[2] * 41 +input_flag[3] * 39 +input_flag[4] * 26 +input_flag[5] * 232 +input_flag[6] * 75 +input_flag[7] * 75 +input_flag[8] * 95 +input_flag[9] * 7 +input_flag[10] * 117 +input_flag[11] * 96 +input_flag[12] * 211 +input_flag[13] * 130 +input_flag[14] * 228 +input_flag[15] * 143 +input_flag[16] * 91 +input_flag[17] * 247 +input_flag[18] * 43 +input_flag[19] * 122 +input_flag[20] * 131 +input_flag[21] * 52 +input_flag[22] * 48 +input_flag[23] * 29 +input_flag[24] * 111 +input_flag[25] * 38 +input_flag[26] * 19 +input_flag[27] * 242 +input_flag[28] * 162 +input_flag[29] * 70 +input_flag[30] * 220 +input_flag[31] * 151 != 316884 ){return 0;} if(input_flag[0] * 236 +input_flag[1] * 136 +input_flag[2] * 147 +input_flag[3] * 104 +input_flag[4] * 79 +input_flag[5] * 204 +input_flag[6] * 220 +input_flag[7] * 25 +input_flag[8] * 38 +input_flag[9] * 233 +input_flag[10] * 165 +input_flag[11] * 20 +input_flag[12] * 174 +input_flag[13] * 120 +input_flag[14] * 214 +input_flag[15] * 18 +input_flag[16] * 233 +input_flag[17] * 119 +input_flag[18] * 244 +input_flag[19] * 143 +input_flag[20] * 126 +input_flag[21] * 226 +input_flag[22] * 77 +input_flag[23] * 33 +input_flag[24] * 189 +input_flag[25] * 5 +input_flag[26] * 150 +input_flag[27] * 160 +input_flag[28] * 14 +input_flag[29] * 112 +input_flag[30] * 231 +input_flag[31] * 92 != 372620 ){return 0;} if(input_flag[0] * 191 +input_flag[1] * 38 +input_flag[2] * 193 +input_flag[3] * 250 +input_flag[4] * 212 +input_flag[5] * 175 +input_flag[6] * 39 +input_flag[7] * 94 +input_flag[8] * 183 +input_flag[9] * 172 +input_flag[10] * 171 +input_flag[11] * 163 +input_flag[12] * 129 +input_flag[13] * 165 +input_flag[14] * 64 +input_flag[15] * 170 +input_flag[16] * 199 +input_flag[17] * 2 +input_flag[18] * 167 +input_flag[19] * 2 +input_flag[20] * 216 +input_flag[21] * 252 +input_flag[22] * 184 +input_flag[23] * 187 +input_flag[24] * 97 +input_flag[25] * 109 +input_flag[26] * 98 +input_flag[27] * 135 +input_flag[28] * 192 +input_flag[29] * 88 +input_flag[30] * 50 +input_flag[31] * 203 != 413102 ){return 0;} if(input_flag[0] * 203 +input_flag[1] * 81 +input_flag[2] * 252 +input_flag[3] * 104 +input_flag[4] * 248 +input_flag[5] * 156 +input_flag[6] * 199 +input_flag[7] * 46 +input_flag[8] * 208 +input_flag[9] * 240 +input_flag[10] * 149 +input_flag[11] * 155 +input_flag[12] * 102 +input_flag[13] * 95 +input_flag[14] * 51 +input_flag[15] * 208 +input_flag[16] * 208 +input_flag[17] * 62 +input_flag[18] * 58 +input_flag[19] * 117 +input_flag[20] * 72 +input_flag[21] * 23 +input_flag[22] * 193 +input_flag[23] * 193 +input_flag[24] * 226 +input_flag[25] * 217 +input_flag[26] * 106 +input_flag[27] * 147 +input_flag[28] * 136 +input_flag[29] * 16 +input_flag[30] * 43 +input_flag[31] * 196 != 428661 ){return 0;} if(input_flag[0] * 144 +input_flag[1] * 69 +input_flag[2] * 224 +input_flag[3] * 107 +input_flag[4] * 225 +input_flag[5] * 83 +input_flag[6] * 15 +input_flag[7] * 10 +input_flag[8] * 214 +input_flag[9] * 152 +input_flag[10] * 24 +input_flag[11] * 136 +input_flag[12] * 165 +input_flag[13] * 208 +input_flag[14] * 38 +input_flag[15] * 67 +input_flag[16] * 201 +input_flag[17] * 180 +input_flag[18] * 158 +input_flag[19] * 75 +input_flag[20] * 111 +input_flag[21] * 65 +input_flag[22] * 211 +input_flag[23] * 220 +input_flag[24] * 135 +input_flag[25] * 125 +input_flag[26] * 216 +input_flag[27] * 105 +input_flag[28] * 122 +input_flag[29] * 112 +input_flag[30] * 80 +input_flag[31] * 49 != 371484 ){return 0;} if(input_flag[0] * 143 +input_flag[1] * 68 +input_flag[2] * 127 +input_flag[3] * 51 +input_flag[4] * 152 +input_flag[5] * 88 +input_flag[6] * 153 +input_flag[7] * 9 +input_flag[8] * 149 +input_flag[9] * 107 +input_flag[10] * 178 +input_flag[11] * 166 +input_flag[12] * 190 +input_flag[13] * 177 +input_flag[14] * 99 +input_flag[15] * 71 +input_flag[16] * 63 +input_flag[17] * 233 +input_flag[18] * 58 +input_flag[19] * 132 +input_flag[20] * 109 +input_flag[21] * 75 +input_flag[22] * 152 +input_flag[23] * 95 +input_flag[24] * 74 +input_flag[25] * 195 +input_flag[26] * 90 +input_flag[27] * 251 +input_flag[28] * 205 +input_flag[29] * 8 +input_flag[30] * 76 +input_flag[31] * 129 != 350848 ){return 0;} if(input_flag[0] * 209 +input_flag[1] * 146 +input_flag[2] * 59 +input_flag[3] * 38 +input_flag[4] * 40 +input_flag[5] * 56 +input_flag[6] * 182 +input_flag[7] * 245 +input_flag[8] * 67 +input_flag[9] * 202 +input_flag[10] * 177 +input_flag[11] * 183 +input_flag[12] * 26 +input_flag[13] * 126 +input_flag[14] * 161 +input_flag[15] * 95 +input_flag[16] * 133 +input_flag[17] * 123 +input_flag[18] * 163 +input_flag[19] * 30 +input_flag[20] * 88 +input_flag[21] * 219 +input_flag[22] * 5 +input_flag[23] * 86 +input_flag[24] * 183 +input_flag[25] * 156 +input_flag[26] * 253 +input_flag[27] * 97 +input_flag[28] * 43 +input_flag[29] * 128 +input_flag[30] * 31 +input_flag[31] * 102 != 334408 ){return 0;} if(input_flag[0] * 146 +input_flag[1] * 223 +input_flag[2] * 137 +input_flag[3] * 228 +input_flag[4] * 226 +input_flag[5] * 155 +input_flag[6] * 170 +input_flag[7] * 92 +input_flag[8] * 77 +input_flag[9] * 17 +input_flag[10] * 22 +input_flag[11] * 128 +input_flag[12] * 20 +input_flag[13] * 171 +input_flag[14] * 142 +input_flag[15] * 170 +input_flag[16] * 192 +input_flag[17] * 49 +input_flag[18] * 200 +input_flag[19] * 178 +input_flag[20] * 154 +input_flag[21] * 42 +input_flag[22] * 5 +input_flag[23] * 159 +input_flag[24] * 251 +input_flag[25] * 152 +input_flag[26] * 7 +input_flag[27] * 247 +input_flag[28] * 145 +input_flag[29] * 39 +input_flag[30] * 91 +input_flag[31] * 136 != 382822 ){return 0;} if(input_flag[0] * 169 +input_flag[1] * 204 +input_flag[2] * 244 +input_flag[3] * 26 +input_flag[4] * 77 +input_flag[5] * 134 +input_flag[6] * 221 +input_flag[7] * 205 +input_flag[8] * 149 +input_flag[9] * 47 +input_flag[10] * 1 +input_flag[11] * 197 +input_flag[12] * 82 +input_flag[13] * 195 +input_flag[14] * 123 +input_flag[15] * 219 +input_flag[16] * 116 +input_flag[17] * 80 +input_flag[18] * 13 +input_flag[19] * 231 +input_flag[20] * 173 +input_flag[21] * 192 +input_flag[22] * 220 +input_flag[23] * 224 +input_flag[24] * 108 +input_flag[25] * 104 +input_flag[26] * 56 +input_flag[27] * 152 +input_flag[28] * 84 +input_flag[29] * 226 +input_flag[30] * 121 +input_flag[31] * 205 != 420160 ){return 0;} if(input_flag[0] * 184 +input_flag[1] * 45 +input_flag[2] * 176 +input_flag[3] * 126 +input_flag[4] * 118 +input_flag[5] * 161 +input_flag[6] * 142 +input_flag[7] * 171 +input_flag[8] * 215 +input_flag[9] * 83 +input_flag[10] * 233 +input_flag[11] * 184 +input_flag[12] * 171 +input_flag[13] * 182 +input_flag[14] * 126 +input_flag[15] * 111 +input_flag[16] * 118 +input_flag[17] * 67 +input_flag[18] * 92 +input_flag[19] * 219 +input_flag[20] * 70 +input_flag[21] * 252 +input_flag[22] * 194 +input_flag[23] * 21 +input_flag[24] * 245 +input_flag[25] * 204 +input_flag[26] * 48 +input_flag[27] * 150 +input_flag[28] * 39 +input_flag[29] * 85 +input_flag[30] * 73 +input_flag[31] * 95 != 402263 ){return 0;} if(input_flag[0] * 48 +input_flag[1] * 224 +input_flag[2] * 164 +input_flag[3] * 138 +input_flag[4] * 92 +input_flag[5] * 3 +input_flag[6] * 191 +input_flag[7] * 94 +input_flag[8] * 19 +input_flag[9] * 50 +input_flag[10] * 34 +input_flag[11] * 167 +input_flag[12] * 75 +input_flag[13] * 72 +input_flag[14] * 238 +input_flag[15] * 15 +input_flag[16] * 111 +input_flag[17] * 216 +input_flag[18] * 84 +input_flag[19] * 40 +input_flag[20] * 145 +input_flag[21] * 112 +input_flag[22] * 140 +input_flag[23] * 204 +input_flag[24] * 154 +input_flag[25] * 195 +input_flag[26] * 175 +input_flag[27] * 250 +input_flag[28] * 202 +input_flag[29] * 169 +input_flag[30] * 170 +input_flag[31] * 120 != 366968 ){return 0;} if(input_flag[0] * 112 +input_flag[1] * 19 +input_flag[2] * 189 +input_flag[3] * 50 +input_flag[4] * 247 +input_flag[5] * 240 +input_flag[6] * 164 +input_flag[7] * 5 +input_flag[8] * 139 +input_flag[9] * 56 +input_flag[10] * 19 +input_flag[11] * 4 +input_flag[12] * 23 +input_flag[13] * 172 +input_flag[14] * 96 +input_flag[15] * 254 +input_flag[16] * 63 +input_flag[17] * 247 +input_flag[18] * 149 +input_flag[19] * 183 +input_flag[20] * 128 +input_flag[21] * 147 +input_flag[22] * 213 +input_flag[23] * 243 +input_flag[24] * 172 +input_flag[25] * 144 +input_flag[26] * 246 +input_flag[27] * 25 +input_flag[28] * 106 +input_flag[29] * 176 +input_flag[30] * 170 +input_flag[31] * 68 != 384909 ){return 0;} if(input_flag[0] * 184 +input_flag[1] * 22 +input_flag[2] * 183 +input_flag[3] * 128 +input_flag[4] * 149 +input_flag[5] * 174 +input_flag[6] * 227 +input_flag[7] * 113 +input_flag[8] * 65 +input_flag[9] * 159 +input_flag[10] * 74 +input_flag[11] * 170 +input_flag[12] * 186 +input_flag[13] * 174 +input_flag[14] * 211 +input_flag[15] * 1 +input_flag[16] * 223 +input_flag[17] * 156 +input_flag[18] * 253 +input_flag[19] * 223 +input_flag[20] * 241 +input_flag[21] * 252 +input_flag[22] * 148 +input_flag[23] * 93 +input_flag[24] * 41 +input_flag[25] * 125 +input_flag[26] * 27 +input_flag[27] * 136 +input_flag[28] * 78 +input_flag[29] * 248 +input_flag[30] * 41 +input_flag[31] * 31 != 425203 ){return 0;} if(input_flag[0] * 155 +input_flag[1] * 237 +input_flag[2] * 242 +input_flag[3] * 10 +input_flag[4] * 145 +input_flag[5] * 99 +input_flag[6] * 239 +input_flag[7] * 105 +input_flag[8] * 3 +input_flag[9] * 43 +input_flag[10] * 46 +input_flag[11] * 155 +input_flag[12] * 208 +input_flag[13] * 75 +input_flag[14] * 140 +input_flag[15] * 181 +input_flag[16] * 197 +input_flag[17] * 140 +input_flag[18] * 10 +input_flag[19] * 170 +input_flag[20] * 142 +input_flag[21] * 212 +input_flag[22] * 186 +input_flag[23] * 27 +input_flag[24] * 105 +input_flag[25] * 118 +input_flag[26] * 198 +input_flag[27] * 243 +input_flag[28] * 13 +input_flag[29] * 113 +input_flag[30] * 82 +input_flag[31] * 39 != 372162 ){return 0;} if(input_flag[0] * 207 +input_flag[1] * 206 +input_flag[2] * 127 +input_flag[3] * 58 +input_flag[4] * 91 +input_flag[5] * 87 +input_flag[6] * 7 +input_flag[7] * 17 +input_flag[8] * 63 +input_flag[9] * 180 +input_flag[10] * 40 +input_flag[11] * 96 +input_flag[12] * 202 +input_flag[13] * 185 +input_flag[14] * 68 +input_flag[15] * 72 +input_flag[16] * 240 +input_flag[17] * 36 +input_flag[18] * 139 +input_flag[19] * 199 +input_flag[20] * 76 +input_flag[21] * 229 +input_flag[22] * 159 +input_flag[23] * 136 +input_flag[24] * 94 +input_flag[25] * 19 +input_flag[26] * 3 +input_flag[27] * 87 +input_flag[28] * 45 +input_flag[29] * 6 +input_flag[30] * 136 +input_flag[31] * 50 != 297509 ){return 0;} if(input_flag[0] * 115 +input_flag[1] * 215 +input_flag[2] * 40 +input_flag[3] * 166 +input_flag[4] * 87 +input_flag[5] * 83 +input_flag[6] * 74 +input_flag[7] * 202 +input_flag[8] * 235 +input_flag[9] * 149 +input_flag[10] * 114 +input_flag[11] * 76 +input_flag[12] * 204 +input_flag[13] * 218 +input_flag[14] * 63 +input_flag[15] * 123 +input_flag[16] * 9 +input_flag[17] * 172 +input_flag[18] * 38 +input_flag[19] * 138 +input_flag[20] * 35 +input_flag[21] * 200 +input_flag[22] * 221 +input_flag[23] * 144 +input_flag[24] * 235 +input_flag[25] * 108 +input_flag[26] * 1 +input_flag[27] * 245 +input_flag[28] * 153 +input_flag[29] * 184 +input_flag[30] * 90 +input_flag[31] * 12 != 372215 ){return 0;} if(input_flag[0] * 123 +input_flag[1] * 190 +input_flag[2] * 55 +input_flag[3] * 180 +input_flag[4] * 84 +input_flag[5] * 231 +input_flag[6] * 81 +input_flag[7] * 116 +input_flag[8] * 61 +input_flag[9] * 3 +input_flag[10] * 94 +input_flag[11] * 85 +input_flag[12] * 190 +input_flag[13] * 187 +input_flag[14] * 142 +input_flag[15] * 62 +input_flag[16] * 225 +input_flag[17] * 240 +input_flag[18] * 179 +input_flag[19] * 150 +input_flag[20] * 77 +input_flag[21] * 85 +input_flag[22] * 196 +input_flag[23] * 12 +input_flag[24] * 144 +input_flag[25] * 122 +input_flag[26] * 28 +input_flag[27] * 224 +input_flag[28] * 248 +input_flag[29] * 143 +input_flag[30] * 114 +input_flag[31] * 36 != 370337 ){return 0;} if(input_flag[0] * 2 +input_flag[1] * 202 +input_flag[2] * 40 +input_flag[3] * 224 +input_flag[4] * 154 +input_flag[5] * 65 +input_flag[6] * 30 +input_flag[7] * 241 +input_flag[8] * 13 +input_flag[9] * 213 +input_flag[10] * 176 +input_flag[11] * 122 +input_flag[12] * 30 +input_flag[13] * 158 +input_flag[14] * 14 +input_flag[15] * 191 +input_flag[16] * 80 +input_flag[17] * 116 +input_flag[18] * 74 +input_flag[19] * 70 +input_flag[20] * 32 +input_flag[21] * 189 +input_flag[22] * 76 +input_flag[23] * 95 +input_flag[24] * 158 +input_flag[25] * 103 +input_flag[26] * 7 +input_flag[27] * 201 +input_flag[28] * 204 +input_flag[29] * 91 +input_flag[30] * 190 +input_flag[31] * 122 != 314564 ){return 0;} if(input_flag[0] * 42 +input_flag[1] * 154 +input_flag[2] * 223 +input_flag[3] * 165 +input_flag[4] * 155 +input_flag[5] * 101 +input_flag[6] * 75 +input_flag[7] * 95 +input_flag[8] * 253 +input_flag[9] * 14 +input_flag[10] * 158 +input_flag[11] * 199 +input_flag[12] * 110 +input_flag[13] * 89 +input_flag[14] * 205 +input_flag[15] * 202 +input_flag[16] * 83 +input_flag[17] * 162 +input_flag[18] * 67 +input_flag[19] * 30 +input_flag[20] * 115 +input_flag[21] * 83 +input_flag[22] * 27 +input_flag[23] * 31 +input_flag[24] * 118 +input_flag[25] * 160 +input_flag[26] * 248 +input_flag[27] * 66 +input_flag[28] * 88 +input_flag[29] * 44 +input_flag[30] * 5 +input_flag[31] * 176 != 325974 ){return 0;} if(input_flag[0] * 34 +input_flag[1] * 168 +input_flag[2] * 72 +input_flag[3] * 160 +input_flag[4] * 243 +input_flag[5] * 41 +input_flag[6] * 146 +input_flag[7] * 29 +input_flag[8] * 62 +input_flag[9] * 235 +input_flag[10] * 185 +input_flag[11] * 180 +input_flag[12] * 10 +input_flag[13] * 150 +input_flag[14] * 208 +input_flag[15] * 140 +input_flag[16] * 125 +input_flag[17] * 114 +input_flag[18] * 35 +input_flag[19] * 34 +input_flag[20] * 38 +input_flag[21] * 123 +input_flag[22] * 163 +input_flag[23] * 208 +input_flag[24] * 5 +input_flag[25] * 29 +input_flag[26] * 207 +input_flag[27] * 111 +input_flag[28] * 72 +input_flag[29] * 65 +input_flag[30] * 125 +input_flag[31] * 84 != 307088 ){return 0;} if(input_flag[0] * 18 +input_flag[1] * 11 +input_flag[2] * 26 +input_flag[3] * 175 +input_flag[4] * 44 +input_flag[5] * 128 +input_flag[6] * 32 +input_flag[7] * 100 +input_flag[8] * 21 +input_flag[9] * 116 +input_flag[10] * 253 +input_flag[11] * 213 +input_flag[12] * 67 +input_flag[13] * 16 +input_flag[14] * 171 +input_flag[15] * 178 +input_flag[16] * 97 +input_flag[17] * 7 +input_flag[18] * 162 +input_flag[19] * 152 +input_flag[20] * 78 +input_flag[21] * 167 +input_flag[22] * 177 +input_flag[23] * 97 +input_flag[24] * 26 +input_flag[25] * 155 +input_flag[26] * 127 +input_flag[27] * 21 +input_flag[28] * 243 +input_flag[29] * 188 +input_flag[30] * 140 +input_flag[31] * 197 != 322340 ){return 0;} if(input_flag[0] * 140 +input_flag[1] * 110 +input_flag[2] * 164 +input_flag[3] * 208 +input_flag[4] * 72 +input_flag[5] * 113 +input_flag[6] * 9 +input_flag[7] * 47 +input_flag[8] * 179 +input_flag[9] * 166 +input_flag[10] * 51 +input_flag[11] * 34 +input_flag[12] * 91 +input_flag[13] * 184 +input_flag[14] * 89 +input_flag[15] * 162 +input_flag[16] * 233 +input_flag[17] * 127 +input_flag[18] * 156 +input_flag[19] * 127 +input_flag[20] * 244 +input_flag[21] * 183 +input_flag[22] * 193 +input_flag[23] * 138 +input_flag[24] * 242 +input_flag[25] * 90 +input_flag[26] * 193 +input_flag[27] * 7 +input_flag[28] * 252 +input_flag[29] * 113 +input_flag[30] * 152 +input_flag[31] * 7 != 380716 ){return 0;} if(input_flag[0] * 133 +input_flag[1] * 105 +input_flag[2] * 75 +input_flag[3] * 146 +input_flag[4] * 173 +input_flag[5] * 27 +input_flag[6] * 97 +input_flag[7] * 142 +input_flag[8] * 164 +input_flag[9] * 15 +input_flag[10] * 10 +input_flag[11] * 177 +input_flag[12] * 239 +input_flag[13] * 141 +input_flag[14] * 189 +input_flag[15] * 67 +input_flag[16] * 153 +input_flag[17] * 108 +input_flag[18] * 206 +input_flag[19] * 210 +input_flag[20] * 171 +input_flag[21] * 252 +input_flag[22] * 84 +input_flag[23] * 249 +input_flag[24] * 7 +input_flag[25] * 168 +input_flag[26] * 100 +input_flag[27] * 30 +input_flag[28] * 196 +input_flag[29] * 244 +input_flag[30] * 197 +input_flag[31] * 75 != 393331 ){return 0;} if(input_flag[0] * 147 +input_flag[1] * 221 +input_flag[2] * 57 +input_flag[3] * 186 +input_flag[4] * 69 +input_flag[5] * 230 +input_flag[6] * 167 +input_flag[7] * 3 +input_flag[8] * 220 +input_flag[9] * 63 +input_flag[10] * 218 +input_flag[11] * 235 +input_flag[12] * 156 +input_flag[13] * 146 +input_flag[14] * 75 +input_flag[15] * 198 +input_flag[16] * 204 +input_flag[17] * 197 +input_flag[18] * 59 +input_flag[19] * 61 +input_flag[20] * 179 +input_flag[21] * 47 +input_flag[22] * 221 +input_flag[23] * 127 +input_flag[24] * 210 +input_flag[25] * 218 +input_flag[26] * 241 +input_flag[27] * 135 +input_flag[28] * 196 +input_flag[29] * 185 +input_flag[30] * 53 +input_flag[31] * 79 != 430295 ){return 0;} return 1; }
最根本的算法就是一个32*32的线性方程组,函数为xxx(),而o,oo等八个函数只是简单的做了一个异或运算,迷惑解题者。
线性方程组的A和b为:
108, 111, 92, 194, 124, 240, 126, 81, 144, 103, 161, 50, 67, 15, 127, 232, 188, 19, 233, 153, 231, 40, 112, 106, 135, 90, 67, 20, 248, 45, 48, 174 227, 78, 195, 81, 10, 248, 186, 171, 148, 194, 40, 180, 17, 212, 104, 90, 178, 26, 225, 209, 32, 169, 94, 156, 154, 56, 244, 149, 120, 131, 13, 101 83, 44, 95, 131, 30, 55, 46, 36, 67, 109, 69, 251, 8, 248, 40, 154, 251, 86, 112, 9, 174, 197, 38, 14, 202, 60, 117, 188, 136, 145, 240, 53 152, 162, 112, 57, 102, 182, 10, 139, 30, 7, 145, 127, 148, 5, 165, 109, 110, 234, 113, 33, 192, 45, 65, 105, 140,116, 35, 48, 155, 25, 234, 25 101, 189, 236, 118, 141, 148, 197, 7, 108, 104, 45, 130, 39, 164, 88, 241, 108, 107, 76, 34, 210, 29, 156, 90, 139, 151, 10, 97, 209, 46, 82, 113 182,13, 50, 102, 155, 230, 3, 225, 237, 163, 38, 176, 115, 105, 203, 26, 72, 111, 96, 240, 139, 117, 153, 120, 151, 25, 49, 90, 98, 7, 179, 72 170, 150, 226, 101, 110, 99, 127, 101, 203, 209, 187, 100, 226, 186, 252, 39, 65, 67, 225, 174, 1, 187, 214, 22, 74, 99, 129, 254, 13, 97, 156, 61 1, 88, 118, 232, 60, 252, 133, 177, 185, 222, 32, 48, 1, 242, 240, 218, 81, 22, 73, 171, 139, 72, 106, 62, 156, 134, 220, 19, 77, 94, 154, 117 189, 173, 41, 39, 26, 232, 75, 75, 95, 7, 117, 96, 211, 130, 228, 143, 91, 247, 43, 122, 131, 52, 48, 29, 111, 38, 19, 242, 162, 70, 220, 151 236, 136, 147, 104, 79, 204, 220, 25, 38, 233, 165, 20, 174, 120, 214, 18, 233, 119, 244, 143, 126, 226, 77, 33, 189, 5, 150, 160, 14, 112, 231, 92 191, 38, 193,250, 212, 175, 39, 94, 183, 172, 171, 163, 129, 165, 64, 170, 199, 2, 167, 2, 216, 252, 184, 187, 97, 109, 98, 135, 192, 88, 50, 203 203, 81, 252, 104, 248, 156, 199, 46, 208, 240, 149, 155, 102, 95, 51, 208, 208, 62, 58, 117, 72, 23, 193, 193, 226, 217, 106, 147, 136, 16, 43, 196 144, 69, 224, 107, 225, 83, 15, 10, 214, 152, 24, 136, 165, 208, 38, 67, 201, 180, 158, 75, 111, 65, 211, 220, 135, 125, 216, 105, 122, 112, 80, 49 143, 68, 127, 51, 152, 88, 153, 9, 149, 107, 178, 166, 190, 177, 99, 71, 63, 233, 58, 132, 109, 75, 152, 95, 74, 195, 90,251, 205, 8, 76, 129 209, 146, 59, 38, 40, 56, 182, 245, 67, 202, 177, 183, 26, 126, 161, 95, 133, 123, 163, 30, 88, 219, 5, 86, 183, 156, 253, 97, 43, 128, 31, 102 146, 223, 137, 228, 226, 155, 170, 92, 77, 17, 22, 128, 20, 171, 142, 170, 192, 49, 200, 178, 154, 42, 5, 159, 251, 152, 7, 247, 145, 39, 91, 136 169, 204, 244, 26, 77, 134, 221, 205, 149, 47, 1, 197, 82, 195, 123, 219, 116, 80, 13, 231, 173, 192, 220, 224, 108, 104, 56, 152, 84, 226, 121, 205 184, 45, 176, 126, 118, 161, 142, 171, 215, 83, 233, 184, 171, 182, 126, 111, 118, 67, 92, 219, 70, 252, 194, 21, 245, 204, 48, 150, 39, 85, 73, 95 48, 224, 164, 138, 92, 3, 191, 94, 19, 50, 34, 167, 75, 72, 238, 15, 111, 216, 84, 40, 145, 112, 140, 204, 154, 195, 175, 250, 202, 169, 170, 120 112, 19, 189, 50, 247, 240, 164, 5, 139, 56, 19, 4, 23, 172, 96, 254, 63, 247, 149, 183, 128, 147, 213, 243, 172, 144, 246, 25, 106, 176, 170, 68 184, 22, 183,128, 149, 174, 227, 113, 65, 159, 74, 170, 186, 174, 211, 1, 223, 156, 253, 223, 241, 252, 148, 93, 41, 125, 27, 136, 78, 248, 41, 31 155, 237, 242, 10, 145, 99, 239, 105, 3, 43, 46, 155, 208, 75, 140, 181, 197, 140, 10, 170, 142, 212, 186, 27, 105, 118, 198, 243, 13, 113, 82, 39 207, 206, 127, 58, 91, 87, 7, 17, 63, 180, 40, 96, 202, 185, 68, 72, 240, 36, 139, 199, 76, 229, 159, 136, 94, 19, 3, 87, 45, 6, 136, 50 115, 215, 40, 166, 87, 83, 74, 202, 235, 149, 114, 76, 204, 218, 63, 123, 9, 172, 38, 138, 35, 200, 221, 144, 235, 108, 1, 245, 153, 184, 90, 12 123, 190, 55, 180, 84, 231, 81, 116, 61, 3, 94, 85, 190, 187, 142, 62, 225, 240, 179, 150, 77, 85, 196, 12, 144, 122, 28, 224, 248, 143, 114, 36 2, 202, 40, 224, 154, 65, 30, 241, 13, 213, 176, 122, 30, 158, 14, 191, 80, 116, 74, 70, 32, 189, 76, 95, 158, 103, 7, 201, 204, 91, 190, 122 42, 154, 223, 165, 155, 101, 75, 95, 253, 14, 158, 199, 110, 89, 205, 202, 83, 162, 67, 30, 115, 83, 27, 31, 118, 160, 248, 66, 88, 44, 5, 176 34, 168, 72, 160, 243, 41, 146, 29, 62, 235, 185, 180, 10, 150, 208, 140, 125, 114, 35, 34, 38, 123, 163, 208, 5, 29, 207, 111, 72, 65, 125, 84 18, 11, 26, 175, 44, 128, 32, 100, 21, 116, 253, 213, 67, 16, 171, 178, 97, 7, 162, 152, 78, 167, 177, 97, 26, 155, 127, 21, 243, 188, 140, 197 140, 110, 164, 208, 72, 113, 9, 47, 179, 166, 51, 34, 91, 184, 89, 162, 233, 127, 156, 127, 244, 183, 193, 138, 242, 90, 193, 7, 252, 113, 152, 7 133, 105, 75, 146, 173, 27, 97, 142, 164, 15, 10, 177, 239, 141, 189, 67, 153, 108, 206, 210, 171, 252, 84, 249, 7, 168, 100, 30, 196, 244, 197, 75 147, 221, 57, 186, 69, 230, 167, 3, 220, 63, 218, 235, 156, 146, 75, 198, 204, 197, 59, 61, 179, 47, 221, 127, 210, 218, 241, 135, 196, 185, 53, 79
b
359512 387514 301487 296549 344514 346892 386678 348667 316884 372620 413102 428661 371484 350848 334408 382822 420160 402263 366968 384909 425203 372162 297509 372215 370337 314564 325974 307088 322340 380716 393331 430295
解题者需要利用脚本文件去读取这些参数并求解。解为S0m3time_l1tt1e_c0de_1s_us3ful33
而由于o,oo,等八个函数只是做异或运算,可以得到flag为K9nXu3_2o1q2_w3bassembly_r3vers3
安卓程序
只有一个activiy,其中最主要的是一个webview,通过loadurl(127.0.0.1:8000)来解析html。但是程序中还写了一个textview,一个button和一个edittext来迷惑解题者。
主要代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); eText1 = findViewById(R.id.editText); txView1 = findViewById(R.id.textView); ((WebView) findViewById(R.id.text1View)).loadUrl(u); ((WebView) findViewById(R.id.text1View)).getSettings().setJavaScriptEnabled(true); button1 = findViewById(R.id.button); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String key = eText1.getText().toString(); int ret = check_key(key); if(ret == 1){ txView1.setText("Congratulations!"); } else{ txView1.setText("Not Correct!"); } } }); }
native的函数主要工作为,实现一个简单的http服务器,内容为上面的wasm代码。
代码如下:
// // Created by foyjog on 2019/5/27. // #include <jni.h> #include <netdb.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/wait.h> #include <signal.h> #include <pthread.h> #include "com_example_assemgogogo_gogogoJNI.h" #define PORT "8000" // The port users will connect to #define BACKLOG 128 // how many pending connections queue will hold #define NUM_THREADS 8 // get sockaddr, IPv4 or IPv6 void* j_nullsub__ (struct sockaddr* sa) { if (sa->sa_family == AF_INET) { return &(((struct sockaddr_in*) sa)->sin_addr); } else { return &(((struct sockaddr_in6*) sa)->sin6_addr); } } struct ThreadData { int sockfd; char* body; }; int sock_fd_g = 0; void* _nullsub_ (void* td) { int new_fd, id = (int) pthread_self(); struct ThreadData* data = (struct ThreadData*) td; struct sockaddr_storage their_addr; // connector's address socklen_t sin_size = sizeof their_addr; char s [INET6_ADDRSTRLEN], buf [50000]; const char* const msg = mm0; const char* const fmt_header = "HTTP/1.1 200 OK\r\n" "Content-Type: text/html; charset=utf-8\r\n" "Content-Length: %ld\r\n" "\r\n" "%s"; while (1) { new_fd = accept(data->sockfd, (struct sockaddr*) &their_addr, &sin_size); if (new_fd == -1) { continue; } inet_ntop(their_addr.ss_family, j_nullsub__((struct sockaddr*) &their_addr), s, sizeof s); snprintf(buf, 50000, fmt_header, strlen(msg), msg); if (send(new_fd, buf, strlen(buf), 0) == -1) { perror("send"); } close(new_fd); } return NULL; } int inti_proc() { int sockfd; // listen on sock_fd, new connection on new_fd struct addrinfo hints, *servinfo, *p; int yes = 1; int rv; for(int ii=0;ii<34291;ii++){ mm0[ii] = mm0[ii] ^ 0x67; } hints = (struct addrinfo) { .ai_family = AF_UNSPEC, .ai_socktype = SOCK_STREAM, .ai_flags = AI_PASSIVE // use my IP }; if ((rv = getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) { return 1; } // loop through all results and bind to the first we can for (p = servinfo; p != NULL; p = p->ai_next) { if ((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { continue; } if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof (int)) == -1) { return 1; } if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1) { close(sockfd); continue; } break; } if (p == NULL) { return 2; } freeaddrinfo(servinfo); // all done with this struct if (listen(sockfd, BACKLOG) == -1) { return 1; } pthread_t threads [NUM_THREADS]; for (int i = 0; i < NUM_THREADS; ++i) { pthread_create(&threads[i], NULL, _nullsub_, &(struct ThreadData) { .sockfd = sockfd }); } sock_fd_g = sockfd; } JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { inti_proc(); return JNI_VERSION_1_4; } JNIEXPORT jstring JNICALL Java_com_example_assemgogogo_gogogoJNI_sayHello( JNIEnv *env, jclass cls) { char uu[] = {0xe , 0x12 , 0x12 , 0x16 , 0x5c , 0x49 , 0x49 , 0x57 , 0x54 , 0x51 , 0x48 , 0x56 , 0x48 , 0x56 , 0x48 , 0x57 , 0x5c , 0x5e , 0x56 , 0x56 , 0x56}; char zz[128] = {0}; int ii=0; for(ii=0;ii<21;ii++) { zz[ii] = uu[ii] ^ 0x66; } zz[21] = 0; return (*env)->NewStringUTF(env, zz); } JNIEXPORT jint JNICALL Java_com_example_assemgogogo_gogogoJNI_check_key (JNIEnv *env, jclass cls, jstring j_str){ char* flag = "d584a68d4e213d88w511v48e61g8d6e8"; const char *c_str = NULL; char buff[128] = { 0 }; c_str = (*env)->GetStringUTFChars(env, j_str, NULL); if (c_str == NULL) { return NULL; } (*env)->ReleaseStringUTFChars(env, j_str, c_str); srand((unsigned) flag[10]); for(int ii=0;ii<32;ii++){ int randNum = rand() % 128; if(c_str[ii] ^ randNum != flag[ii]){ return 0; } } close(sock_fd_g); return 1; }
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课