Thưa các bạn , tui có vào một số forum về “tình yêu “ hay đại lọai như thế và hay gặp những lời cảnh cáo của các Admin như “Bạn câu bài , tui sẽ warm bạn nếu tái phạm”…v…v… Như ở đây, tr
Trang 1Nếu các bạn nào hiểu được ví dụ tui đã post ở trên thì …các bạn ko cần đọc tiếp nữa, vì các bạn giỏi hơn benina rồi Còn nếu các bạn nào chưa hiểu gì nhiều cái vì dụ trên thì các bạn sẽ tìm hiểu cùng benina nhé Chúng ta sẽ đi từng bước một thật vững chắc để có được một nền tảng căn bản về cracking
Trước khi đi tiếp các bài sau, tui xin nhắc lại, các bạn hảy đọc kỹ bài UseOlly phần 2 của anh RongChauA và hảy thử debug chương trình trên và tìm hiểu xem tại sau benina comment như trên để có một cái nhìn bao quát về this traget Điều quan trọng nhất khi đọc các bài tut về Find Real Serial là các bạn vừa đọc, vừa thực hành thì các bạn sẽ hiểu được những gì các tác giả commeting Học cracking mà ko thực hành thì … Xin mời các bạn vào mục Recycle Bin mà đọc
Thưa các bạn , tui có vào một số forum về “tình yêu “ hay đại lọai như thế và hay gặp những lời cảnh cáo của các Admin như “Bạn câu bài , tui sẽ warm bạn nếu tái
phạm”…v…v… Như ở đây, trong lọat tut này , ko biết có ai nghĩ benina câu bài ko nửa Nhưng thật sự mà nói, benina ko có khái niệm về cái gọi là “câu bài” Mà những bài benina posted là những gì benina tìm hiểu được khi học cracking Nó cũng là những gì benina hệ thống cho chính bản thân mình, đồng thời muốn chia sẽ cho các bạn Vì
benina thật sự rất bận, nên khi nào rãnh rỗi mới dịch và viết được vài bài Mong các bạn
và các admin thông cảm mà đừng cho rằng em “câu bài”
Đến đây thì khúc dạo đầu đã xong Chúng ta sẽ tiếp tục với TUT sau về các khái niệm căn bản của ASM và tìm hiểu xem những gì các cracker commenting khi viết TUT về Find Real Searial
BÀI 5: FIND REAL SERIAL
PHẦN 2: VÀI QUI TẮC CƠ BẢN TÌM SERIAL
V mến
Hôm nay anh mới trả lời thư cho em được Bận quá xá Sorry nhe
Thực ra , tìm serial dễ lắm Không khó đâu Em cứ bình tỉnh.Rồi sẽ tìm được thôi Anh sẽ chỉ em một số nguyên tắc cơ bản như sau:
1 Đầu tiên chúng ta đặt bp , khi đó chúng ta sẽ chốt được "điểm đầu " và "điểm cuối " của quá trình kiểm tra serial Theo kinh nghiệm của anh, "điểm cuối" hay còn gọi là "tử huyệt" là quan trọng nhất Vì từ đây chúng ta sẽ truy ngược các hàm call từ dưới lên trên
Vì real serial thường xuất hiện gần "tử huyệt" nên "bóp đít" quan trọng hơn "nằm đầu" là vậy.Nói chung chúng ta bắt buộc phải biết 2 điểm "đầu" và "cuối" Đây là một số cách : Nếu chúng ta chỉ biết điểm đầu mà chưa biết điểm đích thì chúng ta cứ trace , đến khi xuất hiện thông báo bad boy thì đó là điểm đích
Nếu chúng ta biết điểm đích mà chưa biết điểm đầu ở đâu thì chúng ta cứ “ mò lên” vùng code và đặt bp tại hàm call nào chúng ta nghi ngờ Khi đó chúng ta sẽ có “điểm đầu “ giả tạo Nếu chưa tìm ra real serial , thì chúng ta cứ dời điểm đầu lên trên chút nữa, cứ thế, cứ thế
Tóm lại có rất nhiều cách tìm điểm đầu và đích
Trang 22.Trong quá trình trace lúc đầu thì thường chúng ta ko thấy real serial Vì có một số điểm
"rào cản" Nếu chúng ta vượt ra được các điểm "rào cản" này thì chúng ta mới hy vọng tìm ra real serial Vậy điểm “rào cản” này là gì? Anh lấy ví dụ:
Như name chúng ta nhập vào có 6 chử như Name:"benina" chẳng hạn ,nhưng chương trình lại qui định name nhập vào phải có 8 ký tự Đó chính là điểm “rào cản" để tìm real serial Hiểu điểm “rào cản” rồi nhé
Anh lấy ví dụ soft NXPowerLite 1.53 : điểm “rào cản” quan trọng của softs này là cho 1 chuổi mẫu( em sẻ thấy chuổi này xuất hiện trong cửa sổ stack hay cửa sổ FPU (cửa sổ thanh ghi) trong quá trình trace) Chuổi serial chúng ta nhập vào phải có thứ tự tăng giảm như chuổi mẫu và có 25 ký tự Vì vậy chúng ta sẽ lấy 25 ký tự của chuổi mẫu nhập vào làm fake serial thì sẽ qua được điểm rào cản này
Tóm lại : để tìm các điểm rào cản , chúng ta phải trace từ “điểm đầu” xuống chắc chắn chúng ta sẽ tìm được các điểm “rào cản” Nếu ko qua điểm điểm rào cản thì nó sẽ nhảy đến bad boy ngay lập tức
Một cách vượt qua điểm “rào cản” không chính qui là chúng ta patch các hàm jump trong quá trình trace Cách này có khi lại qua “điểm rào cản” được đấy Nhưng ko nên dùng cách này Hảy cố tìm ra nguyên tắc của điểm rào cản như vậy tốt hơn
3.Một số dạng Real serial :
Nếu chúng ta vượt qua được điểm rào cản để đến phần tính toán real serial Thì sẽ có một
số dạng serial đơn giản như sau:
Dạng dễ nhất: Soft sẽ lấy serial chúng ta nhập vào so sánh với real serial mà chương trình tạo ra Vì vậy , chắc chắn real serial sẽ chứa đâu đó trong memory Do đó đối với Olly, trong quá trình trace chúng ta sẽ bắt gặp nó nằm đâu đó trong cửa sổ thanh ghi, hay nằm đâu đó trong cửa sổ stack của Olly Vì vậy trong quá trình trace , nếu chưa hiểu thuật toán của softs , chúng ta thấy xuất hiện bất cứ chuổi nào trong stack hay trong cửa sổ thanh ghi chúng ta cứ nhớ nó = cách copy ra 1 file text nào đó Rồi sau đó cứ nhập thử vào , có khi chúng ta hên sẽ biết được real serial Cách này Anh gọi nôm na là tìm trong “đóng rác” là vậy hihi
Một số thuật toán như MD5 cũng thuộc dạng này Nó tính toán rất ghê góm, nhưng đến một lúc nào đó nó cũng xuất hiện chuổi real serial trong của sổ stack… hihi
Dạng Fixed Password: Như các soft bác kienmanowar đã crack của trang web
emailarms.com Tức là chuổi real serial phải có một số vị trí ký tự qui định sẳn Loại soft này ko xuất hiện chuỗi real serial trong cửa sổ stack Đặc điểm của các softs này là sẽ có một chuổi các điểm “rào cản” liên tiếp nhau để đi đến tử huyệt Nếu chúng ta biết được điểm đích thì chúng ta sẽ dễ dàng tìm ra “chuổi điểm rào cản này”
Một dạng nữa : (dạng này cũng ko hiện chuổi serial trong stack) dạng này là tính toán name và chuổi serial chúng ta nhập vào theo 1 “qui tắc” nào đó thành một con số (như softs Ripple Screensaver 3.0 trong bài 4 Let’s crack by Olly) , rồi đem so sánh với một số nào đó Dạng này hơi khó, vì chúng ta phải hiểu quá trình tính toán tức là phải hiểu “quy tắc” tính toán Dạng này nếu là newbie chúng ta chỉ patch tại điểm so sánh là xong (hoặc patch AL=1 hay EAX=1 cuối hàm call như hacnho đã làm ) Nếu patch mà khi vào lại vẫn bị báo reg , thì chắc rằng sẽ có một quá trình tính toán tương tự ở đâu đó trong
Trang 3chương trình Chúng ta cố tìm ra để patch nó thì sẽ OK
Vân vân và vân vân… rất nhiều dạng…
Một quy tắc rất quan trọng để tìm serial cho nhanh:
Vì trong một đóng code chúng ta trace hết thì rất mệt mỏi Vậy làm sao để đến các điểm
“rào cản” và các “qui tắc” tính toán chuổi serial cho nhanh Chúng ta hảy để ý như sau: khi đến các điểm “rào cản” hay các điểm bắt đầu “quy tắc tính toán” chuổi serial thì
chương trình lúc nào cũng phải chạm đến vùng nhớ chứa chuổi serial chúng ta nhập vào
để lấy nó ra tính toán Vì vậy chúng ta sẽ đặt bp trên vùng nhớ chứa serial khi chương trình acess đến nó Ví dụ :
Khi chúng ta biết được “điểm đầu”.Lúc đó chuổi serial chúng ta nhập vào đã nằm đâu trong memory đúng ko? Chúng ta sẽ tìm xem chuổi serial của chúng ta nhập vào nằm đâu trong memory = cách nhấn ALT-M mở cửa sổ memory Và search (CTRL-B) tìm chuổi serial Khi đó chúng ta chọn chuổi tìm được và đặt breakpoint /memory, on acess trên vùng nhớ serial, tức là khi nào chương trình chạm đến vùng nhớ đó sẽ ngắt.Khi đó chúng ta sẽ đến các điểm “rào cản “ rất nhanh
Benina (http://www.reaonline.net) Manual Unpack Activemark 5.31
Bejeweled 2 Deluxe có phiên bản mới, cách chơi và đồ hoạ của game tuyệt vời nhưng 1
điểm làm chúng ta không hài lòng là bắt chúng ta mua nó!!! Ha ha, tiền đâu mà mua, xử
nó thôi!!
Target : Bejeweled 2 Deluxe (www.popcap.com)
Packer : ActiveMark 5.31
Tools : Ollydbg 1.10, Imprec 1.6, LordPe 1.41, PeiD 0.94, ActiveMark.Version
_Scan File target với PeiD 0.94 và dùng Plugin Generic OEP Finder ta có:
Trang 4_Để biết chính xác phiên bản ActiveMark các bạn có thể dung Tool
“ActiveMark.Version”
_Như vậy ta có thể đoán OEP nằm trong Section ” text” (005D4000) Các Bạn nên lưu ý điều này khá quan trọng Run “WinBej2.exe” sẽ có 1 Nag nhắc nhở đăng ký Ok, để đó
mở Olly và Attach nó và bạn sẽ ở đây
Quote:
7C901231 C3 RETN
7C901232 8BFF MOV EDI,EDI
7C901234 90 NOP
7C901235 90 NOP
_bây giờ ta cho nhảy tới Address đầu tiên của Section text là 005D4000 ta là như sau: Quote:
7C901231 - E9 CA2DCD83 JMP WinBej2.005D4000
7C901236 90 NOP
7C901237 90 NOP
_Nhấn F7 bạn tới đây:
Quote:
005D4000 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command
005D4001 6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command
005D4002 16 PUSH SS
005D4003 0082 6E160094 ADD BYTE PTR DS:[EDX+9400166E],AL
_nhấp chuột phải và chọn Search For\All Intermodular Calls và gõ “GetCommandLineA”
và nhấp đôi vào “GetCommandLineA” bạn tới đây:
Quote:
00719614 E8 C05F0000 CALL WinBej2.0071F5D9
00719619 FF15 74D17300 CALL NEAR DWORD PTR DS:[73D174] ;
kernel32.GetCommandLineA
0071961F A3 44967300 MOV DWORD PTR DS:[739644],EAX
00719624 E8 7E5E0000 CALL WinBej2.0071F4A7
_cuộn chuột lên đầu đoạn chương trình và Set 1 Hardware, on Execution tại 00719593:
Trang 5Quote:
00719593 55 PUSH EBP
00719594 8BEC MOV EBP,ESP
00719596 6A FF PUSH -1
00719598 68 C8EB6300 PUSH WinBej2.0063EBC8
0071959D 68 70F97100 PUSH WinBej2.0071F970
_nhấn Alt+F2, F3 chọn “WinBej2.exe”, Atl+O tại thẻ Events đánh dấu “Break on new module (DLL)” và nhấn F9 cho tới khi dừng ở 00719593 (OEP)
Quote:
00719593 55 PUSH EBP <== OEP
00719594 8BEC MOV EBP,ESP
00719596 6A FF PUSH -1
00719598 68 C8EB6300 PUSH WinBej2.0063EBC8
0071959D 68 70F97100 PUSH WinBej2.0071F970
007195A2 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]