[Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Mới update thông tin, mời các bạn cùng tham khảo.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Yêu Ny nhiều, nhưng mình muốn học hỏi, chứ flag thì mình có lâu rồi.

Bạn có thể nói rõ hơn về các bước làm được không (dưới góc độ một người không làm theo writeup). Cá nhân mình có mấy thắc mắc sau:
1. Trong quá trình chạy bình thường, target có decrypt ra flag không? (vì mình nhớ là mình đặt BP ở hàm decrypt nhưng không có flag).
2. Nếu không, vì sao tìm ra vùng data như Ny vừa edit? (nếu có thì thôi).

P.S: Nếu có thể, BTC share mình file dump ở bước phân tích tĩnh được không?
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Yêu Ny nhiều.

Bạn có thể nói rõ hơn về các bước làm được không (dưới góc độ một người không làm theo writeup). Cá nhân mình có mấy thắc mắc sau:
1. Trong quá trình chạy bình thường, target có decrypt ra flag không? (vì mình nhớ là mình đặt BP ở hàm decrypt nhưng không có flag).
2. Nếu không, vì sao tìm ra vùng data như Ny vừa edit? (nếu có thì thôi).

P.S: Nếu có thể, BTC share mình file dump ở bước phân tích tĩnh được không?
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

1. Nếu chạy bình thường thì sẽ không ra Flag bạn nhé.
2. Muốn tìm được vùng data trên bạn phải nhảy đến các đoạn gọi hàm giải mã đề giải mã data và sẽ tìm được Flag.
3. File dump thì hiện tại BTC không còn giữ nữa. Nếu gặp vấn đề tìm data trên máy bạn phân tích. Bạn có thể dựa vào đáp án mới edit và writeup để tính địa chỉ data trên máy của bạn
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Cảm ơn BTC :D Mình có tìm ra vùng data mà Ny đã edit, cũng đã XREF để xem những nơi gọi đến hàm decrypt, nhưng không thấy gì rõ ràng. Nếu được, BTC (hoặc bất kỳ bạn nào đã giải được bài này trên wargame) có thể giải thích cụ thể bước 2 cho mình được không?
Ngoài ra mình thắc mắc thêm chút là, nếu quá trình chạy bình thường không ra flag, thì từ góc nhìn của một người chơi, làm sao để biết mà tập trung vào hàm decrypt đó?
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

1. Nếu được, BTC (hoặc bất kỳ bạn nào đã giải được bài này trên wargame) có thể giải thích cụ thể bước 2 cho mình được không?

Ở bước 2 mình sẽ giải thích cụ thể theo hàm DecryptedString của BTC đã đưa ra.

Như bạn Malware đã nói hàm DecryptedString đầu vào của nó là 1 cấu trúc:

STRING_INFO_ENCRYPTED
{
DWORD dwLength;
CHAR szString[MAX_PATH];
};

trong đó:
- szString: data dưới dạng hex.

Cụ thể: Với Data "
FD5F2E057B5A7950172424C110108E9ACFFEF3F2DB6A36A6A3547B7EE8A05811C6DA18F9ACA69C1FB5E7B5DF1EE627245B7A5D023EF3" ở đây hiểu đó là string. Thì trước khi truyền data vào cấu trúc STRING_INFO_ENCRYPTED.szString thì bạn phải chuyển các string này thành mảng byte.

vd "
FD5F2E057B5A79..." sẽ phải chuyển thành mảng byte {0xFD, 0x5F, 0x3E,.....}

- dwLength: là kích thước của data của mảng byte sau khi đã đổi String sang mảng byte.


Kết quả sau khi hàm DecryptedString giải mã mảng byte thì sẽ lấy được 1 String. Với trường hợp data trong phần đáp án thì sẽ ra được Flag là String "WhiteHat{3B3F3A414F717C7330F2BFA9BC1820E535B24B1C}"

2. Ngoài ra mình thắc mắc thêm chút là, nếu quá trình chạy bình thường không ra flag, thì từ góc nhìn của một người chơi, làm sao để biết mà tập trung vào hàm decrypt đó?

Với Đề RE CTF WhitehatGrandPrix 2014 ban tổ chức đã gợi ý cũng như nói rất rõ. Đây là các mẫu virus được chèn Flag vào và khuyến cáo mọi người phân tích trên máy ảo. Thêm vào đó Với virus thì việc giải mã thường chỉ có 1 hàm giải mã duy nhất cho tất cả các String. Hơn nữa với đề bài này thì tìm hàm Giải Mã string không phải là việc khó khăn gì vì nó được gọi rất nhiều. Từ đó ta có thể xref hàm giải mã để giải mã các data trong đó sẽ có Flag.

Để tăng tốc độ giải mã bạn có thể viết IDA Script hoặc IDA Plugin để tăng tốc việc giải mã.

P/s: Hy vong câu trả lời sẽ giải đáp được các thắc mắc của bạn. Còn nếu có chỗ nào giải thích chưa rõ ràng bạn cứ thắc mắc lại để mình giải thích rõ hơn.


 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Yêu Da nhiều.
Ý bước 2 của mình không phải là cách xử lý data của hàm decrypt, hỏi cái đó thì vô duyên quá. Mình muốn hỏi thao tác xref để tìm ra vùng data ấy cơ, vì mình xref không ra.

Còn vấn đề vì sao focus vào hàm decrypt thì mình đồng ý, nó được gọi nhiều và nhìn code có nhiều hứa hẹn, logic như vậy là văn minh ^_^
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Bạn thử tham khảo bài này để tăng số lượng xref lên xem thế nào. Vì BTC không còn giữ idb hay file dump lên không xem lại được.

http://resources.infosecinstitute.com/ida-cross-references-xrefs/

Còn nếu theo logic bạn chạy theo code từ main vào các hàm con thì cũng không lâu lắm.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Vấn đề vì sao focus hàm decrypt thì mình đồng ý mà, vì mình có xem lại và thấy hàm decrypt nằm trong top các hàm được gọi nhiều, và code của nó cũng hứa hẹn, có xor, có hằng số lạ...

Trở lại phần xref, đây là list xref trong file dump của mình (đã rebase theo writeup cho Da dễ hình dung):

2015-09-18_10-46-13.jpg

Trong đó không có nơi nào gọi hàm decrypt với tham số là địa chỉ cụ thể hoặc liên đới đến vùng data như trong writeup, nên mình muốn hỏi rõ cách mọi người làm chỗ này, biết đâu học được thêm gì đó :*
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Hơi khó giải thích vì không đã mất file dump từ ngày trước.

Nên mình đã làm để giải thích cho bạn.

đây là link file dump mới: http://secufiles.com/6ba/dump.7z

Pass giản nén: "datada"

Còn đây là kết quả khi mình xref bằng IDA:

Untitled.jpg

Địa chỉ gọi hàm giải mã Flag với file dump mới là: 0x100116D8
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Cảm ơn Da, mình có xem file dump của bạn, không biết bạn có gửi nhầm file không?
Hơn nữa hình bạn gửi, 0x100012A9 đâu phải hàm decrypt, phải là 0x10002593 chứ?

Updated: Mình có xem thêm thì 16D8 gọi 12A9, 12A9 gọi 3DF4, 3DF4 gọi decrypt. XREF như vậy tương đối kinh khủng, ý Da là sẽ chạy tất cả các hàm 12A9, hay có cách khác để biết cái nào sẽ cho ra flag?
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Xin lỗi bạn mình gửi nhầm file.

Mình đã update lại link nhé.

http://secufiles.com/6ba/dump.7z

Updated: Mình có xem thêm thì 16D8 gọi 12A9, 12A9 gọi 3DF4, 3DF4 gọi decrypt. XREF như vậy tương đối kinh khủng, ý Da là sẽ chạy tất cả các hàm 12A9, hay có cách khác để biết cái nào sẽ cho ra flag?

==> Nếu viết IDA Script thì chạy cũng không lâu lắm.
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: [Writeup] Chủ đề Reverse - Vòng Chung kết WhiteHat Grand Prix 2014

Yessss, yêu và hôn Da nhiều :*
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Bên trên