You are on page 1of 11

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 tốt” 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! 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.
Ta lại tiếp tục với ñiều kiện cuối cùng ( tôi xin bỏ qua 2 ñiều kiện Command is suspicious or
possibly invalid và Command count is) Command is one of : có nghĩa là nếu lệnh ASM nằm
trong những lệnh này thì chương trình sẽ ngưng trace. Và các lệnh phải cách nhau bằng dấu „;“.
Tôi xin ñưa ra một ví dụ.
Ví dụ : Các bạn hãy nhấn F9 ñể load file Crack me lên. Nhập Name : rongchaua , Serial 123 và
nhấn Register. Oops, một MessageBoxA hiện ra : Minimum lenght 5. À như vậy số serial ít nhất
phải có chiều dài là 5. Nhưng ñọan kiểm tra chiều dài là 5 ở ñâu nhỉ. Bạn không biết, và mô phật
tôi cũng không biết các bạn ạ. Tuy nhiên, chúng ta ñều biết là nếu serial có chiều dài nhỏ hơn 5
thì sẽ ñược một thông báo phải không? Như vậy thì. Ctrl – F2 ñể Reload file Crack Me , vào
Plugins ( tôi sẽ nói về Plugins trong phần III), chọn Command line gõ vào bpx MessageBoxA
(các bạn hãy tạm chấp nhận) như hình :

Rồi nhấn Enter. Các bạn sẽ ñược ñưa ñến cửa sổ Breakpoint Reference.
ðây là list các hàm API mà chương trình sẽ gọi trong quá trình thi hành. Bây giờ các bạn hãy
click Tab Destination ñể sắp xếp theo thứ tự tên của các hàm ñược gọi.

Các bạn dễ dàng thấy rằng có 2 chỗ mà hàm MessageBoxA ñược gọi. Vị trí thứ I ở ñia chỉ
004012D6 và vị trí thứ II ở 004012EB. Bây giờ các bạn hãy ñưa con trỏ tới vị trí gọi hàm
MessageBoxA, click phải chuột chọn Set breakpoint on every call to MessageBoxA.
\

Các bạn sẽ thấy breakpoint sẽ ñược set ở tất cả các hàm MessageBoxA.
Bây giờ các bạn Close cửa sổ Reference lại. Nhấn F9 ñể Run chương trình. Nhập Name :
rongchaua ,Serial : 123. Nhấn Register và :

Tôi nghĩ là các bạn ñã rõ rồi phải không! Rõ ràng là chương trình gọi hàm MessageBoxA và
thông báo ñưa ra là Minimum length is 5. Ngay chỗ chương trình gọi, một breakpoint ñã ñược
set, buộc chương trình phải ngừng lại. Nhưng, chúng ta cần truy chỗ check serial mà phải
không? Bây giờ các bạn hãy lưu ý ở phía trên lệnh gọi hàm MessageBoxA, ngay tại lệnh PUSH
0.
004012DD > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
Các bạn có ñể ý thấy dấu „>“ không. Vâng ñó chính là dấu hiệu báo là có một lệnh nhảy ñến
hàm này. ðiều này thì chắc chắn rồi vì chương trình sẽ check serial nếu length nhỏ hơn 5 thì sẽ
hiện thông báo mà phải không. Vậy thì các bạn hãy click vào câu lệnh trên. Ở cửa sổ thứ II, các
bạn sẽ thấy „Jumps from 00401219, 00401240“. A, ha như vậy là có 2 chỗ kiểm tra length của
serial và ñều nhảy ñến thông báo lỗi. Nhưng mà, khi ta nhập Fake Serial rồi nhấn Register thì
chỗ nào sẽ nhảy ñến thông báo lỗi! ðó mới là vấn ñề quan trọng. Hơi khó! ðừng lo, chúng ta sẽ
cùng „xử“ nó. Bây giờ, ngay tại câu lệnh PUSH 0, các bạn click phải chuột, một pop-up menu sẽ
xuất hiện( Tôi sẽ dành Phần III ñể nói về các sub menu này). Các bạn chọn Find references to 
Selected Command hoặc Ctrl – R. Cửa sổ Ref lại một lần nữa chui ra :

Các bạn click phải chuột chọn Set breakpoint on every command.

Bây giờ các bạn Close cửa sổ Ref lại. Nhấn F9 to Run. MessageBox sai length hiện ra. Chắc các
bạn cũng hiểu. Bởi vì Olly ñã bắt chương trình ngừng trước lệnh gọi MessageBoxA. Cho nên khi
ta nhấn F9 thì lệnh gọi này sẽ ñược thực hiện và lúc này một messsagebox mới xuất hiện. Bây
giờ các bạn nhấn Register. Và :
00401240 . E9 98000000 JMP Crackme8.004012DD
Các bạn lưu ý, ở phía trên lệnh nhảy trên là hàm GetDlgItemInt
0040122A . E8 53010000 CALL <JMP.&USER32.GetDlgItemInt> ; \GetDlgItemInt
Tôi nghĩ các bạn ñã nhận ra rồi, ñây là hàm ñể lấy Serial dưới dạng Int. Như vậy giữa 2 câu lệnh
trên chắc chắn là hàm check serial ban ñầu rồi .
Tôi chỉ xin lưu y một ñiểm là như các bạn thấy ñó. Breakpoint có tác dụng cho tới khi nào
chương trình còn chạy. Chỉ khi Process bị Terminated thì breakpoint mới không còn tác dụng
nữa. ðiều này sẽ giúp các bạn check serial mà không cần phải load lại chương trình. Cứ nhập
Fake Serial và trace. Tuy nhiên, tôi không muốn nói nhiều hơn, vì không muốn các bạn càng
thêm bối rối. Tôi sẽ xin tiếp tục luôn cho các bạn câu lệnh mà chương trình kiểm tra xem chiều
dài của serial có phải lớn hơn 5 không.
00401234 . 813D DA304000 >CMP DWORD PTR DS:[4030DA],2710
Chắc các bạn hơi ngạc nhiên vì ở ñây ñáng ra phải là một lệnh ñại lọai CMP EAX,5 chẳng hạn.
Tuy nhiên, các bạn hãy nhớ lại một chút về hàm GetDlgItemInt. Chương trình sẽ lấy số serial
dưới dạng Int. Như vậy một số có 5 chữ số thì số nhỏ nhất là bao nhiêu nhỉ 10000 phải không?
Và dạng Hex của nó như thế nào nhỉ? 2710 . Vâng, tôi nghĩ không cần giải thích thêm nữa phải
không, số lớn hơn 2710 tức là phải có chiều dài lớn hơn 5 rồi. Tác giả Crack me thật là thông
minh. Và một bài tập nho nhỏ cho các bạn. Các bạn,hãy nhập Name : rong . Và hãy tìm chỗ
check length của Name và các bạn sẽ gặp câu lệnh vô cùng tiêu biểu CMP EAX,5. Phù, một ví
dụ khá dài cho một ý nhỏ xíu phải không các bạn. Tôi biết là ñã dẫn các bạn rất xa ý chính mất
rồi ..hi..hi.. Bởi vậy tôi chẳng thể nào thành một thầy giáo ñược ñâu các bạn à. Tôi mà dạy thằng
em tôi học thì có chửi bới, la lối và kết cục là „Anh chỉ biết câm nín nghe tiếng em khóc…nhè“
mà thôi. Tôi xin quay trở lại ý chính là Set Condition : Command is one of. Bây giờ, các bạn hãy
gõ vào CMP EAX,5. Nhấn Trace Into. Và các bạn sẽ ñược ñưa tới nơi cần ñến. Tuy nhiên, tôi
chỉ lưu ý rằng. Các bạn hãy set breakpoint tại
004011FB . 6A 32 PUSH 32 ; /Count = 32 (50.)
Load lại chương trình, nhập Inform. Rồi nhấn Register, khi chương trình ngưng tại câu lệnh trên
hãy nhấn Trace Over. Bởi vì nếu các bạn nhấn Trace Into ngay từ ñầu thì chương trình sẽ bị
crash. Khi nhấn Trace Over thì chẳng bao giờ bạn dừng lại ñược. Bởi vì Trace Over sẽ không
truy vào hàm. ðó là lý do tôi rất ít khi sử dụng các ñiều kiện này cũng như Trace. Tuy nhiên,
không sử dụng không có nghĩa là không biết, chúng ta phải hiểu một chút ít về nó ñể khi cần thì
có thể nhanh chóng sử dụng ñược.
Các bạn thân mến, tôi hiểu là các ví dụ trên có thể chưa ñược rõ ràng cho lắm, tôi biết là khả
năng diễn ñạt của tôi còn yếu. Tuy nhiên tôi mong ñợi ở các bạn sự thông cảm vì chính bản thân
tôi cũng rất ít khi sử dụng những ñiều kiện này và viết những bài tut ñòi hỏi cao như vậy. Cho
nên, nếu có gì sai sót hoặc khó hiểu tôi mong các bạn bỏ qua, và các bạn có thể email cho tôi
hoặc các bạn của tôi trong www.reaonline.net . Chúng tôi rất sẵn sàng giúp ñỡ các bạn.
Như vậy chúng ta ñã xong phần Set Condition cho Trace và cũng chấm dứt phần II. Các bạn
chắc chắn sẽ hỏi tôi là vẫn còn Hardware Breakpoint,…bla…bla…bla... vẫn còn ở mục Debug
.Nhưng các bạn, những người mới bắt ñầu, hãy bước ñi những bước ñầu tiên thật vững chắc. Tôi
luôn mang những ñiều mà các bạn thật sự ñang cần. Hãy tin tôi, tôi mong ñợi nhiều ở sự thành
công của các bạn, thành công của một thế hệ cracker mới của Việt Nam. Vì thế tôi sẽ cố gắng ghi
lại hết những gì mà mình biết không một chút giấu diếm ñể các bạn có thể tham khảo và ngày
càng tiến bộ. Những gì tôi chưa nói, không phải là tôi không nói, tôi giấu các bạn.. Mà chỉ vì, tôi
thấy nó vẫn còn chưa thích hợp vào lúc này. Các bạn hãy cứ tin là như thế và hẹn gặp lại các bạn
trong phần III.
Hết phần 2.
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”.
Các bạn có thể tìm hiểu thêm về cách sử dụng Olly trong phần Help của chương trình.
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.
20.9.2004

You might also like