Challenge cho mình hai file :
· Ransomware.exe : một con ransomware
· important.intent.enc : và một file bị mã hóa
Nhiệm vụ là dịch ngược con ransomware để decrypt dữ liệu của file enc thui.
Mở ransomware bằng IDA x32 để phân tích, (ransomware được viết bằng win32)
Mình sẽ f5 để mở luôn mã giả cho tiện phân tích hành động
của ransomware
I . Flow chương trình
Ransomware sẽ khởi tạo các biến cơ bản, và thực hiện tìm
kiếm file có phân mrong .intent (các file
khác được bỏ qua)
Và thực hiện mã hóa file .intent tìm thấy.
Dữ liệu trong file được mã hóa qua hai loại mã hóa.
Sau khi mã hóa, dữ liệu được ghi lại vào file .enc
và file gốc bị xóa.
II. Chức
năng các hàm chính
1. Các hàm khởi tạo sub_421D60() và sub_421080()
a. sub_421D60()
Thực hiện debug luôn để xem các hàm này làm gì.
Ta thấy biến một chuỗi Dest được tạo.
Tiếp tục đặt breakpoint và trace qua tương tự để xem nó
đang định làm gì.
Mình đọc qua hàm thì thấy nó đang khởi tạo giá trị cho một mảng dword_424378 có 256 phân tử.
Sau khi debug qua hàm này, mình nhận thấy nó đang thực hiện
tìm file .intent để mã hóa, còn các file khác của máy thì bỏ qua(may quá == nó
mà mã hóa hết thì toang, tại mình làm trên máy thật).
Để test mình tạo ra một file kiet.intent và để trong thùng rác (== mình để ý thấy nó tìm thùng rác đầu tiên :v chắc vì đam mê).
Sau khi thấy file .intent của mình, nó in ra màn hình một
đoạn trông giống địa chỉ ipv4 máy mình ghê òm đúng luôn :3.
Tiếp tục nào…
3. Hàm sub_4216A0(v9) : Encrypt data
Đặt bp tại v8 để xem kết quả của các bước trên luôn ^^:
V8 = “1333”
Tiếp theo chương trình ghi vào buffer một chuỗi theo định dạng "%s%s%08x%d---%d" với các tham số như hình trên.
Đặt bp và trace qua xem buffer được ghi nội dung như thế nào:
Chuỗi buffer này được khởi tạo với các giá trị ngẫu
nhiên, và được sử dụng làm key cho các mã hóa bên dưới, => gây khó khăn cho
người dùng nếu có ý định decrypt nội dung file enc….
Tại
sao mình lại biết được là mã hóa SHA1 ? ^^ à mình search google thấy thui
Thử search gg xem nó là loại hash nào….
Và mình thấy có một trang của pháp sư trung hoa nào đó giải
thích ^^.
0x8004 đại diện cho hash SHA1
Okay chỉ cần biết data của mình sẽ bị hash SHA1 là đủ rồi.
Giá trị hash được lưu ở a3.
Nên ta tiếp tục đem v35 đã được hash cho qua hàm mã hóa
thứ 2.
5. Hàm sub_421390() : Encrypt AES
Trước khi thực
hiện mã hóa, ransomware thực hiện khởi tạo key và iv cho thuật toán mã hóa AES
Cần xem đoạn
chương trình trên sử dụng loại mã hóa gì.
Mình tiếp tục
search và tìm thấy một file của thư viện win32 có chi tiết các tham số
https://github.com/Wiladams/TINN/blob/master/src/win32/WinCrypt.lua
^^ => AES với tham số 24
Và kiểu mã hóa CBC với tham số 1
https://github.com/wine-mirror/wine/blob/master/include/wincrypt.h
Đoạn này mệt quá lười giải thích ….
III. Giải quyết bài toán dịch ngược
Qua phân tích trên ta đã nắm được cách ransomware mã hóa file. Giờ cần code một chương trình để dịch ngược file bị enc
Vấn đề cần phát sinh: Ta thấy khi khởi tạo buffer các biến tham số là ngẫu nhiên theo thời gian nên ta không thể xác định chính xác
Đang bế tắc đoạn này == thì tự nhiên mình kéo xuống hàm ghi file đọc thử (tại thấy nó cứ làm cái gì gì mãi mới ghi file)
Ta có :
Vậy
là từ file enc có thể lấy được cái giá trị này mà không cần tính toán gì nhiều
^^~
Vậy
là ta có thể khởi tạo lại key theo form
Tiếp tục thực hiện hash để tạo key
Và decrypt AES bằng key đã tạo là xong rùi ^^.
IV. Code và thực hiện
Tìm được flag là : INTENT{crypt0s_ar3_the_w0rst_but_d4amn_u_g00000d}
==crypto thật khó nhưng không làm khó được bạn
V. Tổng kết
·
Challenge về ý tưởng không khó nhưng thực hiện
nhiều bước khiến mình bị rối và phải debug suy đoán nhiều lần.
·
Cần một số kiến thức nhất định về crypto để giải
quyết bài toán.
· Và đối với các challenge ransomware, khuyến khích các bạn không thực hiện trên máy thật mà chuyển sang máy ảo cho an toàn nhé !
Wow !!! Thầy Kiệt thật là đỉnh 😍
Trả lờiXóa