You are on page 1of 6

Hướng dẫn cơ bản sử dụng OllyDbg & Một số kiến thức cơ bản về Assemble.

Phần II Bản Beta

3. Hướng dẫn sử dụng (tiếp theo)


- Tôi lại xin tiếp tục với công việc của mình. Theo thứ tự tôi phải nói về phần View nhưng thiết
nghĩ mục Debug hiện ñang cần thiết với các bạn nên tôi ñưa mục này lên trước. Tôi xin hẹn phần
View vào một phần khác sau này.
-

- Khi các bạn nhấn vào Menu Debug, các bạn sẽ thấy gồm nhiều mục mà tác giả của Olly cũng
ñã phân sẵn. Tôi xin ñi từng mục.
+ Run (F9) : khi bạn dùng chức năng này tức là bạn ñang dùng Olly làm trung gian ñể chạy
soft. Tại sao lại phải như vậy? Tôi lại xin ra ngoài lề một chút. Như tôi ñã nói, thực chất của việc
crack là xem soft ñược bảo vệ như thế nào dưới dạng ASM. Nhưng chúng ta sẽ “xem” như thế
nào? Tôi xin ñưa ra một ví dụ ñể dễ hình dung.
Ví dụ : soft ñòi hỏi serial nhập vào có chiều dài phải lớn hơn 10 chẳng hạn. Trong mã lệnh ASM,
giả sử thanh ghi EAX ñang chứa chiều dài của serial, thì mã ASM sẽ là : CMP EAX, A. Nhưng
trong hàng ngàn câu lệnh ASM thì làm sao chúng ta biết ñược ñâu là câu lệnh kiểm tra, lại còn
xác ñịnh nó nằm ở ñâu nữa chứ? Thật là khó phải không các bạn. Vậy thì chúng ta hãy nghĩ một
cách khác . Tôi thường gọi ñây là phương pháp “công thành”, thành trì có nhiều mặt, tại sao
chúng ta cứ phải tấn công vào mặt chính? Tại sao chúng ta không thử tấn công ở mặt khác xem.
Trên tình thần ñó, tôi lại ñặt câu hỏi khác cho chính mình “Tại sao mình không tìm chỗ nào mà
ñọc số serial vào?” Nhưng vẫn trở ngại cũ : Trong hàng ngàn câu lệnh ASM thì làm sao chúng ta
biết ñược ñâu là câu lệnh lấy số serial. Chẳng lẽ bó tay. Nhưng trời còn thương người hiền, với
mong muốn các ngôn ngữ lập trình có thể “liên lạc” với hệ ñiều hành, các ngôn ngữ lập trình
hiện nay ñều sử dụng các hàm API ñược Microsoft lập trình sẵn trong Windows ( nhất là bộ lập
trình Microsoft Visual Studio. Borland Delphi cũng sử dụng nhưng không tòan bộ. Tôi xin ñề
cập lại vấn ñề này trong một phần khác) . Với ví dụ trên, ñể lấy số serial thì 6/10 soft hiện nay là
dùng hàm API GetDlgItemTextA. Như vậy thì ta ñã nắm ñược một ñiểm yếu của soft rồi. Nhưng
lại một vấn ñề lại nảy sinh. Ôi cuộc sống, khi chúng ta giải quyết ñược vấn ñề này, thì ở ñâu lại
một vấn ñề khác lại chui ra, khiến cho chúng ta mãi cứ lo lo. Thôi, một chút cảm thán về cuộc
ñời cho thêm hương vị. Giờ tôi xin quay lại công việc của mình. Oki, tôi ñã disassemble ñược
soft. Oki, tôi ñã có thể xác ñịnh ñược vị trí hàm kiểm tra. Nhưng mà khi soft chạy, soft check số
serial, làm sao tôi “biết” ñược soft check những ñiều kiện gì. Tôi muốn ñược “dừng” ngay tại
hàm kiểm tra, ñể tôi có thể truy theo từng lệnh ASM, ñể hiểu ñược soft check gì. Tôi muốn có
một Breakpoint ngay tại hàm kiểm tra ( Như vậy, ñịnh nghĩa của breakpoint ñơn giản chỉ là một
ñiểm mà chương trình bị “ép” dừng lại trong khi thực hiện). Vâng, những mong muốn ñó ñã dẫn
ñến sự ra ñời của Olly cùng chức năng Run. Bạn sẽ set breakpoint và Olly sẽ run chương trình,
load chương trình vào bộ nhớ, và dừng lại ngay ñiểm bạn mong muốn, cũng như bạn sẽ có thể từ
ñó truy theo từng lệnh ñể xem là soft check như thế nào. Và tôi nghĩ là không còn gì dễ hiểu hơn
thế nữa phải không các bạn! Tôi chỉ xin lưu ý các bạn là các bạn nên tập dùng phím tắt . Cũng
như khi chơi trò chơi, khi sử dụng phím tắt, các bạn có thể thao tác nhanh hơn cũng như thể hiện
ñược trình ñộ chuyên nghiệp của mình hơn . Cũng như vậy, khi dùng Olly ñể Run, các bạn nhấn
F9 thì sẽ ấn tượng hơn nhiều là mở Debug rồi chọn Run, ñúng không các bạn? Các bạn cũng có
thể Run soft thông qua nút tắt trên thanh Taskbar.
+ Bây giờ tới chức năng Pause (F12). Khỏi nói các bạn cũng biết chức năng này dùng ñể dừng
lại. Nhưng ở ñây là dừng Olly chứ không phải dừng soft, ví dụ khi các bạn ñã nhấn Run nhưng
muốn Pause lại ñể ñi uống miếng nước, ăn miếng bánh thì các bạn nhấn Pause hoặc nhấn nút
trên Taskbar.
+ Close ( Alt-F2) : ðóng file ñang Disassembler lại. Quá ñơn giản.
- Bây giờ tới mục theo tôi là tương ñối quan trọng ñối với các bạn newbie.
+ Step into (F7)/ Step over (F8) : Dịch sát nghĩa là bước vào/ bước qua. Là seo? Hiểu ñược ...
xỉu liền. ðừng lo, tôi xin giải thích. Hai chức năng này có tác dụng trước những lệnh CALL (
lệnh gọi hàm ). Tôi xin ví dụ cho dễ hiểu :
Ví dụ : Khi các bạn dùng Olly load cái file crackme lên. Các bạn ở lệnh PUSH 0. Bây giờ các
bạn nhấn F7 hoặc F8 (như tôi ñã nói, 2 chức năng này chỉ có tác dụng với lệnh gọi hàm, còn ñối
với các lệnh khác thì nó chỉ ñơn giản là thực hiện lệnh ñó và ñi tới câu lệnh kế tiếp) các bạn tới
câu lệnh :
00401002 |. E8 AB030000 CALL <JMP.&KERNEL32.GetModuleHandleA> ;
\GetModuleHandleA
Bây giờ, trước tiên các bạn hãy Step over cho tôi. Các bạn sẽ ñược tới câu lệnh :
00401007 |. A3 98304000 MOV DWORD PTR DS:[403098],EAX
Câu lệnh này nằm ngay sau câu lệnh CALL. Oki, các bạn ghi nhận ñiều này. Bây giờ nhấn Ctrl-
F2 ñể restart lại Olly, cũng ñi tới lệnh CALL trên, nhưng bây giờ các bạn hãy Step into. Và các
bạn ñược ñưa tới ñây.
004013B2 $-FF25 14204000 JMP NEAR DWORD PTR DS:[<&KERNEL32.GetMod>;
kernel32.GetModuleHandleA
Ô, cái gì thế kia. Nhảy tới hàm GetModuleHandleA. À, ñiều này có nghĩa là với F8 chúng ta sẽ
“bước qua” hàm này và chỉ lấy kết quả trả về mà không quan tâm ñến là nó làm gì trong hàm.
Còn với F7, chúng ta sẽ ñi vào trong hàm ñể xem hàm ñó làm gì. Tại sao lại phải có 2 chức năng
này. Các bạn hãy thử nghĩ xem. Nếu chúng ta chỉ có chức năng Step Into thì mỗi lần gặp các
hàm trong các dll chuẩn của Window chúng ta lại phải ñi vào mặc dù là chúng ta chẳng cần biết
là nó làm gì. Còn nếu chỉ có chức năng Step Over thì khi chúng ta ñụng hàm kiểm tra, muốn vào
xem thì nó lại chẳng cho vào, cứ “bước qua” và trả về kết quả là “Your serial number is wrong”
thế thì có ñiên không cơ chứ! Tôi hi vọng là các bạn ñã thỏa mãn với thắc mắc là “Khi nào thì
Step Into ,khi nào thì Step over” rồi chứ! Vẫn là lưu ý cũ, các bạn thấy không, trong quá trình
crack, các bạn sẽ truy theo từng câu lệnh bằng Step Into hoặc Step Over. Nếu các bạn cứ mở
Debug-> Step into thì có lẽ 1 tháng/ 1 soft quá. Cho nên, phím tắt muôn năm và F7 và F8 là 2
phím tắt ñược sử dụng nhiều nhất trong quá trình crack. Các bạn cũng nên tập sử dụng dần.
- Animate into (Ctrl-F7)/Animate over (Ctrl-F8) : ñây là 2 chức năng rất vui, vì khi các bạn
cho Olly animate into thì olly sẽ tự ñộng Step into cho bạn, bạn chỉ có việc ngồi xem, chương
trình chạy. Nếu muốn dừng thì nhấn Pause(F12). Cũng tương tự, cho animate over. Nói thật, tôi
chưa bao giờ sử dụng 2 chức năng này. Vì nếu animate into thì nó cứ truy vào các hàm API rồi
chết luôn ở trong ñó. Còn nếu Animate over thì nó chạy qua hàm kiểm tra lúc nào chẳng hay.
Chỉ có lúc nào buồn tình, nhớ bồ gái, dùng 2 chức năng này, cho màn hình chạy chạy nhìn cũng
vui vui.
- Execute to return ( Ctrl-F9) : chức năng này sẽ thực hiện các câu lệnh ASM từ vị trí của EIP
hiện tại ñến câu lệnh RETN gần nhất. ðể dể hiểu tôi xin ví dụ :
Ví dụ : Khi các bạn lỡ tay truy vào một hàm nào ñó, mà các bạn vốn chẳng muốn biết là cái quái
gì sẽ xảy ra trong hàm này. Chẳng lẽ phải duyệt hết từng ñống lệnh ASM trong hàm ñó, hoặc set
breakpoint trước lệnh gọi hàm ñó rồi load lại Olly ñể tới lại chổ cũ, bạn quá lười ñể làm việc ñó,
vậy thì hãy nhấn Ctrl-F9, bạn sẽ ñược ñưa về lệnh RETN của hàm ñó. Nhấn F7 (F8 dĩ nhiên
cũng ñược) bạn sẽ ñược trả về ngay sau lệnh gọi hàm ñó, và các bạn hãy tiếp tục với công việc
của mình.
- Execute to user code (Alt-F9) : Thực thi ñến khi gặp code của user viết, hơi khó hiểu phải
không các bạn. Tôi xin giải thích một chút. Giả sử trong một lúc không sáng suốt, các bạn lỡ
chui vào quá sâu vào trong mã của hệ thống ( tức là vào quá sâu mã lệnh của các file system dll).
Các bạn muốn quay ra, nhưng hỡi ôi, vì vào quá sâu, nhấn Execute to return mỏi cả tay rồi vẫn
chưa quay lại code của chương trình. Vậy thì Atl-F9 thẳng tiến, bạn sẽ lập tức ñưa về câu lệnh
nằm ngay sau lệnh gọi hàm API do soft gọi. Hơi khó hiểu một chút phải không các bạn. Tôi xin
ví dụ :
Ví dụ : Các bạn hãy load lại file crackme và ñi ñến ñây
00401002 |. E8 AB030000 CALL <JMP.&KERNEL32.GetModuleHandleA> ;
\GetModuleHandleA
Nhấn F7 ñể vào trong hàm. Nhấn F7 tiếp cho tới ñây
77E7AD86 > 837C24 04 00 CMP DWORD PTR SS:[ESP+4],0
Các bạn nhấn F7 tiếp cho tới ñây
77E7AEC8 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
Bây giờ, hãy nhấn Alt-F9. Bùm, các bạn ñược ñưa ngay lập tức về với ... hiện thực :
00401007 |. A3 98304000 MOV DWORD PTR DS:[403098],EAX ;
Crackme8.00400000
Câu lệnh trên nằm ngay sau câu lệnh gọi hàm GetModuleHandleA. Phù, tôi nghĩ ví dụ ñã quá rõ
ràng rồi phải không.
- Như vậy là ñã xong 2 mục, tôi xin ñược tiếp tục với mục tiếp theo : Trace. Các bạn thấy có 5 ý
nhỏ trong mục Trace
+ Open or clear run trace
+ Trace into ( Ctrl – F11)
+ Trace over ( Ctrl – F12)
+ Set Condition
+ Close run trace
- Tôi xin nói về Trace into / Trace over . ðây là 2 chức năng tương tự như Animate Into /
Animate over. Tức là máy tính sẽ tự ñộng Step Into / Step Over cho chúng ta. Tuy nhiên, ñối với
Trace Into / Trace Over , chúng ta có thể set ñược ñiều kiện dừng. Tức là khi một ñiều kiện nào
ñó ñược thỏa thì chương trình sẽ dừng ngay tại câu lệnh thỏa ñiều kiện mà chúng ta ñã ñặt ra.
Vậy thì chúng ta sẽ ñặt ñiều kiện ở ñâu ? Chúng ta có thể ñặt ñiều kiện gì? Và câu hỏi lớn nhất,
tại sao chúng ta phải ñặt ñiều kiện ? Tôi xin trà lời câu hỏi lớn trước. Tôi xin ví dụ, trong quá
trình crack, chúng ta nhớ rằng có một lúc nào ñó giá trị của eax chẳng hạn bằng 0A, nhưng lại
không rõ nó nằm ở ñâu. Bây giờ truy lại kiếm thì quá mất thời gian. Khi ñó, chúng ta rất cần một
chức năng Trace Into / Trace Over ñể kiếm cho nhanh. Các bạn nên lưu ý, một cracker giỏi tức là
ngòai khả năng crack ñược soft, nắm vững kiến thức reverse, còn phải thỏa mức ñộ thời gian. Có
những chương trình tôi crack chỉ trong 15’ nếu không có những tip ñể tiết kiệm thời gian thì làm
sao có thể ñạt ñược về mức ñộ thời gian như vậy. Tôi xin tiếp tục trả lời cho câu hỏi : Chúng ta
có thể ñặt ñiều kiện gì? Các bạn hãy chọn Set Condition.

-
- ðối với 2 ñiều kiện ñầu quá ñơn giản, tôi chỉ xin ví dụ ñiều kiện tiếp theo : Condition is TRUE,
dịch là „ðiều kiện thỏa“. ðưa ra một ví dụ ñơn giản, các bạn hãy gõ vào eax == 0040000, và
click chọn box ñiều kiện Condition is TRUE.
-
- Nhấn OK. Bây giờ các bạn hãy load lại ( Ctrl – F2) file Crackme, Trace Over và Olly sẽ dừng
lại ngay tại câu lệnh, mà tại ñó eax= 00400000 .

-
- Các bạn lưu ý ở cuối cửa sổ : Conditional pause eax = 00400000 . Nhưng nhìn sang
Register Window, ta thấy EAX = 00000000. Chẳng lẽ Olly bị sai! Không ñâu các bạn,
các bạn hãy nhấn F8 và nhìn lại cửa sổ Register, eax ==0040000 . ðiều này có thể dễ
dàng giải thích, bởi vì sau lệnh RETN thì giá trị của thanh ghi mới ñược cập nhật. Tức
là giá trị trả về lúc này sẽ ñược gán vào eax.
- Còn tiếp….

Hết phần 2 bản Beta.


rongchaua chấp bút
My Email : r0ngchaua@yahoo.de
Nếu tôi có gì sai sót, vui lòng liên hệ email trên ñể “mắng vốn”.
Link ñể down Ebook ASM. Click phải chuột chọn Save Target As :
http://members.lycos.co.uk/rongchaua/aoa.pdf
Có nỗi nhớ nào ồn ào như biển nhớ con thuyền.
Có nỗi nhớ nào hơn nỗi nhớ khi anh xa em.
11.9.2004

You might also like