Nế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. 2.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 chươ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ó: _Để 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: Quote: 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] . 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. 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. 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