ASCWG Finals CTF 2023 Reverse Engineering Challenges

Mr Robot
7 min readNov 13, 2023

--

Hi Every Body , This Is 0xMrRobot

From Time To Time , I Get Into Some CTFs To Practice More And Develop My Skills In Reverse Engineering..

It Pleases Me To Get Into ASCWG Finals CTF 2023 And Solve 1 OF 4 Reverse Challenges In This Competition And This Is My Write Up For This Challenge… ❤

1- Ghostly Kisses

Challenge Name : Ghostly Kisses
Challenge Diff : Easy
Challenge Link : https://drive.google.com/drive/folders/1kw_jtvYwW3v-YUvUNGyK7Wcpdk-FDPRd?usp=sharing

After Download The Folder , We Will Find Two Files :

  • The First Has The Encrypted Flag
  • The Second Has Bytecode Of Python Script

And This Is The Bytecode :

  1           0 LOAD_CONST               0 (0)
2 LOAD_CONST 1 (None)
4 IMPORT_NAME 0 (hashlib)
6 STORE_NAME 0 (hashlib)

3 8 LOAD_CONST 2 (<code object weirdo at 0x000001BA0CD19D40, file "Challenge.py", line 3>)
10 LOAD_CONST 3 ('weirdo')
12 MAKE_FUNCTION 0
14 STORE_NAME 1 (weirdo)

18 16 LOAD_NAME 2 (open)
18 LOAD_CONST 4 ('Flag.txt')
20 LOAD_CONST 5 ('r')
22 CALL_FUNCTION 2
24 SETUP_WITH 96 (to 122)
26 STORE_NAME 3 (f)

19 28 LOAD_NAME 3 (f)
30 LOAD_METHOD 4 (read)
32 CALL_METHOD 0
34 LOAD_METHOD 5 (strip)
36 CALL_METHOD 0
38 STORE_NAME 6 (flag)

20 40 BUILD_LIST 0
42 STORE_NAME 7 (Hashes)

21 44 LOAD_NAME 6 (flag)
46 GET_ITER
>> 48 FOR_ITER 22 (to 72)
50 STORE_NAME 8 (char)

22 52 LOAD_NAME 1 (weirdo)
54 LOAD_NAME 8 (char)
56 CALL_FUNCTION 1
58 STORE_NAME 9 (hsh)

23 60 LOAD_NAME 7 (Hashes)
62 LOAD_METHOD 10 (append)
64 LOAD_NAME 9 (hsh)
66 CALL_METHOD 1
68 POP_TOP
70 JUMP_ABSOLUTE 48

24 >> 72 LOAD_NAME 2 (open)
74 LOAD_CONST 6 ('Flag')
76 LOAD_CONST 7 ('w')
78 CALL_FUNCTION 2
80 SETUP_WITH 30 (to 112)
82 STORE_NAME 11 (w)

25 84 LOAD_NAME 7 (Hashes)
86 GET_ITER
>> 88 FOR_ITER 18 (to 108)
90 STORE_NAME 12 (i)

26 92 LOAD_NAME 11 (w)
94 LOAD_METHOD 13 (write)
96 LOAD_NAME 12 (i)
98 LOAD_CONST 8 ('\n')
100 BINARY_ADD
102 CALL_METHOD 1
104 POP_TOP
106 JUMP_ABSOLUTE 88
>> 108 POP_BLOCK
110 BEGIN_FINALLY
>> 112 WITH_CLEANUP_START
114 WITH_CLEANUP_FINISH
116 END_FINALLY
118 POP_BLOCK
120 BEGIN_FINALLY
>> 122 WITH_CLEANUP_START
124 WITH_CLEANUP_FINISH
126 END_FINALLY
128 LOAD_CONST 1 (None)
130 RETURN_VALUE

Disassembly of <code object weirdo at 0x000001BA0CD19D40, file "Challenge.py", line 3>:
4 0 LOAD_GLOBAL 0 (hashlib)
2 LOAD_METHOD 1 (md5)
4 LOAD_FAST 0 (ch)
6 LOAD_METHOD 2 (encode)
8 CALL_METHOD 0
10 CALL_METHOD 1
12 LOAD_METHOD 3 (hexdigest)
14 CALL_METHOD 0
16 STORE_FAST 1 (data)

5 18 LOAD_GLOBAL 4 (range)
20 LOAD_CONST 1 (1000)
22 CALL_FUNCTION 1
24 GET_ITER
>> 26 FOR_ITER 162 (to 190)
28 STORE_FAST 2 (i)

6 30 LOAD_FAST 2 (i)
32 LOAD_CONST 2 (2)
34 BINARY_MODULO
36 LOAD_CONST 3 (0)
38 COMPARE_OP 2 (==)
40 POP_JUMP_IF_FALSE 62

7 42 LOAD_GLOBAL 0 (hashlib)
44 LOAD_METHOD 5 (sha1)
46 LOAD_FAST 1 (data)
48 LOAD_METHOD 2 (encode)
50 CALL_METHOD 0
52 CALL_METHOD 1
54 LOAD_METHOD 3 (hexdigest)
56 CALL_METHOD 0
58 STORE_FAST 1 (data)
60 JUMP_ABSOLUTE 26

8 >> 62 LOAD_FAST 2 (i)
64 LOAD_CONST 4 (7)
66 BINARY_MODULO
68 LOAD_CONST 3 (0)
70 COMPARE_OP 2 (==)
72 POP_JUMP_IF_FALSE 94

9 74 LOAD_GLOBAL 0 (hashlib)
76 LOAD_METHOD 6 (sha256)
78 LOAD_FAST 1 (data)
80 LOAD_METHOD 2 (encode)
82 CALL_METHOD 0
84 CALL_METHOD 1
86 LOAD_METHOD 3 (hexdigest)
88 CALL_METHOD 0
90 STORE_FAST 1 (data)
92 JUMP_ABSOLUTE 26

10 >> 94 LOAD_FAST 2 (i)
96 LOAD_CONST 5 (3)
98 BINARY_MODULO
100 LOAD_CONST 3 (0)
102 COMPARE_OP 2 (==)
104 POP_JUMP_IF_FALSE 126

11 106 LOAD_GLOBAL 0 (hashlib)
108 LOAD_METHOD 7 (sha512)
110 LOAD_FAST 1 (data)
112 LOAD_METHOD 2 (encode)
114 CALL_METHOD 0
116 CALL_METHOD 1
118 LOAD_METHOD 3 (hexdigest)
120 CALL_METHOD 0
122 STORE_FAST 1 (data)
124 JUMP_ABSOLUTE 26

12 >> 126 LOAD_FAST 2 (i)
128 LOAD_CONST 6 (11)
130 BINARY_MODULO
132 LOAD_CONST 3 (0)
134 COMPARE_OP 2 (==)
136 POP_JUMP_IF_FALSE 158

13 138 LOAD_GLOBAL 0 (hashlib)
140 LOAD_METHOD 1 (md5)
142 LOAD_FAST 1 (data)
144 LOAD_METHOD 2 (encode)
146 CALL_METHOD 0
148 CALL_METHOD 1
150 LOAD_METHOD 3 (hexdigest)
152 CALL_METHOD 0
154 STORE_FAST 1 (data)
156 JUMP_ABSOLUTE 26

14 >> 158 LOAD_FAST 2 (i)
160 LOAD_CONST 7 (5)
162 BINARY_MODULO
164 LOAD_CONST 3 (0)
166 COMPARE_OP 2 (==)
168 POP_JUMP_IF_FALSE 26

15 170 LOAD_GLOBAL 0 (hashlib)
172 LOAD_METHOD 8 (sha384)
174 LOAD_FAST 1 (data)
176 LOAD_METHOD 2 (encode)
178 CALL_METHOD 0
180 CALL_METHOD 1
182 LOAD_METHOD 3 (hexdigest)
184 CALL_METHOD 0
186 STORE_FAST 1 (data)
188 JUMP_ABSOLUTE 26

16 >> 190 LOAD_GLOBAL 0 (hashlib)
192 LOAD_METHOD 7 (sha512)
194 LOAD_FAST 1 (data)
196 LOAD_METHOD 2 (encode)
198 CALL_METHOD 0
200 CALL_METHOD 1
202 LOAD_METHOD 3 (hexdigest)
204 CALL_METHOD 0
206 RETURN_VALUE

This Code Is For Python Code , So Let’s Check It And Divide It To Sections To Write The Original Python Code Like In The (TCP/IP Reverse Engineering Challenge Write Up In My Blog )

After Long Time From Reading This Byte Code And Translate It Into Python Code With Assistance From AI , This Is The Original Script Code :

import hashlib

def weirdo(ch):
data = hashlib.md5(ch.encode()).hexdigest()
for i in range(1000):
if i % 2 == 0:
data = hashlib.sha1(data.encode()).hexdigest()
elif i % 7 == 0:
data = hashlib.sha256(data.encode()).hexdigest()
elif i % 3 == 0:
data = hashlib.sha512(data.encode()).hexdigest()
elif i % 11 == 0:
data = hashlib.md5(data.encode()).hexdigest()
elif i % 5 == 0:
data = hashlib.sha384(data.encode()).hexdigest()
return hashlib.sha512(data.encode()).hexdigest()

with open('Flag.txt', 'r') as f:
flag = f.read().strip()

Hashes = []
for char in flag:
hsh = weirdo(char)
Hashes.append(hsh)

with open('Flag', 'w') as w:
for i in Hashes:
w.write(i + '\n')

And As We See In This Script , We Have Some Points We Must Conclude After Analyzing This Code :

weirdo Function:

def weirdo(ch):
data = hashlib.md5(ch.encode()).hexdigest()
for i in range(1000):
if i % 2 == 0:
data = hashlib.sha1(data.encode()).hexdigest()
elif i % 7 == 0:
data = hashlib.sha256(data.encode()).hexdigest()
elif i % 3 == 0:
data = hashlib.sha512(data.encode()).hexdigest()
elif i % 11 == 0:
data = hashlib.md5(data.encode()).hexdigest()
elif i % 5 == 0:
data = hashlib.sha384(data.encode()).hexdigest()
return hashlib.sha512(data.encode()).hexdigest()

This function takes a single character (ch) as input, converts it to its MD5 hash, and then iteratively hashes it in a loop. Depending on the current iteration (i), different hash algorithms are applied. After 1000 iterations, the final result is hashed using SHA-512, and the resulting hash is returned.

File Reading:

with open('Flag.txt', 'r') as f:
flag = f.read().strip()

This block reads the contents of the ‘Flag.txt’ file, strips any leading/trailing whitespaces, and stores it in the variable flag. This likely represents the input data that will be processed by the weirdo function.

Hash Calculation Loop:

Hashes = []
for char in flag:
hsh = weirdo(char)
Hashes.append(hsh)

For each character in the flag, the weirdo function is called, and the resulting hash is appended to the list Hashes.

File Writing:

with open('Flag', 'w') as w:
for i in Hashes:
w.write(i + '\n')

Finally, the hashes obtained from the weirdo function are written to a file named 'Flag', with each hash on a new line.

And We Have Now The Encrypted (Hashed Flag) With The Challenge :

21be25c0318b65d88ce3751545338942be36969371ba82d084615830259dc2d697d2ea94ebad1fb6774788b2e921d67de00a2fe6f75ee58184130a5bb70e3ddd
3b3101f5614219fe3c1326cb7965c2b619554a7b83b2e9b88720a619cb2c2d108373c8387b7c3697e619d3233e925210c762d26e56c51de7e4dbab2f3e561af0
12d53808dcc14dcb6fc9cc0438d31d9ee59c8d48a8e8fb847b88fd0f4bf823f803b4e30d65cc8273fecdcbe4b0ba60d79f96b90712e0c8aa3262099c592d6f83
ae7dbedae7e22077bff5e45d4536cddd5e0f108d9b63678a2a6283483f78f7f7f1c2b7d7b65498b3d20c5e48a13d4d8b6c80228971d6b34caac6931ddc4a460f
f4674d2a2450889ce7a218f805ec6d69c97f92dc5ac4690792a4051b4f83f690020170bf6ee0fe8dbe3d2ffab4b8b7364aa914aa396f132f0da2af6ce9a10f73
58896fb8958b8c4eb3ac36caa805552c29bc50b8fed9e74599b4b23ac52cff7969ee2089eab7351abc748981237a1febe948f52b096e3d875a2c345e2fbd54c2
17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
3607b212959362fbb2af03055968eb6621880f0f25f4982034713b8ef92023b3377324fe95d324eeec757ec58c38018dfbd458c6361b44d227aeb1ca8b8b26d4
17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f
26191ac56d53299f27b5d06d7e7aedf890c9a00bd22d5070971a08991e9d6e20aa2dee8a624e6b0085cea0f26781112ed0ee1dd502ea301fc2635db6219b2e5f
26191ac56d53299f27b5d06d7e7aedf890c9a00bd22d5070971a08991e9d6e20aa2dee8a624e6b0085cea0f26781112ed0ee1dd502ea301fc2635db6219b2e5f
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
3981582c592f2751e1c4baadd148a61abd163f6bdbb4aa51d28e097c40861c4cbc6d11220c61b8ebd0c88b53205151d695369714c36eaa5b1892a6132dd32f63
49c8cf65b240674dc7fd7f14c79e8f8410e75e75a8c4265f1841d1adecd03cd84c4637d9fa1ec609a922c15ca2e27dd9d1873864fd51ef1944d70aa2f4c499f2
b2d55a846442e060df5ff2cd0de71b9f794080685346ca0c9df43d579519292bd2b1e368d3dc9284743f75a4f8627374b7a01678e7bbd159882d2bc027c7f02c
58f8c1523a07b6a4d44053f9ca44252d48305e7ddb6ffddba40bca42c6cbe5ae04b5e3f14595bbff978eb1c8d0d31a3cce6ca8dfe125e4cc29c55606ce9210b9
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
eda4a6bbf78f2bd9360cf7a9e1ba778f60e97494044fd635a0e7bc1671fca1f3ee02734bbfbde3747ad9d920468e527930d3ed73061297933983bc851c9f22c6
4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f
4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f
295d86a4d94b28e3f4ce67a8ab801fa8bbd5c684dcc7ff2a8a346d58723bc22018715c7ae8b9425caa02c73b6bf3a4f662cc5d60be16806f2a984a1b0a188b92
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
cec082247d8338602c878deb6a22d81eb6aaba0a0c798c5b4b953b2f774b7ef8c66706ad94bdf489cf750ff43c3f992874ba1b5d73539b3d104d79c73b0b1d8f
aa3af3f4cfa45aaff9cb4780c7be700c0c079122eb30999bc68c9bc9137b5af076ad8e06ee53ac998545b5e047cd086fa99e99453e4292dbf303f150ec5ca11b
98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba
c5ab531c811ad38dd3456cc25cf4e0aed07265e951ccb7eab52dd0daf02af0147b2f18b9ea4b31001e2b1e491814abc8fde1f2b68762377d5d90a7b742843fed
17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f
98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba
c5ab531c811ad38dd3456cc25cf4e0aed07265e951ccb7eab52dd0daf02af0147b2f18b9ea4b31001e2b1e491814abc8fde1f2b68762377d5d90a7b742843fed
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
f436e79cf78a98ecd1c881ce928c53697c9fbd78180ddfaf80fd4ec1b14d1936a506dccda3eadaddcccfcb8eccee0d5b5aa69a5f307df4024b383ee5326f7155
98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
295d86a4d94b28e3f4ce67a8ab801fa8bbd5c684dcc7ff2a8a346d58723bc22018715c7ae8b9425caa02c73b6bf3a4f662cc5d60be16806f2a984a1b0a188b92
cec2cc27e413346d53f249b2b57d44fad1ed1779fbb25f2119cf15c141a46364595a4fd4ffd46a0a7e07e4d8acdd407b03d1e023b59083dd844dd2b11b36805d
4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f
58f8c1523a07b6a4d44053f9ca44252d48305e7ddb6ffddba40bca42c6cbe5ae04b5e3f14595bbff978eb1c8d0d31a3cce6ca8dfe125e4cc29c55606ce9210b9
4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f
98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba
b5fa4a44c0b68830a3d0da17ffe8dbf6eb72e27daeadfd980dfec22c7a8a7cc047218be60a6ab91ccd3bc5e0a9fe3976e5386ae63c747402191a45e77c3b722d
17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f
98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba
c5ab531c811ad38dd3456cc25cf4e0aed07265e951ccb7eab52dd0daf02af0147b2f18b9ea4b31001e2b1e491814abc8fde1f2b68762377d5d90a7b742843fed
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
b5fa4a44c0b68830a3d0da17ffe8dbf6eb72e27daeadfd980dfec22c7a8a7cc047218be60a6ab91ccd3bc5e0a9fe3976e5386ae63c747402191a45e77c3b722d
f436e79cf78a98ecd1c881ce928c53697c9fbd78180ddfaf80fd4ec1b14d1936a506dccda3eadaddcccfcb8eccee0d5b5aa69a5f307df4024b383ee5326f7155
98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba
58f8c1523a07b6a4d44053f9ca44252d48305e7ddb6ffddba40bca42c6cbe5ae04b5e3f14595bbff978eb1c8d0d31a3cce6ca8dfe125e4cc29c55606ce9210b9
0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364
b2d55a846442e060df5ff2cd0de71b9f794080685346ca0c9df43d579519292bd2b1e368d3dc9284743f75a4f8627374b7a01678e7bbd159882d2bc027c7f02c
4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f
4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f
f5b3369b176e824622964f026898610b890ad75a4918b23c71ddc6c5d357c4f3b2f52a362e22137432ccecc73a2493dacf3fbb8dab2d87725fa09e2be1ad77e2

Now I Think In Some Thing , We Now The Flag Format Is ( ASCWG{“Content_Of_The_Flag} ) , So Now I Think In Try The Weirdo Func On The First 5 Char In The Flag And Compare It With The Given Hashed Flag , So I Modified The Given Script To Make It Run On Flag Chars To Ensure That , If We Do Bruteforse On The Given Values , We Will Get The Flag !!, So Let’s Try :

Modified Script :

import hashlib
def weirdo(ch):
data = hashlib.md5(ch.encode()).hexdigest()
for i in range(1000):
if i % 2 == 0:
data = hashlib.sha1(data.encode()).hexdigest()
elif i % 7 == 0:
data = hashlib.sha256(data.encode()).hexdigest()
elif i % 3 == 0:
data = hashlib.sha512(data.encode()).hexdigest()
elif i % 11 == 0:
data = hashlib.md5(data.encode()).hexdigest()
elif i % 5 == 0:
data = hashlib.sha384(data.encode()).hexdigest()
return hashlib.sha512(data.encode()).hexdigest()

characters = ['A', 'S', 'C', 'W', 'G']

for char in characters:
hsh = weirdo(char)
print(f'Hash for {char}: {hsh}')

Let’s Run :

After Running

Now We Ensures That , The Given Hashed Values Is The Flag Values , So Now We Only Need To BruteForse The Chars Which Match The Given Hashed Values , So We Need To Run This Function On All Chars And Match The Result (Hashed Value) With The Given One , And If It Matched Then Print The Char Which Achieve This Matching ..

So I Wrote This Script To Do This Operation :

import hashlib

def weirdo(ch):
data = hashlib.md5(ch.encode()).hexdigest()
for i in range(1000):
if i % 2 == 0:
data = hashlib.sha1(data.encode()).hexdigest()
elif i % 7 == 0:
data = hashlib.sha256(data.encode()).hexdigest()
elif i % 3 == 0:
data = hashlib.sha512(data.encode()).hexdigest()
elif i % 11 == 0:
data = hashlib.md5(data.encode()).hexdigest()
elif i % 5 == 0:
data = hashlib.sha384(data.encode()).hexdigest()
return hashlib.sha512(data.encode()).hexdigest()

hashed_values = [
"21be25c0318b65d88ce3751545338942be36969371ba82d084615830259dc2d697d2ea94ebad1fb6774788b2e921d67de00a2fe6f75ee58184130a5bb70e3ddd",
"3b3101f5614219fe3c1326cb7965c2b619554a7b83b2e9b88720a619cb2c2d108373c8387b7c3697e619d3233e925210c762d26e56c51de7e4dbab2f3e561af0",
"12d53808dcc14dcb6fc9cc0438d31d9ee59c8d48a8e8fb847b88fd0f4bf823f803b4e30d65cc8273fecdcbe4b0ba60d79f96b90712e0c8aa3262099c592d6f83",
"ae7dbedae7e22077bff5e45d4536cddd5e0f108d9b63678a2a6283483f78f7f7f1c2b7d7b65498b3d20c5e48a13d4d8b6c80228971d6b34caac6931ddc4a460f",
"f4674d2a2450889ce7a218f805ec6d69c97f92dc5ac4690792a4051b4f83f690020170bf6ee0fe8dbe3d2ffab4b8b7364aa914aa396f132f0da2af6ce9a10f73",
"58896fb8958b8c4eb3ac36caa805552c29bc50b8fed9e74599b4b23ac52cff7969ee2089eab7351abc748981237a1febe948f52b096e3d875a2c345e2fbd54c2",
"17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"3607b212959362fbb2af03055968eb6621880f0f25f4982034713b8ef92023b3377324fe95d324eeec757ec58c38018dfbd458c6361b44d227aeb1ca8b8b26d4",
"17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f",
"26191ac56d53299f27b5d06d7e7aedf890c9a00bd22d5070971a08991e9d6e20aa2dee8a624e6b0085cea0f26781112ed0ee1dd502ea301fc2635db6219b2e5f",
"26191ac56d53299f27b5d06d7e7aedf890c9a00bd22d5070971a08991e9d6e20aa2dee8a624e6b0085cea0f26781112ed0ee1dd502ea301fc2635db6219b2e5f",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"3981582c592f2751e1c4baadd148a61abd163f6bdbb4aa51d28e097c40861c4cbc6d11220c61b8ebd0c88b53205151d695369714c36eaa5b1892a6132dd32f63",
"49c8cf65b240674dc7fd7f14c79e8f8410e75e75a8c4265f1841d1adecd03cd84c4637d9fa1ec609a922c15ca2e27dd9d1873864fd51ef1944d70aa2f4c499f2",
"b2d55a846442e060df5ff2cd0de71b9f794080685346ca0c9df43d579519292bd2b1e368d3dc9284743f75a4f8627374b7a01678e7bbd159882d2bc027c7f02c",
"58f8c1523a07b6a4d44053f9ca44252d48305e7ddb6ffddba40bca42c6cbe5ae04b5e3f14595bbff978eb1c8d0d31a3cce6ca8dfe125e4cc29c55606ce9210b9",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"eda4a6bbf78f2bd9360cf7a9e1ba778f60e97494044fd635a0e7bc1671fca1f3ee02734bbfbde3747ad9d920468e527930d3ed73061297933983bc851c9f22c6",
"4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f",
"4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f",
"295d86a4d94b28e3f4ce67a8ab801fa8bbd5c684dcc7ff2a8a346d58723bc22018715c7ae8b9425caa02c73b6bf3a4f662cc5d60be16806f2a984a1b0a188b92",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"cec082247d8338602c878deb6a22d81eb6aaba0a0c798c5b4b953b2f774b7ef8c66706ad94bdf489cf750ff43c3f992874ba1b5d73539b3d104d79c73b0b1d8f",
"aa3af3f4cfa45aaff9cb4780c7be700c0c079122eb30999bc68c9bc9137b5af076ad8e06ee53ac998545b5e047cd086fa99e99453e4292dbf303f150ec5ca11b",
"98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba",
"c5ab531c811ad38dd3456cc25cf4e0aed07265e951ccb7eab52dd0daf02af0147b2f18b9ea4b31001e2b1e491814abc8fde1f2b68762377d5d90a7b742843fed",
"17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f",
"98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba",
"c5ab531c811ad38dd3456cc25cf4e0aed07265e951ccb7eab52dd0daf02af0147b2f18b9ea4b31001e2b1e491814abc8fde1f2b68762377d5d90a7b742843fed",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"f436e79cf78a98ecd1c881ce928c53697c9fbd78180ddfaf80fd4ec1b14d1936a506dccda3eadaddcccfcb8eccee0d5b5aa69a5f307df4024b383ee5326f7155",
"98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"295d86a4d94b28e3f4ce67a8ab801fa8bbd5c684dcc7ff2a8a346d58723bc22018715c7ae8b9425caa02c73b6bf3a4f662cc5d60be16806f2a984a1b0a188b92",
"cec2cc27e413346d53f249b2b57d44fad1ed1779fbb25f2119cf15c141a46364595a4fd4ffd46a0a7e07e4d8acdd407b03d1e023b59083dd844dd2b11b36805d",
"4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f",
"58f8c1523a07b6a4d44053f9ca44252d48305e7ddb6ffddba40bca42c6cbe5ae04b5e3f14595bbff978eb1c8d0d31a3cce6ca8dfe125e4cc29c55606ce9210b9",
"4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f",
"98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba",
"b5fa4a44c0b68830a3d0da17ffe8dbf6eb72e27daeadfd980dfec22c7a8a7cc047218be60a6ab91ccd3bc5e0a9fe3976e5386ae63c747402191a45e77c3b722d",
"17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f",
"98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba",
"c5ab531c811ad38dd3456cc25cf4e0aed07265e951ccb7eab52dd0daf02af0147b2f18b9ea4b31001e2b1e491814abc8fde1f2b68762377d5d90a7b742843fed",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"17658702b8358fcc514c07b7bb6e7e59d9197b9b49be3c10328720e62d7c37d9ffd90e968afcd64dc3cc52c54278ac69b781ecf2e4e8d50f5e31f6a13e83762f",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"b5fa4a44c0b68830a3d0da17ffe8dbf6eb72e27daeadfd980dfec22c7a8a7cc047218be60a6ab91ccd3bc5e0a9fe3976e5386ae63c747402191a45e77c3b722d",
"f436e79cf78a98ecd1c881ce928c53697c9fbd78180ddfaf80fd4ec1b14d1936a506dccda3eadaddcccfcb8eccee0d5b5aa69a5f307df4024b383ee5326f7155",
"98783305ab3f18063d866eb1884822b2a85f8212bec2b748237f5e7351fa7bd56337a8093359ec7ccedef30ef458649b9a7bc5cf9517527dc130df10a2004aba",
"58f8c1523a07b6a4d44053f9ca44252d48305e7ddb6ffddba40bca42c6cbe5ae04b5e3f14595bbff978eb1c8d0d31a3cce6ca8dfe125e4cc29c55606ce9210b9",
"0c8a10531c4aeb3464d73900e53804f5bcaa9ef32d57f181ca45132b332dc540acd997904abc49ff8bd18dc25732da3ca605328a62c6dabd8f230ff87d64e364",
"b2d55a846442e060df5ff2cd0de71b9f794080685346ca0c9df43d579519292bd2b1e368d3dc9284743f75a4f8627374b7a01678e7bbd159882d2bc027c7f02c",
"4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f",
"4327b9c148985bab8e830c67b5236c3719508076a274ef3adca840b77387ca09d876379c6c84b2b32542fba94734c8d18f853138e7a6f55881632e87a1c2778f",
"f5b3369b176e824622964f026898610b890ad75a4918b23c71ddc6c5d357c4f3b2f52a362e22137432ccecc73a2493dacf3fbb8dab2d87725fa09e2be1ad77e2"
]


matched_chars_sentence = []

for hashed_value in hashed_values:
for char in range(256):
char_str = chr(char)
result = weirdo(char_str)
if result == hashed_value:
matched_chars_sentence.append(char_str)

# Join the matched characters into a sentence
result_sentence = "".join(matched_chars_sentence)

# Print the result
print("Flag Is :", result_sentence)

After Run It :

Woop Woop Our Flag Is Here !!!

ASCWG{1_w1ll_ju57_k33p_h4n61n6_0n_pr373nd1n6_1_d0n7_533}

I Hope You Benefit From This Write Up , And Wait Another Write ups Soon And Don’t Forget To Follow Me!!!

Happy Reversing ❤❤

--

--