Ghi chú:
Can you see me?
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 IDA.
Bây giờ là lúc để khai thác nó.
Give me the key and take what's yours.
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 IDA.
Bây giờ là lúc để khai thác nó.
Flag? What's a 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 IDA.
Đây là mã hóa RC4 với ciphertext = D0C0354F0CD9232A484B090B543CF8C0E5DFD7790F3DDB35C400
và key = 2asdf-012=14
.
Bạn cũng có thể vá tệp bằng đoạn mã IDAPython.
During a routine check on our servers we found this suspicious binary, although when analyzing it we couldn't get it to do anything. We assume it's dead malware, but maybe something interesting can still be extracted from it?
Mở chương trình trong IDA.
IDA là một công cụ disassembler rất tốt, nó đã cho ta biết được một số lệnh system call
. Ta cũng có thể dùng LINUX SYSTEM CALL TABLE để biết cách syscall() thực hiện.
Hệ thống tạo một số ngẫu nhiên (4 byte) và thêm vào Nickware as Nick
Hàm sub_40028F()
, chương trình giao tiếp với địa chỉ IP đã biết. Tuy nhiên push 100007Fh (IP)
và push 401Fh (port)
chưa mang nhiều ý nghĩa lắm. Ta dùng CyberChef và nhận được IP=127.0.0.1 (localhost) and port=8000.
Chúng ta có thể tham gia vào giao thức IRC bằng cách sử dụng kênh “#secret”. Chúng tôi sẽ gửi tin nhắn trên máy khách để cung cấp cho chúng tôi một lá cờ. Chúng ta có thể thực hiện 3 hành động.
Nó yêu cầu mật khẩu để có được cờ. Chúng tôi tìm thấy nó giải mã mật mã và so sánh mật khẩu.
Đó là ROT13 với số vòng quay = 9
Bây giờ chúng ta có thể gửi tin nhắn trên máy khách để cung cấp cho chúng ta một lá cờ.
Timmy created a secure decryption program
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 ta được cho một tệp core dump, một decrypt file
và một source code file
.
Chương trình có IV = 16*"A"
and key = lấy khóa từ biến môi trường
. Đọc bộ đệm của flag.enc
dưới dạng bản mã và giải mã để lấy nội dung giải mã. Hàm encrypt() và decrypt()
là mã hóa AES
Chương trình đã gặp lỗi phân đoạn và để giúp việc phân tích lỗi dễ dàng hơn, hệ thống đã tạo ra một core dump chứa thông tin chi tiết về lỗi. Key
đã được load vào trong chương trình cũng như một vài ciphertext
được load cho tới khi crash.
Về cơ bản, ta có thể tìm key
trong dump
. Ta tìm được key = VXISlqY>Ve6D<{#F
Mở chương trình trong IDA, chúng ta có thể thấy trạng thái được ghi lại của bộ nhớ làm việc. Ta sẽ có dữ liệu dưới dạng bản mã và ta cần xác định phần bù để giải mã. Với src.c
, chúng ta có thể thấy rằng mỗi lần lấy 16 byte làm bộ đệm để mã hóa và buffer_encrypted
cũng có 16 byte.
Ý tưởng của tôi là đọc từng byte 16 để giải mã, bruceforce cho đến khi chúng tôi tìm thấy mẫu cờ.
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 IDA. Chuỗi tìm kiếm, chúng tôi nhận được %s.pkg
, %s%s%s.exe
, %s.py
.pkg
là phần mở rộng tên tệp được sử dụng cho một số định dạng tệp chứa các gói phần mềm và các tệp khác để được cài đặt trên một thiết bị, hệ điều hành hoặc hệ thống tập tin nhất định. Tôi đoán chương trình này chứa một số tệp có phần mở rộng tên tệp nối tiếp, đặc biệt là “auth.exe” , “ auth.py “ .
Tôi thực sự tin rằng nó chứa auth.py khi ta quan sát hàm sub_3F30()
. Hơn nữa, chương trình còn đề cập đến _MEIPASS
, một điều khá mới mẻ đối với tôi. Tìm kiếm nhanh cho tôi một số thông tin về _MEIPASS. Vì vậy trước hết chúng ta cần giải nén và dịch ngược mã python bằng PyInstaller Extractor và Decompyle++ hoặc Uncompyle6.
Ta đã dùng https://www.toolnb.com/tools-lang-en/pyc.html. Và đoạn code trở nên rất đẹp như sau:
Giải nó và ta sẽ có được mật khẩu là 0p3n_s3sam3!
You arrive on a barren planet, searching for the hideout of a scientist involved in the Longhir resistance movement. You touch down at the mouth of a vast cavern, your sensors picking up strange noises far below. All around you, ancient machinery whirrs and spins as strange sigils appear and change on the walls. You can tell that this machine has been running since long before you arrived, and will continue long after you're gone. Can you hope to understand its workings?
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 IDA.
Chúng ta có thể nhận ra rằng input_value[i] = encrypted[i] ^ key[i%len(key)]
. Lúc đầu, key = humans
nhưng giá trị trả về lại sai. Tôi tìm thấy xrefs cho sub_84A()
được gọi bởi gọi bởi _libc_csu_init().
Hàm _libc_csu_init (C Runtime Support Initialization) là một thủ tục được trình biên dịch C thêm vào chương trình để thực hiện các tác vụ khởi tạo liên quan đến thư viện C và môi trường thực thi trước khi hàm main() được gọi. Vì vậy khi chạy chương trình, key = aliens
. Đọc thêm tại đây