- Sau khi kết thúc quá trình này, đại chỉ này trở thành :
Code:
0012F5FC DC 4E D1 46 43 DE E0 B5 24 97 84 B4 DC 4A 65 2D ÜNÑFCÞàµ$—
„´ÜJe-
- Đối chiều mới MD5Hash(Moonbaby) ta thấy là hoà toàn giống nhau, như vậy quá trình
mã hoá này là mã hoá MD5 nguyên bản . Từ đây ta cần trace về để xác định các Function
của MD5 .
- Trace ngược tiếp ta xác định được các Function :
Code:
005680C5 |. E8 AEFEFFFF CALL Arial_CD.00567F78 ; <== MD5Start
005680CA |. 8B45 FC MOV EAX,[LOCAL.1] ; <== User
005680CD |. E8 AECFE9FF CALL Arial_CD.00405080 ; <== LenUser
005680D2 |. 50 PUSH EAX
005680D3 |. 8B45 FC MOV EAX,[LOCAL.1]
005680D6 |. E8 9DD1E9FF CALL Arial_CD.00405278
005680DB |. 8BD0 MOV EDX,EAX
005680DD |. 8D45 A4 LEA EAX,[LOCAL.23] ; <== User
005680E0 |. 59 POP ECX ; <== LenUser
005680E1 |. E8 C6FEFFFF CALL Arial_CD.00567FAC ; <==
MD5Update
005680E6 |. 8BD3 MOV EDX,EBX
005680E8 |. 8D45 A4 LEA EAX,[LOCAL.23]
005680EB |. E8 3CFFFFFF CALL Arial_CD.0056802C ; <==
MD5Finished
- Và Function gốc để đến được Function này là :
Code:
00584854 |. E8 4738FEFF CALL Arial_CD.005680A0 ; <== MD5Hash
00584859 |. 8D45 E4 LEA EAX,[LOCAL.7]
0058485C |. 8D55 F4 LEA EDX,[LOCAL.3]
0058485F |. E8 B038FEFF CALL Arial_CD.00568114 ; <== Convert to
String
00584864 |. 8B55 F4 MOV EDX,[LOCAL.3] ; <== MD5Hash : Real
Serial
00584867 |. 8B45 F8 MOV EAX,[LOCAL.2] ; <== Fake Serial
0058486A |. E8 5509E8FF CALL Arial_CD.004051C4 ; <== Compare
- Trace ngược ra tiếp ta đến Function chính thức cho qua trình mã hoá này :
Code:
00570CE5 . E8 323B0100 CALL Arial_CD.0058481C ; <== Encrypt
00570CEA . 84C0 TEST AL,AL
00570CEC . 74 7E JE SHORT Arial_CD.00570D6C
00570CEE . A1 70905800 MOV EAX,DWORD PTR DS:[589070]
00570CF3 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
00570CF5 . 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00570CF8 . E8 7B3E0100 CALL Arial_CD.00584B78
00570CFD . 6A 40 PUSH 40
00570CFF . B9 940D5700 MOV ECX,Arial_CD.00570D94 ; ASCII
"Congratulations!"
00570D04 . BA A80D5700 MOV EDX,Arial_CD.00570DA8 ; ASCII
"Register successfully! Thank you for your support!"
/*/*/*/ - SERIAL tương ứng :
User : REA-cRaCkErGrOuP
Serial : b31bd8cf368020030870e5f4d48df85d
moonbaby ()
Let’s Cracking by Olly
BÀI 2: LET’S PATCH THE SOFTS BY OLLDBG
Ok, bây giờ chúng ta hảy bắt đầu làm quen với các chức năng của Oll nhé
Softs ở đây tui chọn cái Patchme No.1 mới ra lò của bác QHQCrcker .Các bạn download
ở đây:
Link: />
I.Thu thập thông tin về chương trình cần crack:
Chúng ta hảy chạy cái crackme.exe xem sau:
-Nó bắn ra 1 cái Nag chào hỏi theo kiểu Tây: Hi
Hello Newbiez wold
Và thước yêu cầu:
Rulez :
1. Patch nag (Bỏ cái Nag này)
2. Change bad text to GOODBOY text. (Thay đổi cái text trong Nag sau thành
GOODBOY text)
3. Enable Exit button. (Cho nút button Exit có tác dụng)
- Bấm Ok nó sẽ hiện cái Nag thứ 2: QHQ Patch me No.1
- Exit chương trình, bây giờ Patch nó thôi
II Thực hành Pacth soft :
Các bạn mở chương trình Oll, vào Menu File/Open : Load chương trình
QHQPatchmeNo1.exe vào Oll(Hay bấm F3 cũng được)
Chức năng đầu tiên tui muốn giới thiệu với các bạn là:
1.Run (F9) : Chạy chương trình trong Oll.
Bấm F9 chạy thử chương trình trong Oll xem sau.
Các bạn thấy sau, nó bắn Nag đầu tiên phải ko?.Bấm button OK chương trình bị crash
chứ gì?. Đây cũng là 1 cách bảo vệ chương trình ko có các Cracker phá phách .Nguyên
tắc của nó là khi phát hiện máy tính của bạn đang chạy chương trình debugger thì sẽ
crash phá vỡ cấu trúc code của chương trình ko cho chạy tiếp , cơ chế này các cracker
hay gọi là Anti-debugger gì đó Hìhì
Vậy chúng ta pó tay sao??
Bình tỉnh nhé, chúng ta Load lại chương trình trong Oll xem sau.
Tui muốn ghi chú các bạn ở đây 1 chút : Oll chạ
y qua 1 chương trình thì coi như một đi
ko trở lại. Nó chỉ để lại những “dấu chân trên cát” mà thôi. Tức là nó sẽ báo ta nhưng gì
nó đã đi qua chứ ko quay lại được.Muốn làm việc lại với nó ,chúng ta phải Load nó lại
vào Oll .
OK, bây giờ tui sẽ giới thiệu các bạn chức năng Load lại chương trình một cách nhanh
chóng mà ko cần phải bấm F3 rồi chọn lại file cho rắc rối.Đó là:
2.CTRL+F2 : Đây là chức năng ch
ạy lại chương trình.
Hihi , các bạn thấy ko , tòan là các phím nóng. Làm sao mà nhớ hết đây trời!. Không sao,
không sao, làm nhiều sẽ tự động nhớ thôi. Hy vọng thế!!!!!!
Sau khi Load lại chương trình, tui có ý tưởng như sau:
Vì tui biết chương trình patchme ko bị crash ở cái Nag đầu tiên nên sau ta ko tạm ngưng
chương trình khi nó bắn cái Nag đầu tiên. Rồi vào cửa số code xem code nó ở đâu để
patch cái Nag đó theo yêu cầu của tác giả.Vậy chúng ta phải tìm hiểu chức năng kế tiếp là
:
3. Pause ̣F12 : Tạm ngưng chương trình.
OK, bây giờ các bạn bấm F9, chạy chương trình.Khi bắn cái Nag đầu tiên các bạn khoan
hả bấm nút OK mà hảy trờ lại Oll bằng cách click vào cửa sổ Oll. Sau đó bấm F12. Các
bạn hảy nhìn cửa sổ code cửa window CPU xem sao. Tòan là mã code trong bộ nhớ , ko
phải là mã code chương trình. Vậy là phá sản sao?
Tui nghĩ lại có ý kiến thử cho chương trình tự động trace over (trace ko vào hàm Call để
soi mói) từng dòng lệnh 1 cách chầm chậm khi muốn ng
ừng ở đâu thì ta pause ở đó để
xem đọan code nó là gì. Mục đích ở đây là trong cái cửa sổ code của window CPU có
đọan code của chương trình
Ehèm, và thật sự Oll đã có chức năng này. Tui xin giới thiệu các bạn
4.Animate Over (CTRL+F8):
Chức năng này như sau: Trace từng dòng lệnh mà ko vào hàm call ‘soi mói’ (trace over)
một cách “chậm chậm “ và trong cửa sổ code của CPU hiện ra quá trình khi trace.Chức
năng này tui gọi tóm tắc là TraceO động
Tui hay sử dụng chức năng
để đi dến các đọan code bắn Nag đó các bạn.
OK, bây giờ thử xem sau:
-Load lại chương trình CTRL+F2
-Bấm CTRL+F8 : traceO động. Nó bắn ra Nag đúng ko
-Bây giờ trở lại Oll, đừng bấm F12 nhé. Ta thấy Oll ngừng tại đọan code sau để chờ ta
bấm phím OK(chúng ta lợi dụng chức năng này để tìm ra Nag):
Quote:
00401021 > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401023 68 EB304000 PUSH QHQPatch.004030EB ; |Title = "Hi"
00401028 68 56304000 PUSH QHQPatch.00403056 ; |Text = "Hello newbiez world. Try
with me! Rulez : 1. Patch this nag.2. Patch the BADBOY static 3* Make Exit button is
Visible. Hope you fun with me "
0040102D 6A 00 PUSH 0 ; |hOwner = NULL
0040102F E8 2E050000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
<<<<<<<<Ta dang o day
00401034 |. E8 0B050000 CALL <JMP.&kernel32.IsDebuggerPresent> ;
[IsDebuggerPresent
00401039 |. 0BC0 OR EAX,EAX
0040103B |. 74 07 JE SHORT QHQPatch.00401044
0040103D >|. C605 01304000>MOV BYTE PTR DS:[403001],1
OK rồi nhé chúng ta đã tìm ra đọan code bắn Nag.
Bây giờ tui sẽ chỉ bạn cách đánh dấu mã code này , để mỗi lần ta load lại chương trình
muốn goto đến đọan code này thì sẽ rất dễ dàng . Chúng ta ko cần phải viết ra giấy addr
cần nhớ như SI nữa.
5.Label : Đánh dấu dòng lệnh hay “gắn 1 cái nhãn” cho dòng lệnh nào đó.
Bây giờ các bạn đang đứng tại đọan code bắn Nag trong Oll, nhắc lại đừng bấm F12 nhé.
Các bạ
n hảy nhìn bên dưới màn hình Oll , góc tay phải hiển thị chế độ làm việc như sau:
Animating đúng ko các bạn . Nếu đúng thế thì máy của bạn đang ở trạng thái như máy
của tui. Các bạn hảy nhìn chổ này cho quen mắt nhé đây là nơi chúng ta biết thằng Oll
đang làm gì.
Tiếp theo các bạn click vào dòng dưới lệnh này:
00401034 |. E8 0B050000 CALL <JMP.&kernel32.IsDebuggerPresent> ;
[IsDebuggerPresent
Sau đó click phải vào nó, sẽ hiển thị 1 menu pop-up. Chọn Label. Đánh vào 1 cái tên nào
đó cho dòng lệnh này.Ở đây tui đánh name: “point1”. Bấ
m Ok. Vậy là chúng ta đã đặt tên
cho dòng lệnh trên là ‘point1’
OK, bây giờ các bạn bấm CTRL+F2 load lại chương trình.
Đừng chạy chương trình, các bạn hảy click phải trong cửa sổ CPU, chọn Goto/Expression
( hay nhấn CTRL+G). Đánh vào name: ‘point1’. Con trỏ cửa cửa sổ CPU sẽ nhảy đến
dòng lệnh mà ta đặt tên.
Bây giờ tui sẽ chỉ các bạn cách NOP các dòng lệnh sau để patch cái Nag đầu tiên:
Quote:
00401021 > 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00401023 68 EB304000 PUSH QHQPatch.004030EB ; |Title = "Hi"
00401028 68 56304000 PUSH QHQPatch.00403056 ; |Text = "Hello newbiez world. Try
with me! Rulez : 1. Patch this nag.2. Patch the BADBOY static 3* Make Exit button is
Visible. Hope you fun with me "
0040102D 6A 00 PUSH 0 ; |hOwner = NULL
0040102F E8 2E050000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
Vì sau chúng ta NOP các dòng này thì sẽ patch cái Nag đầu tiên , xin các bạn đọc tut
“Một cách Kill Nag dùng hàm MessageBoxA” mà tui đã viết.
Đầu tiên chúng ta click chọn dòng lệnh đầu tiên , bấm và giử nút Shift sau đó click vào
dòng lệnh cuối cùng, Tòan bộ nhóm lệnh trên được chọn .
Bây giờ chúng ta click phải vào nhóm lệnh đã chọn >> menu pop-up/Binary/ Fill with
NOPs.
Sau khi chọn như trên thì Oll sẽ NOP tòan bộ nhóm lệnh trên. (Rất nhẹ nhàng so với sử
dụng HIEW).Các bạn hảy nhìn vào cửa sổ Code sẽ thấy được điều đó.
Ở đây chúng ta ch
ỉ NOP chương trình đang Load trong bộ nhớ chứ ko phải trên File
chúng ta đang crack. Vậy nhiệm vụ kế tiếp là chúng ta phải “bức” cái chương trình đang
nằm trong bộ nhớ lưu ra thành 1 file mới , việc này các cracker hay gọi là “dump” nó ra
đó bạn.
Chú ý:
-Muốn làm được điều này bạn phải có Plugin OllDump , tức là cái Oll của bạn trên thanh
menu có mục Plugin/OllDump.
-Qui tắc Dump khi patch: Chương trình mới Load (CTRL+F2), tức là chưa trace hay run
qua 1 dòng lệnh nào,kế đó là patch những dòng lệnh cần thi
ết, sau đó Dump lưu ra
file.(tui sẽ giải thích sau)
Bây giờ thực hành nhé: Các bạn chọn menu Plugin/OllDump/Dump Debugged Process.
Đừng thay đổi gì hết, bấm OK, đánh vào tên file lưu ra đĩa. Bấm OK.
Bây giờ bạn kiểm tra lại file đã dump có chạy ko nhé.
Tut này dài quá rồi, Hen tut sau tui sẽ giới thệiu các bạn nhiều chức năng hấp dẫn của
OllDbg. Chúc các bạn thành công
BÀI 3: W32DASM+HIEW+SI=OLLDBG??
Tính gác kiếm về quê cưới vợ , hôm qua vào mạng rao bán đấu giá cái nick benina để có
tiền về xe. Nhưng chẳ
ng thấy ma nào mua. Đành ở lại Sì gòn nghiêu ngao vài ba chuyến
rồi tính sao. Cái gì nó đến chắc cũng sẽ đến. AQ của Lỗ Tấn là bạn của tui mà , nó dạy tui
như thế : ))
Hôm nay nghiêu ngao lên mạng, các bạn nữ nhi chi chi (BD hay “lai cái” gì cũng được)
“đòi hỏi” quá ,nên để chiều lòng các “người đẹp”, tui lại bắt đầu viết Tut tiếp cho