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

Cracker Handbook 1.0 part 261 pptx

6 103 1
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 đề Patching Time Trial
Tác giả Detten
Người hướng dẫn The_Lighthouse
Trường học Không có thông tin
Chuyên ngành Kỹ Thuật Phần Mềm
Thể loại Hướng Dẫn
Năm xuất bản 2005
Thành phố Không có thông tin
Định dạng
Số trang 6
Dung lượng 144,27 KB

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

Nội dung

Bây giờ chúng ta sẽ tạo file patcher bằng công cụ Dup đã giới thiệu ở mục Tools, việc làm này sẽ giúp chúng ta khi chạy prog trên một máy khác, chỉ cần ta chạy file patcher này thì origi

Trang 1

0041D0DE | 81C4 A0000000 ADD ESP,0A0

0041D0E4 \ C3 RETN

Theo như trên tôi phân tích thì chỉ cần patch tại một địa chỉ duy nhất, đó là tại địa chỉ 0041CFD0, ta sẽ patch từ JE #1_VIDEO.0041D05C thành JMP

#1_VIDEO.0041D05C Cách patch và save ra file mới chúng ta tiến hành tương tự

như phần trình bày ở trên, giả sử ta được file Patch_2.exe Bạn chạy thử file này xem, bạn thấy thế nào

Bây giờ chúng ta sẽ tạo file patcher bằng công cụ Dup (đã giới thiệu ở mục Tools), việc làm này sẽ giúp chúng ta khi chạy prog trên một máy khác, chỉ cần ta chạy file patcher này thì origin file sẽ được crack, và ta có thể đăng ký cho chương trình với bất kỳ Name và Serial nào Vậy chúng ta tiếp tục nào

III Tạo patcher

Ở đây tôi sẽ không giới thiệu về Diablos2oo2 Universal Patcher (DUP), các bạn

có thể tìm được công cụ này và những bài viết kỹ hơn về nó trong forum, mong các bạn hãy chịu khó

Mở Dup lên, sau khi điền những thông tin về soft và cách dùng patcher ta sẽ nhấn vào tab Offset Patch, xem hình sau đây :

Trang 2

Chọn file Origin, chọn file đã được patch Chọn chế độ so sánh “Normal File”, nhấn vào nút “Compare” ta sẽ thấy bảng so sánh sự khác nhau giữa 2 file Cuối cùng nhấn nút “Create Patch” ta sẽ có được file patcher

Vậy là công việc của chúng ta đã xong, các bạn có thể đem sản phẩm của mình đi test trên các máy khác nhau, hệ điều hành khác nhau xem, chắc chắn kết quả sẽ làm các bạn rất vui cho mà xem hihi ;-)

Chào các bạn, hẹn gặp các bạn trong các tut khác, thân !

-=[End Tut]=-

25/06/2005

Trang 3

++ ==[ Greatz Thanks To ]== ++

- Thank to my family, Computer_Angel, Moonbaby , Zombie_Deathman,

Littleboy, Benina, Kienmanowar, QHQCrker, the_Lighthouse, Hoadongnoi, Nini all REA‘s members, HacNho,RongChauA,Deux, tlandn, dqtln , ARTEAM all

my friend, and YOU

Dzunglt(REA)

Patching time trial

Tác giả : Detten

Biên dịch : the_lighthouse

Giới thiệu :

Chào các bác, lần này chúng ta sẽ học cách remove time trial

Down timetrial : hxxp://biw.rult.at/crackmes/timetrial.zip

Crackme này sẽ cho bác 3 ngày kể từ lúc các bác mở nó và sẽ die sau đó, hoặc nếu các bác mở nó quá 9 lần thì nó cũng sẽ tự động die luôn Nhiệm vụ của chúng ta là phải làm sao cho nó không được die khi chưa được chúng ta cho phép

Tool need : WDASM 10, hacker view 6.40

Sơ lược về các hàm API dùng trong chương trình :

Để biết được chương trình đã tồn tại bao lâu trong máy của các bác, chương trình cần phải biết giờ của hệ thống, và thực tế thì có rất nhiều cách khác nhau để thực hiện điều đó Các bác hãy nhìn như sau :

Nhiều hàm API có thể "gửi" cho chương trình ngày giờ của hệ thống, và đây là các hàm tiêu biểu:

GetLocalTime

GetSystemTime

GetSystemTimeAsFileTime

Những thông tin được các hàm trên mang về được lưu giữ trong 1 cấu trúc Đối với

2 hàm đầu tiên thì là SYSTEMTIME, còn hàm cuối là FILETIME (thường được dùng cho file)

Và đây là cấu trúc của SYSTEMTIME :

Code:

typedef struct _SYSTEMTIME { // st

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

Trang 4

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME;

Cấu trúc SYSTEMTIME cho biết ngày và giờ sử dụng riêng lẻ cho tháng, ngày, năm, thứ ngày, giờ, phút, giây, và cả 1 phần 1000 giây

Còn đây là cấu trúc của FILETIME :

Code:

typedef struct _FILETIME { // ft

DWORD dwLowDateTime;

DWORD dwHighDateTime;

} FILETIME;

Cấu trúc FILETIME là 1 giá trị 64bit cho biết số nanosecond (1 phần tỉ giây)

khoảng từ ngày 1 tháng 1 năm 1601

Tiếp theo là những hàm API dùng để so sánh ngày hoặc thay đổi vào những cấu trúc :

CompareFileTime

FileTimeToSystemTime

Và hãy luôn luôn nhớ rằng trước khi crack 1 chương trình, các bác nên tìm hiểu những thông tin về các hàm API được dùng trong chương trình để hiểu rõ hơn về cách thức hoạt động của chúng

Tổng quát chung lại ta có :

GetTime so sánh giá trị ngày được lưu giữ (chính là ngày hoặc giờ mà bạn sử dụng chương trình lần đầu tiên) , hoặc làm giảm số ngày đã trôi qua, hoặc 1 vài thứ khác tương tự

Làm việc với WDASM :

Okey, phần tìm hiểu về crackme đã xong Bây giờ chúng ta mở Wdasm10 lên, load crackme vào Sau khi load xong, chúng ta vào Functions\Import (hoặc nhấn cái nút thứ 13 ở bar) để xem các API dùng trong chương trình Nhìn trong list hiện ra ta thấy như sau :

Code:

KERNEL32.CreateFileA

KERNEL32.ExitProcess

KERNEL32.GetModuleHandleA

KERNEL32.GetSystemTime <== double click vào đây

KERNEL32.ReadFile

KERNEL32.SetFilePointer

Trang 5

KERNEL32.WriteFile

USER32.DestroyWindow

USER32.DialogBoxParamA

USER32.MessageBoxA

USER32.SetDlgItemInt

Chúng ta thấy có API GetSystemTime có liên quan đến thời gian =>double click vào ==> chúng ta sẽ đến đoạn code sau :

Code:

0040100C 6A00 push 00000000

0040100E 6880000000 push 00000080

00401013 6A03 push 00000003 ; Chỉ mở file hiện đang có

00401015 6A00 push 00000000 ; Không thuộc tính bảo vệ

00401017 6A00 push 00000000 ; Không sharing

00401019 68000000C0 push C0000000 ; Mở để đọc và viết

* Possible StringData Ref from Data Obj ->"DATA.DET"

0040101E 68A2304000 push 004030A2 ; Push DATA.DET

* Reference To: KERNEL32.CreateFileA, Ord:0032h

00401023 E8DE010000 Call 00401206 ; Mở file

00401028 83F8FF cmp eax, FFFFFFFF ; Sai handle?

0040102B 7407 je 00401034 ; Nhảy đến BADGUY nếu không thể mở file 0040102D A314314000 mov dword ptr [00403114], eax ; Lưu handle

00401032 EB18 jmp 0040104C ; Nhảy

* Referenced by a (U)nconditional or (C)onditional Jump at Address:0040102B(C)

00401034 6A30 push 00000030 ;Badguy - Missing File message

* Possible StringData Ref from Data Obj ->"I don't like this !"

00401036 6838304000 push 00403038

* Possible StringData Ref from Data Obj ->"Where is my DATA.DET file?"

0040103B 6802304000 push 00403002

00401040 6A00 push 00000000

* Reference To: USER32.MessageBoxA, Ord:01BBh

00401042 E8B3010000 Call 004011FA

00401047 E922010000 jmp 0040116E ; nhảy đến đoạn cuối

* Referenced by a (U)nconditional or (C)onditional Jump at Address:00401032(U)

Trang 6

0040104C 6A00 push 00000000

0040104E 68E0304000 push 004030E0 ; Lưu những byte khác ở đây

00401053 6A32 push 00000032 ; Đọc tối đa là 50 byte

00401055 68AB304000 push 004030AB ; Buffer để lưu dữ liệu

0040105A FF3514314000 push dword ptr [00403114] ; Đặt file handle

* Reference To: KERNEL32.ReadFile, Ord:01FDh

00401060 E8B9010000 Call 0040121E

00401065 833DE03040000B cmp dword ptr [004030E0],0Bh ; Kiểm tra 11 bytes đã được đọc?

0040106C 0F85E9000000 jne 0040115B ; Nếu chưa, nhảy đến BAd-GUY

00401072 BBAB304000 mov ebx, 004030AB ; chuyển buffer pointer vào EBX

00401077 68E4304000 push 004030E4 ; Đặt pointer vào cấu trúc

SYSTEMTIME

* Reference To: KERNEL32.GetSystemTime, Ord:0148h

0040107C E897010000 Call 00401218 <== chúng ta đang ở đây

00401081 803B00 cmp byte ptr [ebx], 00 ; Kiểm tra xem có cái gì đã được lưu chưa?

00401084 7522 jne 004010A8 ; Nếu chưa, nhảy đến 004010A8

00401086 51 push ecx ; lưu ngày/giờ hiện tại

00401087 33C9 xor ecx, ecx ; thêm cấu trúc SYSTEMTIME vào buffer

00401089 EB15 jmp 004010A0 ; cộng

* Referenced by a (U)nconditional or (C)onditional Jump at Address:004010A3(C)

0040108B 668B81E4304000 mov ax, word ptr [ecx+004030E4]

Ngày đăng: 03/07/2014, 17:21

TỪ KHÓA LIÊN QUAN