1. Trang chủ
  2. » Công Nghệ Thông Tin

Cracking part 49 docx

5 242 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

0040ACA3 . 85C0 TEST EAX,EAX 0040ACA5 . 74 60 JE SHORT Fulldisk.0040AD07 0040ACA7 . 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10] -Tôi click vào dòng có lệnh JE xem thử nó sẽ nhảy đến đâu khi đk đáp ứng. Các bạn xem hình 13 như sau: (hình 13) -Các bạn thấy đó, trong cửa sổ code của window CPU, xuất hiện một mủi tên chỉ đến địa chỉ 0040AD07 : 0040AD07 > \6A 00 PUSH 0 <<<<Trỏ mủi tên đến đây 0040AD09 . 6A 00 PUSH 0 0040AD0B . 68 58E94100 PUSH Fulldisk.0041E958 ; ASCII "Name / Code mis-match. Try again." 0040AD10 . E8 95B30000 CALL <JMP.&MFC42.#1200> 0040AD15 > C645 FC 00 MOV BYTE PTR SS:[EBP-4],0 Và phía đưới cửa sổ code là cửa sổ chứa địa chỉ mà l ệnh JE sẽ nhảy đến như hình 14 (hình 14) Từ những phát hiện trên chúng ta thấy rằng nếu eax=0 thì sẽ bắn Nag Badboy, vậy tại đây: 0040ACA5 . 74 60 JE SHORT Fulldisk.0040AD07 Đó chính là “tử huyệt” của Soft. -Như tôi đã nói, chúng ta cần phải biết “điểm đầu” và “điểm cuối” trước khi tìm ra real serial. “Điểm cuối” chúng ta đã biết. Vậy còn “điểm đầu”. Bây giờ chúng ta sẽ giả định “ điểm đầu” bằng cách đặt bp tại hàm Call đầu tiên gần “tử huyệt” nhất. Chúng ta hảy click trỏ đến hàm: 0040AC88 . E8 030A0000 CALL Fulldisk.0040B690 Và nhấn F2 đặt bp tại đó. (như hình15) (hình 15) -Bây giờ chúng ta hảy nhấn F9 đển Run, và nhập Fake Name và Code như lúc đầu. Chúng ta sẽ bị break tại địa chỉ đặt bp như trên. -Nhìn vào cửa sổ Stack (“Đống rác” yêu dấu của tôi!!!) chúng ta sẽ thấy có chuối sau: 0012FB30 00328B18 ASCII "6F508A8AC3AAB74FF1C90E771DF722B9" Như hình dưới đây: (hình 16) Hảy ghi nhớ chuổi này. Vào thóat chương trình nhập lại Name và code như sau: Name: benina Code: 6F508A8AC3AAB74FF1C90E771DF722B OH, WOW, nó cám ơn tui kìa, hahahahaha (hình 17) (hình 17) Vậy là chưa đầy 5 phút chúng ta đã tìm ra Real Serial đúng ko các bạn!!. Thật là bu ồn cười khi ko cần phải hiểu biết nhiều về ASM, cũng như các quá trình tính tóan phức tạp mà chúng ta đã tìm ra Real Serial một cách dễ dàng. Tội nghiệp cho mấy cái lão Coder phải ngồi suy nghĩ các thuật tóan mã hóa phức tạp để cuối cùng…. Điềm 10 lại thuộc về chúng ta. Hahaha. 3. Nhận xét: -Qua bài này các bạn thấy đó, nếu đọc tut về tìm Real Serial mà ko thực hành thì chúng ta nhiều khi ko hiểu mấy lão cracker sao mà tài tình đền thế. -Tóm lại , khi thực hành tìm Real Serial chúng ta sẽ trace qua 1 vòng như “cởi ngựa xem hoa”, rồi thấy có hiện tượng nào “lạ” thì đánh dấu lại bằng cách dùng lệnh Label (phím “:”) hay Comment (phím “;”) như tui đã chỉ cho các bạn ở các tut trên. Khi đó khi trace lại lần sau, chúng ta sẽ dễ dàng tìm ra các “điểm rào cản”, thậm chí tìm ra Real Serial một cách nhanh chóng. -Ở tut này , chủ yế u tui muốn hướng dẫn các bạn cách Search string trong Olly một cách dễ dàng mà ko phải mò mẫm từng dòng từng chử cho mệt . Chỉ có vậy thôi . Hihi. Benina 31/10/2004 Understanding Code Author: _[kienmanowar]_ “Cuộc sống luôn đầy cám dỗ Ngày ngày níu kéo con người Làm sao thắng được chính mình Làm sao Ngựa non lớn lên thường háu đá Tuổi trẻ nào suy tính gì Nên đi tới con đường bế tắc Chìm sâu trong bóng tối” I. Intro : Chào tất cả anh em REA, chúng ta lại gặp nhau trong bài viết này của tôi viết về “Understanding Code”. Đây là bài viết của tác giả Kwazy Webbit, đề cập tới vấn đề đọc hiểu code của các chương trình được Disassembly bằng W32Dasm, IDA v v Tại sao tôi lại chọn nó là chủ đề cho bài viết thứ 3 này bởi vì một lý do hết sức đơn giản, có đọc hiểu code chúng ta mới biết được chương trình đang làm gì, đoạn code mà chúng ta đang RE đượ c dùng vào mục đích gì, đề từ đó có những thay đổi chỉnh sửa sao cho hợp lý để phục vụ mục đích của chúng ta. Hầu hết những anh em tôi quen biết đến với RE, Cracking theo những cách thức khác nhau, có người muốn chỉ trong một thời gian ngắn có thể Crack được một phần mềm mà không cần tìm hiểu xem tại sao lại làm như thế, nhiều người chỉ thực hiện theo các tut một cách dập khuôn, ăn sẵn để rồi cuối cùng vẫn luẩn quẩn với những câu hỏi “Tại sao lại làm như thế ?” , “Tại sao tôi làm thế không được ?” v…v… mà không hề có một chút đầu tư nghiên cứu tìm hiểu, nhưng ngược lại có những người đi từ những viên gạch đầu tiên, từ từ từng bước một, những viên gạch của quá trình lạo động tìm hiểu nghiêm túc, tốn nhiều mồ hôi, n ước mắt để rồi bù lại họ có được những kiến thức làm tôi kinh ngạc.Có những người còn rất trẻ và những người lớn tuổi hơn tôi, có người chuyên về IT và cũng có người không. Nhưng những người đó đã để lại cho tôi lòng khâm phục bởi tinh thần làm việc nghiêm túc, lòng đam mê, sự chia sẻ kiến thức tới cộng đồng không hề vụ lợi. Việc chúng ta tìm hiểu xem m ột đoạn binary biểu diễn ý nghĩa gì là một công việc quan trọng.Các đoạn mã thực thi và dữ liệu được biểu diễn ở mức thấp nhất đó là tập hợp của các bit 0 và 1.Bạn có thể cố gắng cho thực thi một đoạn dữ liệu như một đoạn mã, nhưng hầu hết trong các trường hợp việc làm này sẽ dẫn đến crash.Lấy ví d ụ, việc cố gắng để sử dụng một đoạn mã thực thi như là một Picture data cũng sẽ là không hợp lệ hoặc ngược lại, nhưng đó chỉ là một sự ngẫu nhiên nào đó mà thôi. Đó là bởi vì có một cấu trúc để biểu diễn chúng khiến cho chúng không chỉ đơn thuần là binary mà còn bao hàm nhiều ý nghĩa khác. Để giúp ích cho bạn, bạn cần phải tìm hiểu về cấu trúc này và từ đó sẽ diễn dịch được nó theo đúng cách. Để cụ thể hơn, tôi sẽ lấy một ví dụ, chẳng hạn tôi có 4 con số như sau : 112, 43, 149, 184 Như các bạn thấy chúng có thể mang rất nhiều ý nghĩa. Nếu như tôi nói với bạn rằng đây là ví dụ về một đường thẳng, và hãy tưởng tượng rằng đây là một đường thẳng 2 chiều, bắt đầu tại tọa độ thứ nhất là (112, 43) và kết thúc tại tọa độ thứ hai là (149, 184). Tuy nhiên nếu như có ai đó lại nói với bạn là đây chính là m ột hình vuông, liệu bạn có tin không? Tôi thì tin liền khà khà bởi vì đơn giản tôi nghĩ đây là một hình vuông với 4 các tọa độ của nó. Như các bạn thấy, 4 con số trên có rất nhiều ý nghĩa đúng không, tất cả chúng đều phụ thuộc vào sự suy diễn của bạn và tôi. Điều này sẽ dẫn đến nhiều vấn đề, làm sao chúng ta có thể phán đoán hết được ý nghĩa của chúng, và làm sao chúng ta chọn được một phươ ng án đúng nhất trong đó? Máy tính sẽ dùng cách thức nào để có thể hiểu được? Làm thế nào chúng ta biết được điều gì đang thực sự xảy ra ? Trong bài viết này, tôi sẽ không đi vào tìm hiểu ngữ nghĩa của data, bởi vì các cấu trúc dữ liệu là quá nhiều (như các bạn đã thấy trong ví dụ ở trên). Mỗi một định dạng file sẽ có một cấu trúc dữ liệu. Chương trình sử dụng các phầ n mở dụng của file (.exe, .dll v v ) như là một ám hiệu để biết cách cư xử với từng cấu trúc. Thay vào đó, tôi và các bạn sẽ tập trung vào các đoạn code thực thi, đặc biệt là các đoạn code cho x86 processor. Chúng ta sẽ bắt đầu từ binary và kết thúc với ngôn ngữ C. II. Binary to Hexadecimal Như tôi đã nói ở trên, mức biểu diễn thấp nhất của thông tin (trong một môi trường máy tính) là binary. Các đoạn mã mà máy tính có thể hiểu được được biểu diễn bằng những bit 0 và 1 dài vô tận.Điều này dẫn đến con người khó có thể hiểu được những chuỗi 0 và 1 mà họ nhìn thấy thể hiện cái gì, và điều gì sẽ xảy ra. Nếu như bạn có hứng thú trong việc tìm hiểu nguyên lý hoạ t động của các mạch trong CPU, tôi gợi ý bạn nên tìm đọc các quyển sách điện tử.Còn đối với tôi, tôi không biết nhiều về chúng để có thể giải thích cho bạn một cách chi tiết về nguyên lý hoạt động (Mặc dù có một thời gian tôi đã từng làm việc với những bộ vi xử lý đơn giản). Nhằm mục đích giảng giải, binary là một định dạng khó hiểu, vì nếu số lượng các s ố binary là quá lớn sẽ khiến cho chúng ta khó khăn trong việc quan sát. Đó chính là lý do tại sao các bạn thấy rằng thông thường chúng ta không bao giờ chỉnh sửa bất cứ gì theo định dạng binary, mà thay vào đó chúng được chuyển sang một định dạng dễ hiểu hơn mà tôi và các bạn đều biết, đó chính là Hexadecimal.Nếu như các bạn thấy trong hệ binary chỉ có 2 số 0 và 1, hệ decimal thì có 10 số (0,1,2,3,4,5,6,7,8,9)còn hệ Hexa sẽ có 16 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). Bạn có thể sẽ rất ngạc nhiên là tại sao định dạng Hexa lại được chọn để biểu diễn mà không phải là hệ Decimal đã quá thân thuộc ngay từ khi lọt lòng. Câu trả lời hết sức đơn giản.Đó là bởi vì tất cả các số khi được chuyển đổi vẫn nằm dưới định dang binary.Sử dụng 4bits thì tại một thời điểm bạn có thể tạo ra chính xác 16 giá trị khác nhau từ 4 bits này, bắt đầ u từ 0 cho tới 15, theo hệ Hexa thì là từ 0 cho tới F. Điều này khiến cho hệ thống xử lý một cách dễ dàng hơn đơn giản chỉ bằng thay thế 4 bits bằng một số trong hệ Hexa. Dưới đây là bảng minh họa quá trình chuyển đổi giữa các hệ, giúp các bạn phần nào hiểu thêm về những gì mà tôi đã nói : Binary Decimal Hexadecimal 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 8 1001 9 9 1010 10 A 1011 11 B 1100 12 C 1101 13 D 1110 14 E 1111 15 F 10000 16 10 Như các bạn đã thấy trên bảng trên, tại giá trị Binary là 1000 thì giá trị ở hệ Hexa là (10), đó là vì con số 1 đầu tiên có thể được biểu diễn thành 0001, trong khi số 0 thứ 2 được biêu diễn bằng (0000). Do đó chúng ta có kết quả là 00010000, giá trị này rất phù hợp với hệ số Binary. III. Hexadecimal to Assembly Code Việc sử dụng kí pháp hexadecimal giúp chúng ta viết các đoạn Binary code một cách nhanh hơn, và cho phép chúng ta nhiều cái nhìn tổng quát hơn. Tuy nhiên nó vẫn không có ý nghĩa nhiều lắm cho con người bởi vì thực chất nó vẫn chỉ là những con số. Chúng ta hãy quan sát một ví dụ về đoạn code Hexa dưới đây : 83EC20535657FF158C40400033DBA39881400053 Như tôi đã nói, đây chỉ là một phương pháp biểu diễn nhanh, ngắn gọn cho các số binary.Điều đó có nghĩa là nó không cho chúng ta thấy bất kì một ý nghĩa gì cả, cũng như nhìn vào đó chúng ta chẳng hiểu nó định làm gì, nhưng cái lợi của nó là ngắn gọn hơn so với việc biểu diễn dưới dạng binary rất dài với toàn số 0 và 1. Đoạn Hexa ở trên bao gồm  . sao cho hợp lý để phục vụ mục đích của chúng ta. Hầu hết những anh em tôi quen biết đến với RE, Cracking theo những cách thức khác nhau, có người muốn chỉ trong một thời gian ngắn có thể Crack. cách. Để cụ thể hơn, tôi sẽ lấy một ví dụ, chẳng hạn tôi có 4 con số như sau : 112, 43, 149, 184 Như các bạn thấy chúng có thể mang rất nhiều ý nghĩa. Nếu như tôi nói với bạn rằng đây. đường thẳng 2 chiều, bắt đầu tại tọa độ thứ nhất là (112, 43) và kết thúc tại tọa độ thứ hai là ( 149, 184). Tuy nhiên nếu như có ai đó lại nói với bạn là đây chính là m ột hình vuông, liệu bạn

Ngày đăng: 01/07/2014, 13:20

TỪ KHÓA LIÊN QUAN