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

Cracking part 49 docx

5 242 0
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Understanding Code
Tác giả Kienmanowar, Kwazy Webbit
Trường học Chưa xác định
Chuyên ngành Reverse Engineering
Thể loại Bài viết
Năm xuất bản 2004
Thành phố Chưa xác định
Định dạng
Số trang 5
Dung lượng 169,21 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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óm lại , khi thực hành tìm Real

Trang 1

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)

Trang 2

-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

Trang 3

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 :

Trang 4

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

Trang 5

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 :

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 

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

TỪ KHÓA LIÊN QUAN