Archive for the ‘OllyDbg tut_8’ Category

OllyDbg Tut_8

Posted: September 5, 2008 in OllyDbg Tutorials, OllyDbg tut_8

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

Đợt rồi bận quá, mải cài đặt và config hệ thống để phục vụ cho dự án upgrade, xém chút nữa thì quên mất viết tiếp bộ tut về Olly. Trong phần 7 tôi đã 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. Hôm nay, chúng ta tiếp tục 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. Phần 8 này cũng là phần kết thúc việc giới thiệu các lệnh cơ bản, các phần tiếp theo sẽ tập trung vào những chủ đề, khía cạnh thú vị hơn.

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ừ 0x00401008 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:

ollydbg_tut8

Best Regards

kienmanowar