Archive for the ‘OllyDbg tut_13’ Category


Một cái đầu lạnh để vững vàng, một trái tim đỏ lửa để yêu và làm việc hết mình!

I. Giới thiệu chung

Chào các bạn, hôm nay chúng ta lại gặp nhau ở phần 13 của loạt bài viết về Olly 🙂. Vẫn còn rất nhiều phần khác nữa tới đây, chỉ sợ sức lực tôi có hạn không thể viết hết được thôi.. khà khà. Trong toàn bộ 12 bài viết trước, tôi đã lần lượt giới thiệu cho các bạn về Ollydbg, các kiến thức cơ bản về ASM, các câu lệnh thường được sử dụng, cách patch chương trình cũng như các kiểu BP từ cơ bản đến nâng cao trong Olly và còn nhiều thông tin khác nữa…. Tôi hi vọng rằng qua 12 bài viểt đó các bạn đã tự trang bị cho mình những kĩ năng cơ bản nhất để làm việc với Olly, cũng như tích lũy được những kinh nghiệm để có thể làm việc tiếp với những bài viết chuyên sâu tiếp theo của loạt tutor này. Vậy ở phần 13 này chúng ta sẽ làm gì nhỉ? Thực ra là phần 13 này không có trong kịch bản của lão Rincardo đâu, mà là tự tôi viết. Vì trong phần 12 của lão, cuối bài lão có nói lão sẽ xử lý Crackme Cruehead để tóm được Serial nhưng rồi lão lại không viết ở phần 13, thay vào đó lão đi xử lý các crackme khác. Cho nên tôi quyết định tự tay xử lý Crackme này để phục vụ các bạn 🙂. Rất nhiều điều thú vị đang nằm ở phía trước…. N0w….L3t’s F1nish H1M !!!!!!!

II. Let’s Finish Him 🙂

Nói là xử lý nhưng chúng ta phải làm thế nào nhỉ? Người có kiến thức và kinh nghiệm thì bảo : “Hãy kiểm tra chương trình trước xem có bị pack bởi packer nào không? Nếu bị pack thì giải quyết packer trước rồi tính tiếp. Còn nếu không bị pack thì quá khỏe, chạy thử chương trình xem nó hoạt động ra sao và tìm kiếm thông tin. Sau khi có được những thông tin quan trọng thì load chương trình vào Olly, tìm các cách để tiếp cận, đặt BP ở những điểm mấu chốt, sau đó trace code, comment những chỗ quan trọng, nếu fish được serial thì tốt, còn không thì tìm ra thuật toán và code keygen v..v..Bạn hãy tự mình thực hành đi đã, nếu bị bí chỗ nào hãy post lên để hỏi!”

Những người biết thì thưa thớt nhưng lại thích khoe khoang cũng phán đại :”Thì load vào Olly, tìm cái chuỗi liên quan đến Nag ấy, rồi đặt BP chứ còn làm gì nữa! Không làm được thì show code lên đây tôi giúp cho v..v..”

Riêng cá nhân của tôi thì thấy rằng: “Phải tự mình đúc kết các kinh nghiệm trước khi lâm trận cái đã, khi bạn chưa biết gì mà đã vội nhảy vào trận chiến thì chẳng khác nào lấy trứng chọi đá. Vậy kinh nghiệm ở đâu ra? Kinh nghiệm có được khi bạn đọc những bài viết của người khác, có được khi bạn thực hành với những trường hợp tương tự nhưng bạn thử nghiệm những hướng tiếp cận khác ,kinh nghiệm có được khi bạn tham gia thảo luận một chủ đề kĩ thuật v..v.. Để rồi từ đó bạn rút tỉa dần dần và tích lũy lại thành kinh nghiệm của riêng mình.Rồi sẽ đến một lúc nào đó, lại có người muốn ta chia sẻ kinh nghiệm của mình. Không ai có đủ thời gian và kiên nhẫn để chỉ dạy từng bước cho bạn, bạn phải tự mình tìm tòi và khám phá, khi nào bạn cảm thấy thực sự cần đến sự giúp đỡ tôi nghĩ lúc đó sẽ có người sẵn sàng giúp bạn 🙂

Quay trở lại phần chính của bài viết này là giải quyết crackme CrueHead để tỉm ra môt valid serial. Một hướng tiếp cận cơ bạn sẽ như tôi trình bày bên dưới đây, đương nhiên không nằm ngoài khả năng có những cách tiếp cận khác, điều đó nằm ở sự khám phá của các bạn 🙂.

1. Kiểm tra xem chương trình có bị pack hay không?

Pack file nghĩa là như thế nào? Tại sao phải kiểm tra xem có bị pack? Hiểu một cách đơn giản thì pack file là nén file thực thi (PE file : .dll, .exe, .ocx, v..v..) để làm giảm kích thước của file, việc nèn này ngoài việc nén code, data của chương trình thì trình packer còn thêm cả đoạn decompress stub vào PE file để làm nhiệm vụ unpack chương trình trong memory. Việc nén này không nên hiểu như ta dùng Winrar/Winzip để nén file, vì Winrar/Winzip sau khi nén file xong ta không thể thực thi file đó được mà ta phải làm một bước là extract file, sau đó mới run file.

Khi một file không bị pack thì lúc ta load chương trình vào Olly ta sẽ dừng lại tại EP của chương trình (hay còn gọi là OEP gốc). Còn nếu chương trình đã bị pack, khi ta load vào Olly ta sẽ dừng lại tại EP của packer chứ không phải là EP của chương trình. Do đó nhiệm vụ của chúng ta là phải unpack chương trình trước đã (tức là ta đi tìm lại OEP gốc), rồi mới thực hiện các hướng tiếp cận khác. Đó chính là lý do tại sao ta phải kiểm tra chương trình. Vậy ta kiểm tra như thế nào? Tôi thường sử dụng một số chương trình sau để check :

…………….

Download toàn bộ bài viết tại đây :

ollydbg_tut13

Regards

kienmanowar