Ghi chú:
We found this ancient text inscribed on a stone tablet. We believe it describes the history and technology of a mighty but extinct civilization, but we can't be certain as it's written in a dead language. Can you use your specialist knowledge to uncover the truth, and recover their technology?
Trong thử thách này mình sẽ sử dụng Kali thay cho Windows như thường lệ vì việc cài pyenv lên Unix OS dễ dàng hơn (vì phải dùng đúng phiên bản python để dịch ngược file .pyc). Chỉ cần làm chính xác hướng dẫn
Hàm marshal.loads(bytes)
trong Python được sử dụng để chuyển đổi đối tượng byte sang giá trị Python. Nó sử dụng mã hóa marshal để giải mã dữ liệu byte và tạo lại cấu trúc dữ liệu ban đầu.
marshal-to-pyc.py là một đoạn mã được sử dụng để marshaled Python code objects
thành .pyc files
. Các tệp .pyc
này chứa mã byte đã được biên dịch, có thể được trình thông dịch Python thực thi hiệu quả hơn so với mã nguồn gốc ban đầu.
┌──(kali㉿kali)-[~/Desktop]
└─$ echo -n 'YwEAAAABAAAABQAAAEMAAABzNAAAAHQAAGoBAHQCAGoDAHQEAGQBAIMBAGoFAHwAAGoGAGQCAIMBAIMBAIMBAHQHAIMAAIMCAFMoAwAAAE50BAAAAHpsaWJ0BgAAAGJhc2U2NCgIAAAAdAUAAAB0eXBlc3QMAAAARnVuY3Rpb25UeXBldAcAAABtYXJzaGFsdAUAAABsb2Fkc3QKAAAAX19pbXBvcnRfX3QKAAAAZGVjb21wcmVzc3QGAAAAZGVjb2RldAcAAABnbG9iYWxzKAEAAAB0AQAAAHMoAAAAACgAAAAAcwcAAAA8c3RkaW4+dAoAAABsb2FkTGFtYmRhAQAAAHQAAAAA' | base64 -d >> ll.bin
┌──(kali㉿kali)-[~/Desktop]
└─$ python marshal-to-pyc.py ll.bin
----------------------------------------------------------------------------------------
┌──(kali㉿kali)-[~/Desktop]
└─$ cat ll.bin.py
# uncompyle6 version 3.9.0
# Python bytecode version base 2.7 (62211)
# Decompiled from: Python 2.7.18 (default, Nov 21 2023, 01:37:17)
# [GCC 13.2.0]
# Embedded file name: <stdin>
# Compiled at: 2023-11-21 01:42:29
return types.FunctionType(marshal.loads(__import__('zlib').decompress(s.decode('base64'))), globals())
Tất cả các tham số khác sẽ được tải vào ll(), bây giờ chúng ta sẽ sử dụng zlib.decompress()
giá trị còn lại.
Discurd has filed a DMCA violation regarding a popular browser extension claiming to be conducting VIP giveaways on the company's product. The addon store has since taken down the extension to prevent any potential browser cryptomining malware from being distributed in the marketplace. Could you investigate what the 'Discurd Nitro Giveaway' addon does exactly?
Chúng ta có thể sử dụng lệnh 'file' để cung cấp cái nhìn tổng quan về loại tệp.
Mở chương trình trong dnSpy.
Chương trình này chọn miền ngẫu nhiên để tải xuống tệp ZIP từ một URL cụ thể được tạo. Sau khi tải xuống, nó trích xuất nội dung của tệp ZIP vào thư mục có tên DiscurdNitru
.
Sau đó, nó bắt đầu một quy trình mới (Chrome) với các đối số dòng lệnh được chỉ định, tải tiện ích mở rộng từ thư mục “DiscurdNitru”. Ta thêm với đường dẫn /c2VjcmV0/archive.zip?k=ZGlzY3VyZG5pdHJ1
để tải về archivev.zip
và giải nén nó.
Mở background.js
trong js-beautify
Mọi thứ đã bị làm rối, tôi đã cố gắng thử in từng khối mã và tìm được một vài thông tin tốt.
You've made contact with a spirit from beyond the grave! Unfortunately, they speak in an ancient tongue of flags, so you can't understand a word. You've enlisted a medium who can translate it, but they like to take their time…
Chúng ta có thể sử dụng lệnh 'file' để cung cấp cái nhìn tổng quan về loại tệp.
Chương trình này có rất nhiều hàm sleep()
, chúng ta có thể patch các đoạn sleep()
bằng NOP hoặc sử dụng ROT13 với số vòng quay = 18.
Ghosts have been sending messages to each other through the aether, but we can't understand a word of it! Can you understand their riddles?
Chúng ta có thể mở 'trace.pcap', nó hơi ngắn. Khi theo dõi luồng hội thoại, các yêu cầu khác dành cho bắt tay TCP nhưng yêu cầu có cờ FIN, PSH và ACK có chuỗi dữ liệu được mã hóa.
Sử dụng IDA, tìm kiếm chức năng mã hóa. Chúng ta có thể dễ dàng nhận ra thuật toán là chế độ AES CBC với KEY = "supersecretkeyusedforencryption!" and IV = "someinitialvalue".
After adding the curried eel, your potion is almost complete, your cauldron boiling over. All you need to do now is incant the final spell to finish your masterwork!
Thử thách đưa cho chúng ta một File Haskell Script
Hàm này lấy một danh sách số nguyên “n” và “a” [a] và trả về một danh sách mới chứa các phần tử “n” cuối cùng của danh sách đầu vào. Ví dụ: nếu bạn có danh sách [1, 2, 3, 4, 5] và bạn gọi takeLast 3, bạn sẽ nhận được danh sách [3, 4, 5].
Điều kiện kiểm tra: nội dung độ dài == 76:
Độ dài của danh sách giá trị ASCII phải là 76.content = map ord (extractFlag flag):
Chuyển đổi cờ được trích xuất thành danh sách các giá trị ASCII bằng hàm ord.one = map (\ [l, r] -> (l - r)) (chunks 2 content):
Tạo danh sách bằng cách trừ đi từng cặp phần tử liên tiếp khỏi giá trị ASCII. Các giá trị ASCII được nhóm thành từng cặp bằng cách sử dụng chunk 2
.two = map (foldr xor 0) (chunks 3 content):
Tạo danh sách bằng cách áp dụng thao tác XOR cho mỗi danh sách con có độ dài 3 thu được từ chunk 3
three = map (foldr (+) 0) (chunks 4 content):
Tạo danh sách bằng cách tính tổng của mỗi danh sách con có độ dài 4 thu được từ chunk 4
.four = map head (chunks 5 content):
Tạo danh sách bằng cách lấy phần tử đầu tiên của mỗi danh sách con có độ dài 5 thu được từ chunk 5
.The Client is in full control. Bypass the authentication and read the key to get the Flag.
Chúng ta có thể sử dụng lệnh 'file' để cung cấp cái nhìn tổng quan về loại tệp.
Mở chương trình trong dnSpy.
Chương trình có rất nhiều chức năng kiểm tra đầu vào của người dùng. Lúc đầu, chúng tôi được nhắc nhập tên người dùng và mật khẩu. Nhưng nó luôn trả về sai và nó sẽ lặp mãi mãi. Thay đổi giá trị của flag2
, chúng ta có thể truy cập vào hàm 0.2()
Trong hàm 0.2()
, chúng tôi được nhắc nhập khóa bí mật và khóa bí mật
đó được so sánh với một giá trị cụ thể. Nếu khóa bí mật bằng giá trị đã cho thì true được lưu trong flag, nếu không, false sẽ được lưu trong flag. Thay đổi giá trị của cờ, chúng ta có thể truy cập vào chức năng in cờ.
Can you find the password?
Chúng ta có thể sử dụng lệnh 'file' để cung cấp cái nhìn tổng quan về loại tệp.
Mở 'exatlon_v1' bằng DIE, chúng tôi phát hiện file này đã được vá bằng UPX. Vì vậy, điều đầu tiên chúng tôi làm là giải nén nó.
Hàm này nhận giá trị đầu vào, chuyển đổi một ký tự thành int và nhân 16, sau đó cộng kết quả đó vào một chuỗi. Cuối cùng so sánh chuỗi đó với mật mã.