3.4. Case study 1: example1.exe
Trong phần này, chúng ta sẽ thử nghiệm debug file example1.exe, chương trình có nội dung như sau:
Tùy theo giá trị nhập vào, kết quả “Check key” sẽ hiện ra
“Correct” hay
“Incorrect”.
Mục tiêu của Debug là tìm ra giá trị Key khi nhập vào tên User bất kỳ.
Bước 1: Khảo sát
Chạy example1.exe trên máy ảo Windows Mobile, nhập vào:
User:
mfeng-hvaonline
Key:
123456789
và tap
“Check Key”, kết quả:
Bước 2: Dùng IDA phân tích file example1.exe
Sau khi mở file example1.exe bằng IDA, một cửa sổ hiện ra như ở hình bên dưới, hãy click OK.
Dùng tab String, tìm tới chuỗi
“Incorrect Key”:
Ta được:
Ngược lên đoạn mã tham chiếu tới chuỗi này, ta sẽ ở đây:
và tiếp theo:
Chú ý tới đoạn code từ
0x0001183C tới
0x00011848, ta có thể suy ra đoạn mã kiểm tra dạng như sau:
Code: if (sub_116F0() == 0)
//Incorrect key
else
//Correct Key
Việc cần thiết bây giờ là đặt breakpoint tại
0x0001183C
Bước 3: Debug
Menu
Debug -> Process options, đặt các thông số như sau:
Sau đó click OK
Đặt breakpoint tại
0x0001183C:
F9 để bắt đầu debug.
Nhập User:
mfeng-hvaonline & Key:
123456789. Tap “Check Key”, IDA breaks tại vị trí sau:
Xem giá trị
R0 = 0x2404F954, không thấy trỏ tới chuỗi ký tự đặc biệt nào. (Thực chất, R0 là con trỏ this).
Xem giá trị
R1 = 0x00055EF0:
Và
R2 = 0x00055F30
Trace vào bên trong hàm
sub_116F0, đoạn code của hàm này như sau:
Tại
0x00011704, hàm
wcslen lấy độ dài chuỗi ký tự User:
mfeng-hvaonline. Kết quả trả về là
R0 = 0x0000000F (15).
Tại
0x00011710, độ dài user được so sánh với #4, nếu nhỏ hơn,
sub_116F0 trả về giá trị 0 tại 0x00011730.
Tại
0x00011720, so sánh hai chuỗi user và key, nếu giống nhau,
sub_116F0 trả về giá trị 1, còn lại trả về giá trị 0.
Như vậy, chỉ cần user & key giống hệt nhau, chương trình sẽ cho ra kết quả
“Correct”.
Tóm lại, đoạn debug vừa rồi cho ta thấy hoạt động của example1.exe ở cấp độ assembly, cho biết cách thức kiểm tra giữa User và Key để cho ra kết quả
“Correct” hay
“Incorrect”.
3.5. Case study 2: example2.exe
Trong case study này, các bạn hãy tự mình giải quyết cơ chế tìm key theo user. Khác với example1, case study này có đôi chút khó khăn hơn
4. Kết luận
Bài viết trên đã trình bày các nội dung cơ bản nhất để tiến hành reverse một chương trình trên Windows Mobile, đồng thời minh họa cách thức debug thông qua hai case study đơn giản nhất. Từ các kiến thức này, bạn đọc có thể hoàn toàn tự mình nghiên cứu reverse và phân tích các ứng dụng phức tạp hơn.
5. Greetings
Greats thanks to all HVA and REA members.
6. Tài liệu tham khảo
1. "Hacking Windows CE", Phrack Magazine, Volume 0x0b, Issue 0x3f, Phile #0x06 of 0x14
2. http://www.ra.informatik.uni-stuttgart.de/~ghermanv/Lehre/SOC02/ARM_Presentation.pdf
3. http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf
---
Hết.