banner
 .::Reverse Engineering::. Kiến thức cơ bản về Reverse Engineering trên Windows Mobile - 4 Go to original post Author: mfeng - Translator:  - Entry Date: 26/02/2009 11:33:37
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ỳ. smilie

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 smilie

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:





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 smilie

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.
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Other posts in the same group:

Kiến thức cơ bản về Reverse Engineering trên Windows Mobile - 4
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|