PE x86 - RunPE ( Rootme )
Xin chào các bạn đến với blog của mình . Nay mình sẽ viết blog về cách bypass 1 challenge ctf của rootme - 1 nền tảng CTF của France .Challenge mà mình định làm hôm này sẽ là PE x86 - RunPE . 1 bài khá là thú vị sử dụng kỹ thuật process hollowing .
Link : https://www.root-me.org/en/Challenges/Cracking/PE-x86-RunPE

Nhìn sơ qua về thông tin của chall thì nó có 2 related và 1 statement nói về RunPE
Chúng ta thử chạy nó thì nó sẽ thông báo thế này

Ném file đó vào delect it easy để có cái nhìn sơ lược về nó

Nhìn qua chúng ta có thể thấy nó thông báo là đã bị pack bằng UPX . Sử dụng tool UPX để giải nén nhưng nó không hoạt động . Khi
Ném nó vào IDA pro để có cái nhìn tổng quát hơn . Khi nhìn qua qua từ trên xuống dưới trông khá là khó hiểu . Nó gọi 1 loạt các hàm giống nhau tính toán decrypt các byte làm gì đó có vẻ theo 1 quy luật gì đó

Chúng ta sẽ debug và quan sát xem nó làm gì . Ở offset 00402FB4 nó call eax . Đặt breakpoint tại đây quan sát memory và các thanh ghi

Chúng ta có thể thấy nó gọi tới địa chỉ của api VirtualAlloc của kernel32 .Thêm quan sát cả những đoạn bên dưới thì mình đoán rằng nó sẽ thực hiện thế này . Trong kỹ thuật RunPE hay còn gọi là là process hollowing thì nó sẽ hay sử dụng các API như VirtualAlloc , WriteProcessMemory , CreateRemoteThread , GetThreadContext/SetThreadContext , ResumeThread , WaitForSingleObject . Vậy nên các hàm kia sẽ có nhiệt vụ là tính toán và giải mã để gọi tới địa chỉ các API kia trên kernel32

Quan sát thanh ghi thấy nó đã gọi đến GetThreadContext

Chỗ này là nó gọi đến APi ReadProcessMemory

Quan sát thấy có nhiều API hay được gọi đến trong RunPE

Chúng ta có thể thấy đã đến API writeprocess memory

API cuối cùng là ResumeThread

Chúng ta có thể thấy trong vùng nhớ có cấu trúc tệp PE .

Đến đây có nhiều cách dump trực tiếp trong IDA hoặc dùng 1 tool pd64 để dump
Sau khi dump mở file trong IDA để quan sát . Sau khi nhìn qua 1 lúc mình tìm thấy hàm này

về cơ bản nó sẽ dùng hàm sub_401488 để encrypt

Hàm này khá là simple nên mình viết 1 script để bruteforce và tìm được flag thôi

Challenge này cũng không quá khó hy vọng mọi người đọc blog vui vẻ :D