Vishwactf 2024
VISHWACTF 2024
CRYPTOGRAPHY WRITEUP
Author:
Pham Quoc Trung
Used Language:
Python3
Problem Solving:
Happy Valentine's Day
Description:
My girlfriend and I captured our best moments of Valentine's Day in a portable graphics network. But unfortunately I am not able to open it as I accidentally ended up encrypting it. Can you help me get my memories back?
Author : Pushkar Deore
Attachments:
source.txt
enc.txt
Solution:
Ở bài này, chương trình thực hiện XOR một bức ảnh png với key là 8 bytes đầu của nó. Vì là file png nên mình có thể dễ dàng biết được 8 bytes này thông qua File SIgnature trên Google. Tiến hành xor lại với key đó mình sẽ ra được ảnh gốc
Code để recover bức ảnh:
Ảnh thu được:

Flag: VishwaCTF{h3ad3r5_f0r_w1nn3r5}
Teyvat Tales
Description:
All tavern owners in Mondstadt are really worried because of the frequent thefts in the Dawn Winery cellars. The Adventurers’ Guild has decided to secure the cellar door passwords using a special cipher device. But the cipher device itself requires various specifications….which the guild decided to find out by touring the entire Teyvat.
PS: The Guild started from the sands of Deshret then travelled through the forests of Sumeru and finally to the cherry blossoms of Inazuma
Author: Amruta Patil
Solution:
Đây là giao diện của trang web challenge:

Đến tận bây giờ thì mình cũng chưa biết đống này là cái của khỉ gì. Cách mình giải được bài này là bằng cách nhìn vào code front-end
Ở đây mình thấy một file script.js ở cuối. Đây là đoạn code của nó
Từ đây thì mình có được luôn 4 đáp án cho 4 ảnh lần lượt là:
Sau khi điền từng kết quả vào thì mình ra được ảnh sau (thứ mà mình cũng đã thấy trước ở trong style.css với url(img/GenshinNoticeBoard.png);)

Mình thu được đoạn flag bị mã hóa là CYNIPJ_RE_LSKR-YAZN_MBSJ. Ban đầu, mình không tìm ra được nó là thể loại mã hóa gì. Tuy nhiên, sau khi nhìn vào đống đáp án mà mình phải điền trước đó, mình thử search enigma m3 và mình tìm thấy một loại mã hóa có các tham số như trong đáp án.

Sau khi chỉnh các tham số đó cho y hệt như các đáp án trước đó, mình đã ra được flag.
Flag: Vishwactf{beware_of_tone-deaf_bard}
Poly Fun
Description:
Its a simple symmetric key encryption, I am sure you will be able to solve it (what do you mean the key looks weird)
Author : Revak Pandkar
Attachments:
challenge.py
encoded_flag.txt
encoded_key.txt
Solution:
<Updating>
Lets smother the King!
Description:
In my friend circle, Mr. Olmstead and Mr. Ben always communicate with each other through a secret code language that they created, which we never understand. Here is one of the messages Mr. Ben sent to Mr. Olmstead, which I somehow managed to hack and extract it from Ben's PC. However, it's encrypted, and I don't comprehend their programming language. Besides being proficient programmers, they are also professional chess players. It appears that this is a forced mate in a 4-move chess puzzle, but the information needs to be decrypted to solve it. Help me out here to solve the chess puzzle and get the flag.
Flag format: VishwaCTF{move1ofWhite_move1ofBlack_move2ofWhite_move2ofBlack_move3ofWhite_move3ofBlack_move4ofWhite}.
Note: Please use proper chess notations while writing any move.
# Author : Naman Chordia
Attachment:
code.txt
Solution:
Đây là ngôn ngữ lập trình Malbolge. Mình sẽ sử dụng tool để compile nó xem ra được gì
Ở đây mình dùng trang: https://www.tutorialspoint.com/execute_malbolge_online.php

Mình ra được một chuỗi như sau:
Đó chính là vị trí để ta dựng lại một tình huống trong bộ môn cờ vua. Mình sử dụng trang sau để dựng lại bàn cờ: https://nextchessmove.com/
FEN: k5rr/pp4bp/4N1p1/4Q3/4p3/1P5q/P2P1PpP/2R1K2R w - - 0 1

Các bạn có thể tự giải sao cho trắng thắng trong 4 bước, hoặc có thể dùng chức năng Calculate Next Move của trang web trên để tính được 4 bước đó. Kết quả mình ra được chính là flag
Flag: VishwaCTF{Nc7+_Kb8_Na6+_Ka8_Qb8+_Rxb8_Nc7#}
CODEON
Description:
My biochemist friend has doubt that his phone is used by others for calling without knowing him. So, he wants me to find some information related to it, that’s why he sent me some information related to it, also he uses one word short-forms mostly. But I am unable to understand sent data, can you help me?
Author : Sankalp Chakre
Attachment:
CODEON.txt
Solution:
Ở đây với hint đầu tiên, mình có 2 cái tên là Felix Delastelle và Dmitri Mendeleev.
Với Felix, mình tìm thấy được ông là một nhà mật mã học, nổi tiếng nhất với Bifid cipher. Nó cũng có vẻ giống với data mình nhận được luôn. Tuy nhiên, để giải được mình phải tìm được ra key nữa.
Với Dmitri, đây là người tìm ra bảng tuần hoàn hóa học, có thể sẽ liên quan tới Periodic table cipher.
Đến với hint thứ 2, mình có 2 ma trận A, B. Mình được yêu cầu phải thực hiện một phép toán nào đó giữa chúng giống với phép toán của 2 ma trận P, Q. Tuy nhiên, mình chưa biết phép toán đó là gì mà chỉ biết output của chúng.
Ta có:
<latex>
Sau một hồi guessing thì mình nhận ra các số này đều có thể chuyển về dạng các nguyên tố trong bảng tuần hoàn hóa học. Hiện tại bảng tuần hoàn có 118 nguyên tố, nên mình đã thử lấy ma trận (P*Q)% 119 nhưng không ra. Thử với (P*Q)%118 và mình đã ra được ma trận kết quả

Thực hiện với ma trận A, B, mình ra được ma trận sau:

Chuyển các số trong ma trận về dạng các nguyên tố trong bảng tuần hoàn, mình thu được ma trận sau:
Mình để ý ở cột cuối cùng, ta thu được từ "AMINOACIDS", có vẻ đây chính là key. Mình thử dùng một số tool để giải mã Bifid cipher tuy nhiên không hiểu sao mình dùng mãi không ra. Thế là mình đã giải tay qua video này: https://www.youtube.com/watch?v=zE34jDx2gWE (Sau thì mình có tìm ra web này giải được: https://calcoolator.eu/bifid-cipher-encoder-decoder-)

Đoạn mã mình thu được là UGCGCACUGCUUGAGAGGGGGAUUUUUACC, chỉ chứa 4 kí tự U, A, G, C, giống các bazơ nitơ của gen trong bộ môn Sinh Học. Mình tìm thì có một cipher liên quan tới nó là Codon cipher (Giờ thì mình đã hiểu tên challenge :v)

Và sau khi decode, mình đã ra được flag.
Flag: Vishwactf{CALLERGIFT}
Intellectual Heir
Description:
You received a package, and you got to know that you are the descendant of RIADSH. There are four files and a safe in the package.
You should analyze the files, unlock the safe, and prove your worth. The safe has alphanumeric and character combinations.
PS: The safe has no lowercase buttons.
Author : Abhishek Mallav
Attachments:
file.txt
file1.txt
file2.txt
Intellectual Heir.py
Solution:
Bài này thì không khó, chủ yếu mình phải guessing. Đầu tiên mình phân tích hàm str_to_ass.
Hàm này sẽ lấy từng kí tự trong input_string , biến chúng về dạng ascii decimal sau đó join với nhau để tạo thành một chuỗi số.
Để dịch ngược hàm này thì ĐÁNG LẼ chúng ta phải handle trường hợp mã ascii là 2 hay 3 chữ số (cũng không khó). Tuy nhiên, do đề bài nói rằng cái két này không có kí tự lowercase (ascii sẽ có phần 3 chữ số), nên ta có thể bỏ trường hợp 3 chữ số đi và viết được một hàm kiểu như sau:
Tiếp theo là đoạn này:
Nếu các bạn đã chơi Crypto nhiều thì có thể dễ dàng nhận ra đây là mã hóa RSA với a, z là p, q; f là n. Tham số e được comment là #what is usually used, có thể đoán là 65537. Kết quả được in ra có vẻ chính là số trong file.txt
Tiếp đến là đoạn này:
Đoạn này sẽ thực hiện chuyển một số đầu vào thành dạng nhị phân, sau đó với mỗi bit nhị phân, ta lấy sin và cos của nó? Tuy nhiên khi mình nhìn vào 2 file file1.txt và file2.txt thì có vẻ một file là lấy sin một file là lấy cos. Hàm sin, cos chưa chắc có thể reverse, tuy nhiên do nhị phân chỉ có 2 bit 0 và 1, mình hoàn toàn có thể khôi phục lại 2 số này. Và vì là 2 số, mình đoán đây chính là p,q bị mã hóa.
Hai assert của mình đều không trả về lỗi, có nghĩa là ta đã có được 2 số nguyên tố p, q
Giờ chỉ cần tiến hành giải mã RSA, mình sẽ ra được flag
Code final:
Flag: VishwaCTF{Y0U_@R3_T#3_W0RT#Y_OF_3}
BitBane - Cryptic Chaos
Description:
Once again, Mr. David made a blunder by encrypting some confidential data and deleting the original file. Can you help him retrieve the data from the encrypted file?
Author : Saksham Saipatwar
Attachments:
Encrypt.cpp
Encrypt.txt
Solution:
Ở bài này, flag được mã hóa qua 3 bước là encode, applyKey và extraSecurity. Mình sẽ giải mã ngược lại từng bước để ra được flag
Với bước extraSecurity:
Trông có vẻ dài dòng, nhưng code này chỉ check một số các phần tử sao cho nếu nó không phải số nguyên tố thì thực hiện phép NOT (đảo bit). Hàm này có thể được reverse bằng cách chạy chính nó lần nữa
Với bước applyKey:
Hàm này sẽ làm một loạt các thao tác với key, sau đó lấy key đã biến đổi để XOR với input. Do ta đã biết key, hàm này cũng có thể dễ dàng được reverse chỉ bằng cách chạy lại lần nữa.
Cuối cùng là hàm encode:
Hàm này sẽ truyền 2 giá trị cur và idx vào hàm create. Hàm create cũng sẽ lại gọi tới 2 hàm createTopping và createBase để thực hiện một loại các thao tác với 2 tham số này. Nhìn qua một hồi thì có thể thấy các thao tác này khá là khó để reverse, vì các phép như OR không có trường hợp cố định.
Tuy nhiên, để ý thì idx được tính bằng (i%8) + 2 , là thứ mà ta hoàn toàn có thể tính được hết. cur chính là từng kí tự của flag. Do đã reverse hết 2 hàm trước đó nên mình có kết quả của hàm encode này. Từ đây, mình nghĩ có thể bruteforce giá trị cur, sao cho nếu output của hàm encode ra đúng thì đấy sẽ chính là kí tự của flag. Kể cả khi bạn bruteforce cả 256 kí tự ascii cho mỗi kí tự, việc này cũng sẽ diễn ra rất rất nhanh
Dưới đây là code final:
Mặc dù mình vẫn đoán được ra flag tuy nhiên nhìn hơi ngứa mắt, có vẻ do mình implement từ C++ sang python bị sai ở đâu đó. Dưới đây là code final sử dụng C++:
Flag: VishwaCTF{BIT5_3NCRYPT3D_D3CRYPTED_M1ND5_D33PLY_TE5T3D}
The Naughty Friend
Description:
One of my friends Dhruv is a cryptography genius, but he likes to annoy me by playing pranks with my passwords. He recently changed my accounts password and has given the following files as hints, he also gave this buggy code which had some import statements removed, help me retrieve my lost password!!!
Author : Kanishk Kumar
Attachments:
Code.txt
Encryption&Key.txt
Solution:
<Updating>
© 2024,Pham Quoc Trung. All rights reserved.
Last updated