Hiển thị các bài đăng có nhãn RE/DEBUG. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn RE/DEBUG. Hiển thị tất cả bài đăng

Chủ Nhật, 3 tháng 7, 2011

OllyDbg - Tut19+20+21+22

Trải qua 18 bài viết từ cơ bản về OllyDbg, các thanh ghi và các lệnh Asm thường dùng cho đến các cách đặt Breakpoint, cũng như phương pháp tổng quan trong việc tiếp cận và giải quyết vấn đề, tôi hi vọng các bạn đã phần nào tự mình tích lũy được những kiến thức nền tảng cơ bản nhất để chuyển tiếp sang những kiến thức mới hơn. 

Sang phần 19 này chúng ta sẽ đi vào một chủ đề mới, đó là : Detect OllyDbg – IsDebuggerPresent. Theo tên của chủ đề thì bài này sẽ tập trung vào giới thiệu và giải thích việc crackme/chương trình sử dụng các cách thức khác nhau nhằm phát hiện ra nó đang bị debug bởi một Debugger nào đó, mà cụ thể ở đây là OllyDbg. Thông qua việc tìm hiểu này, chúng ta sẽ áp dụng những biện pháp/kĩ thuật từ manual cho tới sử dụng plugin để vượt qua sự kiểm tra đó, giúp cho OllyDbg có thể tiếp tục debug được chương trình mà không bị Terminate.

Bài 19 này tập trung vào cách thức phát hiện OllyDbg phổ biến nhất, đó là sử dụng API: IsDebuggerPresent và phương pháp để bypass ...

Download toàn bộ bài viết Tut19: http://www.4shared.com/file/191257326/bb4acbe0/OllyDbg_tut19.html

Download toàn bộ bài viết Tut20: http://www.mediafire.com/?nyzuoj0ebk1

Download toàn bộ bài viết Tut21: http://www.mediafire.com/?njjnjwngxzj

Download toàn bộ bài viết Tut22: http://www.mediafire.com/?n0jzmzahnmy

Source: Kienmanowar.wordpress.com

OllyDbg - Tut14+15+16+17+18

I. Giới thiệu chung

Ở phần 13 của loạt tuts về Ollydbg, tôi đã hướng dẫn các bạn cách kiểm tra xem file có bị pack hay không, cách tìm các điểm quan trọng để tiếp cận mục tiêu, phân tích chi tiết hoạt động của Crackme CrueHead thông qua việc trace và analyze code để từ đó tìm ra một real serial cho chuỗi Name nhập vào. Như vậy, qua bài viết đó tôi đã truyền tải tới các bạn những kinh nghiệm thực tế khi làm việc với một crackme đơn giản nhưng cũng sẽ là tiền đề cho các bạn khi gặp các crackme hoặc các chương trình khác sau này ... Ở phần 14 này chúng ta sẽ quay lại làm việc với các target do lão Rincardo đưa ra, cụ thể hơn là tập trung vào chủ đề Fishing Serial.

II. Fishing Serial J

Chà Fishing Serial tức là gì nhỉ? Nghe như kiểu chúng ta đang đi câu cá, giữa một hồ cá rộng và sâu, làm sao ta câu được một con cá ưng ý J… trong ngữ cảnh của Cracking thì ý nghĩa cũng gần như vậy. Fishing Serial ở đây có nghĩa là chúng ta đi câu Serial, mà phải là valid Serial nhé chứ câu lung tung là mệt và dễ stress. Đối với những bạn mới vào nghề thì việc tìm được một valid Serial luôn mang lại một cảm giác lâng lâng khó tả như tìm được một “kho báu” giữa lòng đại dương J. Hồi tôi chập chững lọ mọ đọc tutor và cặm cụi mò theo, cho đến khi tìm được serial hợp lệ tự nhiên cảm thấy sướng khó tả, lúc đó nếu có ai ở bên cạnh chắc tôi sẽ kéo vào và chỉ trỏ để khoe những gì mình đã làm, dù chắc gì người đó đã hiểu mình đang làm gì, có khi lại cho mình đang bị chập lolz.

Trong phần 14 này tôi sẽ hướng dẫn các bạn làm việc với dạng Hardcoded Serial (đây là một dạng cơ bản và đơn giản), có nghĩa là dạng Serial cố định không được tính toán dựa trên Name nhập vào, cũng không thay đổi khi bạn chạy trên bất kì máy nào (tức là Serial đó valid trên mọi máy). Có bạn sẽ cho rằng vậy thì dễ quá, viết làm gì? Nhưng xin thưa, phải có dễ thì mới có khó, phải đi từ basic rồi mới tới advanced. Quan điểm của tôi là cứ từ từ mà tiến, không đi đâu mà phải vội vàng. Ok giờ chúng ta vào thực hành luôn nhé, trong bài này ta sẽ làm việc với hai Crackme của lão RedH@wk (lão này cũng là một thành viên trụ cột trong CrackLatinos).

Download toàn bộ bài viết: http://kienmanowar.files.wordpress.com/2008/12/ollydbg_tut14.pdf

Các target dùng trong bài viết (đổi đuôi pdf thành rar): http://kienmanowar.files.wordpress.com/2008/12/crackmes-leccion-13rar.pdf

Download toàn bộ bài viết Tut15 (đổi thành .rar): http://kienmanowar.files.wordpress.com/2009/01/ollydbg_tut15rar.pdf

Download toàn bộ bài viết Tut16: http://www.mediafire.com/?dk3yus9a5cc51oy

Download toàn bộ bài viết Tut17: http://www.mediafire.com/?wjdmk5yzmmz#1

Download toàn bộ bài viết Tut18: http://www.mediafire.com/?wxozigz2q2z

Source: Kienmanowar.wordpress.com      

OllyDbg - Tut13

I. Giới thiệu chung 

Ở 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.

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  .... 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 ...

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.... Để 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: http://kienmanowar.files.wordpress.com/2008/11/ollydbg_tut13.pdf

Source: Kienmanowar.wordpress.com      

OllyDbg - Tut12

I. Giới thiệu chung

Chào các bạn, trong phần bài viết trước ở phần 11 tôi đã hướng dẫn các bạn tìm hiểu về hai dạng Break Points là Hardware Breakpoints và Conditional Breakpoints, cũng như các cách thiết lập cho hai dạng BP này. Lẽ ra trong phần 11 tôi cũng định giới thiệu luôn về dạng Message BreakPoints, nhưng thiết nghĩ nếu gộp luôn vào trong phần 11 sẽ khiến các bạn quá tải và dẫn đến “tẩu hỏa” mất. Cho nên tôi cắt riêng phần Message Breakpoints ra và quyết định giới thiệu về nó trong phần 12 này.

II. BreakPoints in OllyDbg

1. Message Breakpoints

Message Breakpoint là gì nhỉ? Sao lại lắm lọai BP đến thế J. Khi gặp bất kì những vấn đề nào mới, trong đầu tôi luôn xuất hiện những câu hỏi liên quan đến vấn đề đó. Sau đó, tôi tìm cách tiếp cận thông tin để giải quyết cho những câu hỏi của tôi. Trước tiên, tôi chẳng biết Message Breakoint nó là cái gì, cho nên tôi tra help của Olly trước, hi vọng sẽ tìm ra chút thông tin nào đó về nó. Đọc trong help file của Olly thì chỉ nhận được một chút thông tin như sau:

Message breakpoint is same as conditional logging except that OllyDbg automatically generates condition allowing to break on some message (like WM_PAINT) on the entry point to window procedure. You can set it in the Windows window

Thông tin đầu tiên gợi mở cho tôi là thằng Message breakpoint này gần tương tự như Conditional Log BP ngoài trừ việc khác ở chỗ Olly hoàn toàn tự động tạo ra các điều kiện cho phép dừng lại tại các Message.

Mà cái Message ở đây chính là các Windows Message. Tôi không phải là dân chuyên lập trình cho nên tôi tìm hiểu tiếp các thông tin khác trên Net về Windows Message: 
“The messages in Windows are used to communicate most of the events, at least in the basic levels. If you want a window or control (which is a specialized window) does something, you must send a message to him. If another window wants you do something, then it sends a message to you. If an event occurs, such as when the user moves the mouse, presses the keyboard, etc… the system sends a message to the affected window. This window receives the message and acts suitably.”
- Message là một trong những phương tiện giao tiếp quan trọng nhất trong môi trường Windows.

- Lập trình trong Windows chủ yếu là đáp ứng lại những sự kiện.

- Message có thể báo hiệu nhiều sự kiện gây ra bởi người sử dụng, hệ điều hành, hoặc chương trình khác.

- Có hai lọai message: window message và thread message.

Window Message

- Tất cả các message đều được trữ trong một Message Queue (một nơi trong bộ nhớ). Những message này sau đó sẽ được luân chuyển giữa các ứng dụng.

Message Loop

- Bạn có thể gọi những message bằng cách tạo ra một Message Queue.

- Message Loop là một vòng lặp kiểm tra những message trong Message Queue.

- Khi một message được nhận, Message Loop giải quyết nó bằng cách gọi Message Handler (một hàm được thiết kế để giúp Message Loop xử lý message)<hầu hết công việc lập trình của mình sẽ tập trung vào đây>

- Message Loop sẽ kết thúc khi nhận được message WM_QUIT (lúc người dùng chọn File/Exit || click vào nút Close || bấm Alt+F4)

- Khi bạn tạo cửa sổ (ứng dụng) Windows sẽ tạo cho bạn một Message Handler mặc định. Bạn sẽ vào đây để sửa chữa giúp ứng dụng phản hồi lại những sự kiện theo ý bạn muốn ->chương trình của bạn.

- Tất cả những control chuẩn đều như thế. Lấy một button làm ví dụ: khi nó nhận WM_PAINT message nó sẽ vẽ button; khi bạn click chuột trái lên nó sẽ nhận WM_LBUTTONDOWN message và nó sẽ vẽ hình button bị nhấn xuống; khi buông chuột ra nó nhận WM_LBUTTONUP message và sẽ vẽ lại button bình thường.

- Tên của window message thường có dạng WM_ và hàm để xử lý message đó thường có dạng On. Ví dụ hàm xử lý WM_SIZE message là OnSize.

- Message thường có hai tham số lưu trữ thông tin về sự kiện(32 bit): lParam kiểu LONG và wParam kiểu WORD. Ví dụ: WM_MOUSEMOVE sẽ trữ tọa độ chuột trong một tham số còn tham số kia sẽ có cờ hiệu để ghi nhận trạng thái của phím ATL, Shift, CTRL và những nút trên con chuột.

- Message có thể trả về một giá trị giúp bạn gửi dữ liệu ngược trở về chương trình gửi nó. Ví dụ: WM_CTLCOLOR message chờ bạn trả về một HBRUSH (khi dùng AppWizard để tạo nhanh ứng dụng bạn chú ý những hàm có dạng On… và nhận xét những kiểu trả về của nó, bạn sẽ hiểu hơn về cơ chế liên kết giữa các thành phần ứng dụng với nhau).

Download toàn bộ bài viết: ollydbg_tut12

Source: Kienmanowar.wordpress.com      

OllyDbg - Tut11

I. Giới thiệu chung 

Trong phần 11 này các bạn sẽ tìm hiểu thêm về các dạng Break Points khác như Hardware Breakpoints, Conditional và Message BreakPoints, những điều thú vị đang nằm ở phía trước.

II. BreakPoints in OllyDbg

1. Hardware Breakpoints

Hardware Breakpoint là gì nhỉ? Tự nhiên nếu có ai hỏi tôi một câu hỏi như vậy chắc tôi cũng không biết phải giải thích thế nào. Ngay cả trong bài viết của lão làng Ricardo Navarja cũng không giải thích chi tiết về nó. Vậy là phải tự mình tìm hiểu rồi, đọc trong help file của Olly thì chỉ nhận được một chút thông tin như sau:

Hardware breakpoint (available only when running Debugger under Windows ME, NT, 2000 or XP). 80×86-compatible processors allow you to set 4 hardware breakpoints. Unlike memory breakpoint, hardware breakpoints do not slow down the execution speed, but cover only up to 4 bytes. OllyDbg can use hardware breakpoints instead of INT3 when stepping or tracing through the code.

Điều đầu tiên ta thu thập được qua đoạn này là Hardware breakpoint (viết tắt HWBP) không thể sử dụng được nếu như bạn dùng Olly trên môi trường Windows 98. Điều thứ hai là chúng ta được phép thiết lập tới 4 HWBP, so với Memory BP là quá đã rồi vì như ta đã biết tại một thời điểm Olly chỉ cho phép có duy nhất một memory bp. Thêm vào đó HWBP không làm châm quá trình thực thi của chương trình. Điều cuối cùng ta nhận được là HWBP không sử dụng INT3, vậy thì nó sử dụng lệnh gì để dừng sự thực thi của chương trình?? Chúng ta tiếp tục tìm hiểu thêm vậy J. Đi lòng vòng một hồi tôi cũng có thêm được một chút thông tin: HWBP được hỗ trợ trực tiếp bởi CPU, sử dụng một số thanh ghi đặc biệt hay còn được gọi là debug registers. Có bốn thanh ghi đó là : DR0, DR1, DR2, DR3, bốn thanh ghi này sẽ được sử dụng để lưu giữ những địa chỉ mà ta thiết lập HWBP. Điều kiện của mỗi break points để cho dừng sự thực thi của chương trình lại được lưu trong một thanh ghi đặc biệt khác là CPU register, đó là thanh ghi DR7. Khi bất kì một điều kiện nào thỏa mãn (TRUE) thì processor sẽ quăng một exception là INT1 (khà khà vậy là nó dùng INT1 nhé) và quyền điều khiển lúc này sẽ được trả về cho trình Debug của chúng ta. Có bốn khả năng để dừng sự thực thi của một chương trình:

  • Khi một câu lệnh được thực thi.
  • Khi nội dung của memory có thay đổi (modified).
  • Khi một ví trí memory được đọc ra hoặc được cập nhật(updated).
  • Khi một input-output port được tham chiếu tới. (cái này tôi cũng chưa tìm hiểu).
Khả năng của tôi cũng chỉ biết giải thích đến như thế, các bạn muốn tìm hiểu thêm vui lòng tìm đọc các tài liệu khác. Bây giờ là phần thực hành, mở Olly lên và load crackme vào nào:


Download toàn bộ bài viết: ollydbg_tut11

Source: Kienmanowar.wordpress.com     

Thứ Bảy, 2 tháng 7, 2011

OllyDbg - Tut10

I. Giới thiệu chung

Ở phần 10 này sẽ đi sâu hơn một chút về quá trình làm việc với BreakPoint trong OllyDbg, việc hiểu rõ quá trình cũng như cách thức đặt BreakPoints sẽ giúp đỡ chúng ta rất nhiều trong việc dừng sự thực thi của một chương trình tại nơi mà chúng ta mong muốn. Thêm vào đó chúng ta cũng tìm hiều thêm về một số cách đặt Breakpoint, target trong phần này vẫn là Crackme mà các bạn làm việc từ đầu đến giờ, điều thú vị đang nằm ở phía trước.

II. BreakPoints in OllyDbg

1. Common Breakpoint or BPX

Đây có thể nói là phương pháp đặt breakpoint phổ biến mà chúng ta đã làm việc ngay từ các phần trước của bộ tuts này, nó còn được gọi là BPX bởi vì nó có nhiều điểm tương đồng với lệnh BPX của SoftIce (ai đã từng dùng qua SoftIce thì chắc là biết còn tôi chỉ đụng SoftIce đúng một lần duy nhất J), thay vì phải viết dài dòng là BreakPoint thì để tránh rườm rà trong quá trình làm việc thông qua Command Line, tác giả đã rút gọn lại là BPX, tuy nhiên trong Olly chữ “X” thường được sử dụng trong việc đặt BP với các hàm API (liên quan tới version của Windows) cho nên tác giả của Olly đã rút gọn lại và thêm một command khác mà ta hay dùng đó là BP (vừa có thể đặt BP tại API và address).

Thông thường, đối với một câu lệnh nào đó mà chúng ta muốn đặt BPX lên nó thì đơn giản nhất ta chỉ việc chọn dòng lệnh mà ta muốn và nhấn F2, nếu nhấn F2 một lần nữa tức là ta remove BP khỏi câu lệnh.

Giải thích như trên có thể khiến các bạn bị rối, tóm lại nếu muốn đặt BP tại một dòng lệnh bất kì các bạn chỉ cần nhớ là bấm F2 tại dòng lệnh đó. Giờ ta load Crackme vào Olly, chúng ta sẽ dừng lại tại Entry Point của crackme:


Download toàn bộ bài viết: ollydbg_tut10

Source: Kienmanowar.wordpress.com    

OllyDbg - Tut9

I. Giới thiệu chung 

Trong các phần tiếp theo tới đây chúng ta sẽ dần dần tiếp cận những kiến thức mới mẻ hơn, sẽ có nhiều đất để cho chúng ta tìm tòi, học hỏi và thực hành. Chúng ta sẽ tìm hiểu dần dần từng phần một một cách chậm rãi, song song với việc đọc lý thuyết thì chúng ta sẽ thực hành luôn những gì chúng ta đã tìm hiểu được và tự bổ sung những mảng mà chúng ta còn khiếm khuyết. Bài viết này tôi sẽ trình bày tới các bạn một số thuật ngữ cơ bản, cách thức làm việc với các hàm APIs, cách patch thông qua các cờ và cuối cùng là các edit trực tiếp code của chương trình.

II. Thuật ngữ cơ bản, làm việc với APIs và patch thông qua cờ 

Trong phần 9 này chúng ta vẫn tiếp tục sử dụng crackme của CRUEHEAD để demo, Load crackme vào trong Olly chúng ta dừng lại tại entrypoint của Crackme. Vậy entrypoint nó là cái gì? Có khá nhiều câu hỏi của các bạn liên quan đến nó, tôi không phải là dân lập trình chính gốc nên tôi hiểu thế nào sẽ giải thích cho các bạn.

Về cơ bản thuật ngữ EntryPoint (EP) ám chỉ điểm bắt đầu của một chương trình nơi mà tại đó trở đi chương trình sẽ được thực thi một cách bình thường. Không nên bị nhầm lẫn giữa EP và OEP (Original Entry Point), OEP là một thuật ngữ khác mà chúng ta sẽ tìm hiểu ở các phần tiếp theo sau của bộ tuts này. Sau khi chúng đã open một chương trình trong Olly, đợi cho quá trình phân tích kết thúc thì Olly sẽ đưa chúng ta dừng lại tại EntryPoint của chương trình đó.


Download toàn bộ bài viết: ollydbg_tut9

Source: Kienmanowar.wordpress.com    

OllyDbg - Tut8

I. Giới thiệu chung

Với phần 8 của loạt tuts này, phần này tập trung vào giới thiệu về vòng lặp và các câu lệnh liên quan tới chuỗi. Bài viết sẽ không sa đà vào giải thích cặn kẽ từng cấu trúc của vòng lặp mà sẽ đi nhanh và tập trung nhấn mạnh vào những phần quan trọng. 

II. Giới thiệu về vòng lặp

Một vòng lặp là một chuỗi các lệnh được lặp lại. Số lần lặp có thể đã được xác định trước hoặc phụ thuộc vào điều kiện. Thông thường trong Asm thì bộ đếm vòng lặp thường là thanh ghi ECX, nó được khời tạo bằng số lần lặp. Sau khi thực hiện xong các lệnh bên trong vòng lặp giá trị của thanh ghi ECX sẽ tự động giảm đi 1. Nếu như giá trị của ECX còn khác 0 thì các lệnh trong vòng lặp còn tiếp tục được thực hiện , còn nếu như ECX bằng 0 thì sẽ thoát khỏi vòng lặp và thực hiện các lệnh tiếp theo bên dưới vòng lặp. Lấy ví dụ minh họa:

XOR ECX, ECX\ Đoạn lệnh này thực hiện nhiệm vụ khởi gán cho thanh ghi
ADD ECX, 15 / ECX.Số lần lặp lúc này sẽ là 15 và được lưu trong thanh ghi ECX.
LOOP:
DEC ECX // Giá trị của thanh ghi ECX sẽ được giảm đi 1
……………… \ Thực hiện các lệnh trong thân vòng lặp
……………… /
TEST ECX, ECX \ Chừng nào giá trị của ECX còn khác 0
JNE LOOP / thì còn tiếp tục thực hiện

Minh họa ví dụ trên trong Olly như sau :


Vùng mà tôi khoanh vàng ở trên hình đó chính là vòng lặp, các lệnh trong vòng lặp này sẽ được thực hiện lặp lại cho tới khi nào thanh ghi ECX có giá trị 0. Các câu lệnh bắt đầu từ 0×00401008 cho tới 0x0040100C chính là thân của vòng lặp. Do chỉ mang tính chất minh họa nên tôi để toàn lệnh NOP, các bạn có thể thay thế bằng các lệnh khác. Hiện tại chúng ta đang ở tại câu lệnh XOR ECX, ECX , nhấn F7 để trace và quan sát giá trị của thanh ghi ECX.

Download toàn bộ bài viết: http://kienmanowar.files.wordpress.com/2008/09/ollydbg_tut8.pdf

Source: Kienmanowar.wordpress.com    

OllyDbg - Tut7

I. Giới thiệu chung

Trong phần 7 của loạt tuts này sẽ tập trung giới thiệu tới các bạn về lệnh CALL và RET. Xét một cách tổng quan thì đây là 2 lệnh đơn giản, tuy nhiên khi đi vào chi tiết nhiều người thường khó hiểu đặc biệt là những bạn mới làm quen với ASM. Chính vì lý do này mà phần 7 sẽ đi sâu vào giải quyết 2 lệnh này.

II. CALL và RET

Trước tiên chúng ta mở Olly lên và load crackme vào. Tại cửa sổ CPU, bạn nhấn chuột phải và chọn như sau (hoặc nhấn Ctrl + G):
Source: Kienmanowar.wordpress.com   

OllyDbg - Tut6

I. Các lệnh so sánh và các lệnh nhảy có điều kiện

Thông thường, khi chúng ta thực hiện việc so sánh là chúng ta so sánh giữa hai đối tượng trở lên và rồi đi đến một quyết định vào đó. Lấy một ví dụ vui : Người A béo hơn người B do đó suy ra người A ăn nhiều hơn người B J.

Trong Cr@cking, khi chúng ta thực hiện so sánh giữa hai toán hạng thì kết quả của việc so sánh này sẽ quyết định rằng chương trình có thực hiện câu lệnh nhảy bên dưới hay là không. Và đây cũng là những kiến thức cơ bản luôn luôn được đề cập đến trong các bài viết hướng dẫn dành cho Newbie (những người mới bắt đầu làm quen với Crack).

Chúng ta biết rằng khi một chương trình yêu cầu ta phải nhập Serial để đăng kí, thì bản thân chương trình đó sẽ quyết định xem liệu rằng cái dãy serial mà chúng ta nhập vào kia có thỏa mãn (đúng) hay không thỏa mãn thông qua việc tính toán và tiến hành các câu lệnh so sánh. Dựa trên kết quả của việc so sánh này chương trình sẽ đưa ra quyết định có thực hiện lệnh nhảy hay là không, điều này tùy thuộc vào chúng ta có nhập serial không, serial của chúng ta nhập vào đúng hay sai ?

1. Lệnh CMP

Đây là câu lệnh so sánh rất thường gặp trong quá trình chúng ta phân tích chương trình, các điều kiện nhảy thường được cung cấp bởi lệnh CMP này. Tổng quát câu lệnh CMP có dạng như sau :

CMP Đích, Nguồn

Lệnh này thực hiện việc so sánh toán hạng Đích với toán hạng Nguồn bằng cách lấy toán hạng Đích trừ đi toán hạng Nguồn. Có thể nói lệnh này tương đương với lệnh SUB nhưng nó khác với lệnh SUB ở chỗ kết quả không được lưu lại (tức là toán hạng đích không bị thay đổi). Tác dụng chủ yếu của lệnh CMP là tác động lên các cờ. Một điểm chú ý khác nữa là các toán hạng của lệnh CMP không thể cùng là các ô nhớ. Vậy tổng kết lại lệnh này thường được dùng để tạo cờ cho các lệnh nhảy có điều kiện.

Dưới đây là bảng trích dẫn các cờ chính theo quan hệ Đích và Nguồn khi so sánh 2 số không dấu:

CF
ZF
SF
Đích = Nguồn
0
1
0
Đích > Nguồn
0
0
0
Đích < Nguồn
1
0
1

Download toàn bộ bài viết: ollydbg_tut6

Source: Kienmanowar.wordpress.com   

OllyDbg - Tut4+5

I. Lời nói đầu

Trong phần bốn này sẽ đề cập tới những câu lệnh Asm cơ bản, cách thức chúng thi hành. Như những gì chúng ta đã làm trong các phần trước, sẽ không có gì dễ hiểu hơn là khi tìm hiểu về một công cụ chúng ta tiến hành thực hành luôn trên công cụ đó để kiểm nghiệm những kiến thức mà chúng ta tiếp thu được trong quá trình đọc tài liệu.

II. Giới thiệu chung

Tập lệnh của bộ vi xử lý có đến hơn trăm lệnh, trong đó có các lệnh được thiết kế dành riêng cho các bộ vi xử lý cao cấp. Trong bài viết này tôi chỉ đề cập đến những câu lệnh hay dùng nhất, chung nhất mà thôi. Việc cung cấp tất cả các lệnh vượt quá khuôn khổ cho phép của bài viết, cũng như tôi cũng không đủ sức để mà thực hiện điều này. Do đó việc tham khảo thêm các nguồn tài liệu khác để bổ sung thêm kiến thức là điều hết sức cần thiết cho các bạn.

III. Chi tiết về các câu lệnh ASM hay dùng

1. NOP (No Operation)

Cái tên của nó đã cho bạn thấy được ý nghĩa. Lệnh này không thực hiện một công việc gì cả ngoại trừ việc tăng nội dung của thanh ghi EIP, nó không gây ra bất kì thay đổi nào trong thanh ghi, stack hoặc memory. Chính vì ý nghĩa này của nó mà câu lệnh này thường được dùng vào mục đích hủy bỏ bất kì câu lệnh nào (không cho lệnh đó thực hiện), bằng cách ta thay thế câu lệnh sắp thực hiện bằng lệnh NOP chương trình sẽ vẫn thực thi nhưng thay vì thực thi câu lệnh gốc thì giờ đây do được thay thế bằng NOP nên nó sẽ không làm gì cả. Đó là lý do tại sao các bạn hay thấy người ta sử dụng NOP (ví dụ như : tôi muốn loại bỏ một thông báo nào đó, để làm được điều này tôi thay thế lệnh Call đến thông báo bằng lệnh NOP, vậy là thông báo đó sẽ biến mất J ). Okie, mở Cruehead crackme trong Olly, ta có như sau:


Download bài viết đầy đủ Tut4: ollydbg_tut4

Download bài viết đầy đủ Tut5: ollydbg_tut5

Source: Kienmanowar.wordpress.com  

Thứ Sáu, 1 tháng 7, 2011

OllyDbg - Tut3

I. Lời nói đầu

Phần ba này sẽ tập trung giới thiệu tới các bạn ý nghĩa của các thanh ghi, các cờ thường được sử dụng trong quá trình crack hay reverse chương trình. Tôi sẽ cố gắng đúc kết lại sao cho các bạn dễ dàng tiếp cận nhanh nhất có thể.

II. Giới thiệu chung

Thông tin được lưu giữ bên trong bộ vi xử lý trong các thanh ghi. Các thanh ghi được phân loại theo chức năng của chúng. Bộ vi xử lý dựa vào sự trợ giúp của các thanh ghi để thực thi một chương trình. Các thanh ghi được phân loại như sau : thanh ghi dữ liệu chứa dữ liệu cho một thao tác, thanh ghi địa chỉ chứa địa chỉ của lệnh hay của dữ liệu và thanh ghi trạng thái lưu trạng thái hiện thời của bộ vi xử lý. Đối với bộ xử lý 8086 có bốn thanh ghi dữ liệu công dụng chung, các thanh ghi địa chỉ được chia ra làm các thanh ghi đoạn, thanh ghi con trỏ, thanh ghi chỉ số; thanh ghi trạng thái còn được gọi là các cờ. Khi mới làm quen với các thanh ghi tôi khuyên bạn không nên học thuộc hết các chức năng của các thanh ghi liền một lúc, các bạn nên làm quen với các thanh ghi dần dần trong quá trình học cũng như trong lúc thực hành với Ollydbg.

III. Chi tiết về các thanh ghi và công dụng

1. Thanh ghi ESP

Thanh ghi đầu tiên mà tôi muốn giới thiệu tới các bạn đó chính là thanh ghi ESP (con trỏ ngăn xếp – Stack pointer). Thanh ghi này luôn trỏ tới đỉnh hiện thời của ngăn xếp. Các bạn xem hình minh họa dưới đây:



Download bài viết đầy đủ tại đây: ollydbg_tut3
Source: Kienmanowar.wordpress.com 

OllyDgb - Tut2

I. Lời nói đầu

Trrong phần thứ hai này tôi sẽ đề cập đến việc sử dụng các hệ thống số trong Olly, thêm vào đó là một chút kiến thức cơ bản về Stack.


II. Các hệ thống số


Có ba hệ thống số được sử dụng nhiều nhất đó là Hệ nhị phân, Hệ mười và cuối cùng là hệ thập lục phân. Chúng ta sẽ đi lần lượt định nghĩa về từng hệ thống này.


Hệ nhị phân: Trong hệ đếm nhị phân cơ số là 2 và nó chỉ có hai chữ số là 0 và 1.


Hệ mười (thập phân): Có thể nói đây là một hệ thống được chúng ta sử dụng nhiều nhất trong đời sống hàng ngày.Hệ này bao gồm mười chữ số bắt đầu từ 0 đến 9. Hệ đếm này là hệ đếm mà chúng ta quen thuộc nhất.


Hệ mười sáu: Các số dưới dạng nhị phân thường là dài và khó nhớ. Việc chuyển đổi các số thập phân sang nhị phân thường khó. Khi chúng ta viết chương trình hợp ngữ chúng ta thường sử dụng cả hai hệ đếm là : nhị phân và thập phân, và cả một hệ đếm thứ ba là hệ 16 hay còn gọi tắt là số hex. Số hex cho phép chúng ta chuyển đổi một cách dễ dàng sang số ở hệ nhị phân và ngược lại.


Note: Để đổi số hex sang số nhị phân chúng ta chỉ việc biểu diễn các chữ số của nó dưới dạng nhị phân. Còn đổi số nhị phân sang số hex, thì ta nhóm 4 chữ số của số nhị phân lại theo thứ tự lần lượt từ phải qua trái. Sau đó chuyển thành số hex tương ứng.


Hệ đếm hex là hệ đếm có cơ số 16 cho nên các chữ số của nó là : 0-9, A-F. (Vì hết các kí hiệu chữ số để biểu diễn nên người ta dùng thêm các chữ cái để biểu diễn: các chữ cái từ A – F tương ứng biểu diễn các số từ 10 – 15).

Khi bạn muốn làm quen với công việc debug trong Olly thì điều đầu tiên tôi khuyên bạn nên làm quen với các hệ thống số ở trên, Olly chủ yếu sử dụng hệ 16. Bên cạnh đó các bạn cũng phải học các phương pháp chuyển đổi đơn giản giữa các hệ số với nhau để tiện cho quá trình bạn làm việc. Có thể các bạn sẽ cho lời tôi nói là thừa bởi vì ngày nay có quá nhiều công cụ hỗ trợ cho chúng ta làm việc này, nhưng theo tôi đây vẫn là những kiến thức tiên quyết vì công cụ chỉ là hỗ trợ để chúng ta làm việc nhanh chóng mà thôi, còn muốn hiểu sâu, rộng thì chúng ta không nên bỏ qua những chi tiết dù là vụn vặt nhất.


Ở đây trong bài viết này, tôi coi như các bạn đã tự mình trang bị những kiến thức cơ bản rồi. Do đó để dễ dàng hơn cho chúng ta khi làm việc với các hệ thống số, Windows cung cấp cho chúng ta một công cụ khá mạnh mà đôi khi ít người để ý mà thậm chí có khi còn không biết là nó hỗ trợ cho chúng ta các tính năng liên quan đến việc chuyển đổi J, đó chính là tiện ích Calculator. Có nhiều cách thức để mở chương trình này nhưng cách nhanh nhất là vào menu Run và gõ Calc.exe (thậm chí chỉ cần gõ Calc cũng mở được).


Download bài viết đầy đủ:
ollydbg_tut2
 
Source: Kienmanowar.wordpress.com

OllyDbg - Tut1

I. Lời nói đầu  

Tình cờ qua bên site của lão Ricardo Narvaja thấy được bộ tut này khá hay và rất cơ bản cho tất cả những ai muốn tìm hiểu về cracking thông qua sự trợ giúp của chương trình debugger đã trở nên quá nổi tiếng, đó chính là Ollydbg. Tôi rất khoái các tut bên Cracklatinos nhưng ngặt nỗi toàn là tiếng TBN, nhưng thấy bộ tut này hay nên máu quá, quyết định trans từ TBN qua English, rồi từ Eng lại hì hục viết lại theo cách mình hiểu để truyền đạt những gì mình biết cho anh em. Ý tưởng chính của loạt tut này theo như tác giả của nó nói là nhằm cung cấp những kiến thức cơ bản nhất cho tất cả những ai chuẩn bị bắt đầu bước vào tìm hiểu nghệ thuật cracking với sự trợ giúp của Ollydbg. Mặc dù tiêu đề của tut là Introduction (tức là chỉ giới thiệu thôi) nhưng thực chất bộ tuts này sẽ cung cấp cho chúng ta một kiến thức nền tảng vững chắc để có thể đọc và hiểu được các tuts dành cho những người có trình độ advanced, đồng thời thông qua loạt tuts này nó còn giúp chúng ta có khả năng áp dụng các kĩ thuật mới trong việc cracking.

II. Tại sao lại là Ollydbg ?

Ở đây chúng ta sẽ không bàn luận đến việc tạo ra một công cụ khác hay hơn, mạnh hơn Ollydbg cũng như không để cập tới việc chỉnh sửa lại một chương trình đã quá nổi tiếng từ lâu là SoftIce, chỉ đơn giản là những tín đồ cuồng tín của SoftIce đang dần dần chuyển qua xài Ollydbg bởi tính dễ dùng, không gây crash máy bất thình lình như SoftIce, được hỗ trợ bởi nhiều teams trên thế giới thông qua các Plugins cũng như các bản Ollydbg được mod lại nhằm chống lại các cơ chế anti-debug cũng như anti-Ollydbg, và vì một lý do đơn giản khác nữa đó là loạt tuts này dành riêng để nói vể Ollydbg J.

III. Nhiệm vụ đầu tiên 

Hì nhiệm vụ đầu tiên của chúng ta bây giờ là gì ? Do đây là tut viết về Olly nên việc chúng ta phải làm là đi tìm Olly ở đâu để còn load về mà xài. Bạn có thể vào home site của Olly là để download: http://www.ollydbg.de/download.htm



Khi download được Olly về rồi thì rất đơn giản chỉ việc extract nó ra rồi sử dụng, tôi khuyên bạn nên để chung tất cả công cụ liên quan đến RE, Cracking vào 1 thư mục, ví dụ như của tôi trên hình minh họa, như thế ta dễ dàng quản lý hơn. Okie coi như bạn đã có Ollydbg, chúng ta chỉ việc Run cái file OLLYDBG.exe là Olly hoạt động liền, không phức tạp về mặt cài đặt cũng như sử dụng như SoftIce. Giao diện của Ollydbg như sau:


Đây là bản Ollydbg của tôi, đã được chỉnh sửa cũng như cấu hình lại. Nếu như các bạn download bản Ollydbg trên home site hoặc từ các nguồn khác có thể sẽ khác của tôi, và để có thể hiện thị menu Plugins thì các bạn làm như sau:


Chọn như hình trên hoặc vào Options > Appearance , chọn tab Directories và chỉnh lại đường dẫn tới thư mục Plugins và thư mục UDD.


Sau đó nhấn Ok và chạy lại Olly thì sẽ thấy được menu Plugins. Phần tiếp theo, tôi sẽ giới thiệu tới các bạn chi tiết các cửa số chính trong Ollydbg và để minh họa cho các phần sau của bài viết, tôi sẽ sử dụng một Crackme rất nổi tiếng đó là : CRACKME.EXE của tác giả CRUEHEAD. Để load crackme này vào trong Olly ta nhấn chuột vào biểu tượng sau hoặc vào File > Open (or F3):
 

Sau đó chúng ta sẽ chọn chính xác crackme mà chúng ta dùng để minh họa cho bài viết này.


Kết quả sau khi load vào Olly chúng ta có được như sau:


Chắc các bạn nhìn vào sẽ cảm thấy choáng ngợp, không biết phải bắt đầu từ đâu. Tôi sẽ cùng các bạn tìm hiểu từng cửa sổ một của Olly. Như các bạn nhìn thấy ở trên màn hình chính của Olly được phân ra làm 5 cửa sổ chính, mỗi cửa sổ có một nhiệm vụ và một tên riêng:


Ở đây chúng ta thấy có 4 cửa sổ lớn:

- The Disassembler Window : Ở cửa sổ này các bạn có thể nhìn thấy các đoạn code của chương trình ở dạng ngôn ngữ asm, và đồng thời tại cửa sổ này các bạn cũng có thể chú thích cho từng từng dòng mã asm.

- The Registers Window : Đây là cửa số chứa thông tin chi tiết về các thanh ghi như eax, ebx, ecx ... Các cờ trạng thái cũng được quản lý tại cửa sổ này.

-  The Dump Window : Tại cửa sổ này bạn có thể xem hoặc chỉnh sửa theo 2 dạng là hex và Ascii bộ nhớ của chương trình mà bạn muốn debug.

-   The Stack Window : Một cửa sổ không kém phần quan trọng , mọi thứ trước khi được thực hiện phải được nạp vào Stack.

Cuối cùng có một cửa sổ nằm bên dưới cửa sổ Disassembler Window: Chúng ta gọi nó là The Tip Window . Đây không phải là tên gọi của nó nhưng với tôi, tôi thích gọi như vậy J .Khi bạn đang ở tại một dòng code nào đó trong quá trình debug , Olly sẽ cho bạn thấy thông tin chi tiết về dòng code đó . Lấy ví dụ đơn giản như sau : nếu bạn debug tới dòng lệnh ” mov eax , dword ptr [123]“ . Thì cửa sổ này sẽ cho bạn biết  được giá trị hay con số nào đang được lưu giữ tại [123] . Và còn nhiều điều thú vị khác nữa mà cửa sổ này sẽ mang lại cho chúng ta.

Trên đây là những gì tổng quan nhất mà các bạn nên biết. Phần dưới đây tôi sẽ đi vào giới thiệu về chức năng của từng cửa sổ một thông qua các hình minh họa, tất nhiên không thể giới thiệu chi tiết hết được, chúng ta sẽ tìm hiểu dần dần trong từng trường hợp cụ thể ở các loạt tuts sau thêm vào đó các bạn cũng nên chủ động tự mình tìm hiểu, đừng nên quá lệ thuộc vào bài viết này.

1. The DISASSEMBLER Window

Đây là cửa sổ chính đầu tiên của Olly và là cửa sổ rất quan trọng, chúng ta sẽ làm việc rất nhiều trên cửa sổ này. Khi bạn muốn debug một chương trình, bạn load file thực thi của chương trình đó vào trong Olly.Các chương trình mà bạn load vào Olly là những chương trình có thể được code bằng những ngôn ngữ khác nhau như : VB, VC++, Borland Delphi hay MASM nhưng tại cửa sổ này toàn bộ code của chương trình sẽ được list ra dưới dạng các mã ASM. Theo mặc định của Olly thì bất cứ chương trình nào mà bạn load vào Olly sẽ được Olly tiến hành phân tích toàn bộ code chính của chương trình đó và đưa ra các comment thích hợp. Bạn có thể tùy biến chức năng này thông qua hình minh họa dưới đây:


Nếu như bạn chọn sử dụng chức năng này của Olly thì những gì xuất hiện trên cửa sổ bạn sẽ giống với những hình minh họa trước. Còn nếu như bạn không chọn, chúng ta sẽ thấy ngay được sự khác biệt, Olly sẽ không tự động phân tích chương trình nữa công việc phân tích này chúng ta sẽ phải thực hiện một cách manual sau khi chương trình được load vào trong Olly. Okie, tôi thử bỏ chọn và load lại Crackme vào trong Olly, ta sẽ được như sau:


Như các bạn thấy trên hình trên, nếu như chúng ta không chọn chức năng tự động phân tích của Olly thì sẽ thấy các thông tin trong phần Comment đã bị lược bỏ đi khá nhiều, điều này dẫn đến việc khó khăn trong quá trình debug chương trình. Tuy nhiên không phải lúc nào chức năng này cũng hoạt động một cách hiệu quá, nhiều khi chúng ta để cho Olly tự động phân tích sẽ lại dấn đến một kết quả hoàn toàn ngược lại, đoạn code được phân tích và thể hiện ra không được chính xác, ví dụ như trường hợp dưới đây chúng ta sẽ nhận được đoạn code toàn chứa DB:


Trong trường hợp như thế này chúng ta có thể thực hiên một cách manual để remove những gì mà Olly đã tiến hành phân tích chỉ đơn giản bằng cách nhấn chuột phải tại màn hình này và chọn Analysis > Remove analysis from module


Và kết quả là chúng ta có được đoạn code chính xác như sau:


Do đó trong quá trình làm việc với Olly các bạn nên linh hoạt trong quá trình sử dụng chức năng này. Ngoài ra còn một phần khác cũng không kém phần quan trọng, như các bạn thấy trên hình minh họa Olly của tôi các câu lệnh được phân biệt màu sắc một cách rõ ràng, có thể các bạn không chú trọng đến vấn đề này nhưng theo tôi việc chúng ta phân biệt cũng như tinh chỉnh lại màu sắc trong Olly sẽ khiến cho chúng ta nhận biệt các câu lệnh dễ dàng hơn cũng như phần nào thể hiện năng khiếu thẩm mĩ của bạn J. Để tinh chỉnh lại màu sắc trong Olly các bạn vào các Tabs sau:


2. The REGISTERs Window


Một cửa sổ quan trọng tiếp theo, đó chính là cửa sổ Register. Như đã nói đây là cửa sổ chứa thông tin chi tiết về các thanh ghi như eax, ebx, ecx ... Các cờ trạng thái cũng được quản lý tại cửa sổ này.


Cửa số này sẽ cung cấp cho chúng ta rất nhiều thông tin trong quá trình chúng ta làm việc cùng Olly. Nếu như chỉ nhìn vào hình minh họa ở trên các bạn chắc cũng sẽ như tôi cảm thấy rằng nó sẽ không có ý nghĩa nhiều lắm, nhưng kì thực đây là nơi cung cấp nhiều thông tin rất hữu ích.

3. The STACK Window 

Trước tiên chúng ta sẽ đi tìm hiểu sơ qua về Stack. Đây là nơi lưu trữ tạm thời các dữ liệu và địa chỉ, nó là một cấu trúc dữ liệu một chiều. Các phần tử được cất vào và lấy ra từ một đầu của cấu trúc này, tức là nó được xử lý theo phương thức “vào trước, ra sau” (LIFO : Last In First Out). Phần tử được cất vào cuối cùng gọi là đỉnh của Stack. Các bạn có thể hình dung Stack như là một chồng đĩa, chiếc đĩa được đặt lên cuối cùng sẽ nằm trên đỉnh và chỉ có nó mới có thể được lấy ra đầu tiên. Hai thanh ghi chính làm việc với Stack là ESP và EBP. Theo mặc định trong Olly, Stack được biểu diễn theo thanh ghi ESP tuy nhiên chúng ta có thể luân chuyển qua lại giữa ESP và EBP bằng cách nhấn chuột phải và chọn như hình sau:


4. The DUMP Window 

Đây là cửa số hiện thị nội dung của bộ nhớ hoặc file. Ta có thể chọn nhiều định dạng khác nhau để biểu diễn nội dung của memory trong cửa số này : byte, text, integer, float, address, disassembly hoặc PE Header. Cửa sổ này cho phép chúng ta tìm kiếm cũng như thực hiện các chức năng chỉnh sửa, thiết lập các Break points...


Vậy là chúng ta đã dạo qua 1 vòng các cửa sổ chính của Olly, tuy nhiên bên cạnh đó Olly còn có rất nhiều cửa sổ khác mà chúng ta không nhìn thấy một cách trực tiếp như các cửa sổ trên được.Chúng ta phải truy cập vào các cửa sổ đó thông qua Menu như hình minh họa dưới đây:


Chúng ta sẽ lướt qua chức năng của từng cửa sổ một:

Nút L:  dùng để mở cửa sổ Log của Olly, cửa sổ này cho chúng ta thấy những thông tin mà Olly ghi lại. Theo mặc định thì cửa số này sẽ lưu các thông tin về các module, import library hoặc các Plugins được load cùng chương trình tại thời điểm đầu tiên khi ta load chương trình vào Olly. Bên cạnh đó cửa sổ này cũng ghi lại các thông tin về các Break points mà chúng ta đặt trong chương trình. Trong trường hợp crackme của chúng ta, ta có được thông tin như sau:


Nút E: dùng để mở cửa sổ Executables, cửa sổ này sẽ đưa ra danh sách những file có khả năng thực thi được chương trình sử dụng như file exe, dlls, ocxs ,...


Tại cửa sổ này nếu như bạn click chuột phải sẽ thấy có rất nhiều tùy chọn khác nhau, trong khuôn khổ có hạn của bài viết không thể nói hết được. Sẽ có những phần tiếp theo đề cập đến chúng.

Nút M: dùng để mở cửa sổ Memory, cửa sổ này sẽ cho chúng ta thông tin về bộ nhớ đang được sử dụng bởi chương trình của chúng ta và còn nhiều thông tin bổ ích khác nữa:


Tại cửa sổ này chúng ta cũng có thể sử dụng tính năng Search để tìm kiếm thông tin về các strings, các đoạn hexa cụ thể hay unicode ... thêm vào đó nó còn cung cấp cho chúng ta những kiểu thiết lập Break points khác nhau tại các Sections. Việc thiết lập các BPs là tùy thuộc vào yêu cầu và mục đích của chúng ta.

Nút K: để mở cửa sổ Call Stack, hiển thị một danh sách các lệnh call mà chương trình của chúng ta đã thực hiện khi chúng ta Run bằng F9 và dùng F12 để tạm dừng chương trình.

Nút B: để mở cửa sổ Break Points, cửa sổ này sẽ hiển thị tất cả các BPs mà chúng ta đặt trong chương trình. Tuy nhiên nó chỉ hiện thị các BPs được set bằng cách nhấn F2 thôi, còn các dạng BPs khác như : hardware breakpoint hoặc memory breakpoints thì không được liệt kê ra ở đây.

Nút R: để mở cửa sổ References, cửa sổ này là kết quả cho những gì chúng ta thực hiện chức năng Search trong Olly, kết quả sẽ được hiện ra ở đây:


Phù khá nhiều cửa sổ phải không các bạn, tôi sẽ không đi vào chi tiết thêm nữa bởi vì chúng ta sẽ còn gặp lại trong các tuts tiếp theo, 1 yêu cầu rất quan trọng ngoài việc bạn biết sử dụng Olly ra thì bạn còn phải biết về Asm language, nếu không biết về nó thì hii các bạn nên dành thời gian để tìm hiểu một số kiến thức cơ bản trước khi đọc tiếp các phần sau của bài viết. Ngoài ra để các bạn dễ làm quen hơn trong các phần sau tôi sẽ cố gắng hệ thống lại J.

IV. Cấu hình Olly thành JIT (Just-in-time debugging)

Khi một số chương trình thực thi và nó tạo ra Exception, Windows có thể gọi Registered Debugger (các debuggers được cấu hình thành JIT) và attach nó vào chương trình. Tính năng này được gọi là Just-in-time debugging.

Một vài JIT debuggers dừng lại tại System breakpoint. Ollydbg thì tiếp tục thực thi cho đến khi nó đi đến câu lệnh đã tạo ra Exception.

Để cấu hình Ollydbg trở thành 1 JIT bạn làm như sau:


V. Một số phím cơ bản để làm việc với Olly

F7 : Khi bạn nhấn F7 sẽ thực thi từng dòng lệnh 1. Nếu trong quá trình Trace mà gặp lệnh Call thì sẽ đi vào trong lòng của lệnh Call đó và thực thi từng câu lệnh trong lệnh Call này cho đến khi gặp lệnh Retn để trở lại chương trình chính, tức là câu lệnh tiếp theo sau lệnh Call.

F8 : Cũng tương tự như F7 nhưng có 1 điểm khác biệt là khi Trace code, nếu như gặp lệnh Call nó bỏ qua không cần quan tâm các lệnh bên trong lệnh Call mà thực thi luôn lệnh Call đó và dừng lại tại câu lệnh tiếp theo dưới lệnh Call.

F2 : Đặt một Break point trong chương trình. Vậy Break point là gì , đơn giản nó chỉ là việc chúng ta tạo 1 điểm ngắt trong chương trình theo một điều kiện nào đó để khi thực thi chương trình, nếu thỏa điều kiện mà chúng ta đặt ra thì chương trình sẽ dừng lại tại vị trí mà chúng ta đã đặt BP. Bây giờ tôi muốn đặt một BP tại hàm Call gọi tới API: LoadIconA. Tức là khi tôi thực thi chương trình, chương trình gọi tới hàm này thì ngay lập tức nó sẽ dừng lại tại đây.Việc tiếp theo là tôi có thể tùy biến lại hàm này theo mục đích của tôi, chẳng hạn tôi NOP nó để chương trình không còn gọi đến hàm này nữa ... Để làm được điều này bạn nhấn chuột tại vị trí cần Set BP, sau đó nhấn F2. Chỗ chúng ta Set BP sẽ được đánh dấu màu đỏ:


Để bỏ BP mà chúng ta đã set thì chỉ việc chọn vị trí đánh dấu màu đỏ và nhấn F2.

F9 : Cho phép thực thi chương trình trong chế độ Debug, tương tự như việc chúng ta nhấp đúp chuột vào chương trình để thực thi nó. Tuy nhiên khác với việc nhấp đúp chuột, nếu chúng ta nhấn F9 thì Olly sẽ tìm xem có BP nào được Set hay không, chương trình có tung ra các Exception gì không, hay nếu chương trình có cơ chế chống Debug thì nó sẽ terminate ngay lập tức. Nếu như không có bất kì cản trở nào thì chương trình sẽ Run hoàn toàn và trên status bar của Olly sẽ báo cho chúng ta biết điều này.

F12 : Tạm dừng chương trình lại.

VI. Lời kết

Trên đây là những gì tổng quan nhất về Olly, như đã nói các bạn không nên quá lệ thuộc vào bài viết này của tôi, các bạn có thể tự mình tìm hiểu thêm những tính năng khác của Olly. Các phần sau của loạt tuts này làm việc trên Crackme của tác giả CRUEHEAD, để tiện cho các bạn đỡ mất công tìm kiếm tôi đã kèm luôn target cùng với bài viết này. Hi vọng những gi tôi đã viết ở trên đã giúp cho các bạn phần nào hiểu được tại sao Ollydbg đang ngày càng trở nên phổ biến.

Source: Kienmanowar.wordpress.com