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

Cracking part 13 docx

6 274 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

Định dạng
Số trang 6
Dung lượng 110,65 KB

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

Nội dung

với TaskLock, chúng ta nhấn F11 để trở về đoạn lệnh gọi function.. Để xem nó giấu cái gì nào, okey chúng ta hãy đánh : d 40A680 Và cái gì hiện ra trong data window vậy các bác... Bây giờ

Trang 1

với TaskLock, chúng ta nhấn F11 để trở về đoạn lệnh gọi function Chúng ta nhấn

Ctrl-Up để kéo màn hình lên trên và sẽ thấy đoạn code sau :

MOV ESI,[ESP+0C]

PUSH 1E _Lưu chiều dài lớn nhất của FN

PUSH 0040A680 _Địa chỉ đến buffer

PUSH 000003ED _Control handle

PUSH ESI _Dialog handle

CALL [USER32!GetDlgItemTextA]

Các bác có thấy cái gì không ? Đó là số 40A680 Để xem nó giấu cái gì nào, okey chúng

ta hãy đánh : d 40A680

Và cái gì hiện ra trong data window vậy các bác Well, chúng ta hãy nhìn vào phần đầu của đoạn code :

PUSH 00

PUSH 00

PUSH 000003F6 _Control handle

MOV EDI, 00401680 _Lưu địa chỉ đến buffer

PUSH EDI Dialog handle

CALL [USER32!GetDlgItemInt]

Chắc các bác đang thắc mắc GetDlgItemInt là cái quái gì phải không ? Ở đây em xin nói ngoài lề 1 chút : GetDlgItemInt là 1 function giống với GetDlgItemText, nó trả về giá trị integer từ hộp thoại text Nó được trả về trong EAX, vì vậy chúng ta “nhảy” qua đoạn lệnh này, và nhìn vào register window … Của em là nó như thế này : EAX=00003039

Và để biết 3039 là cái gì, chúng ta đánh : ? 3039

Okey, chúng ta sẽ có gì nào :

00003039 0000012345 “09”

_| _| |

_| _| |

hex _dec ascii

Như các bác thấy, nó hiện ra FS mà chúng ta đã đánh vào ban nãy Bây giờ chúng ta típ tục, các bác hãy nhìn vào đoạn code theo sau, trước tiên là FS đã được lưu lại :

MOV [0040A548], EAX _Lưu FS

MOV EDX, EAX _”đặt” FS vào EDX

3.1.3 Đoạn code tính số serial

-

Và đây chính là đoạn code tính số serial :

MOV ECX, FFFFFFFF Tính chiều dài FN

Trang 2

SUB EAX, EAX

REPNZ SCASB

NOT ECX

DEC ECX _EAX chứa chiều dài FN

MOVSX EAX, BYTE PTR [0040A680] Nhận byte tại 40A680

IMUL ECX, EAX _ECX = ECX * EAX

SHL ECX, 0A Đổi chỗ 0A

ADD ECX, 0002F8CC Thêm 2F8CC vào kết quả

MOV [0040A664], ECX

Và đây mới là đoạn code mà ta mong đợi nhất ( cố lên các bác, sắp xong rùi :) :

CMP ECX, EDX _So sánh EAX và EDX

JZ 00402DA6 _Nhảy nếu bằng

Sau khi “nhảy” đến CMP ECX,EDX , các bác có thể xem đoạn code thực của nó bằng cách đánh vào : ? ecx

Và nó sẽ hiện ra như sau (không bít có giống của các bác không) :

000DC0CC 0000901324

Hehehehhe……đến đây thì chúng ta đã có được registration number của mình rùi đó là

901324

Bây giờ các bác thử nhập lại registration number xem có được không, được quá đi chứ lị :)))))))

4 Tạo keymaker cho phần mềm Command Line 95

===============================

Chúng ta nhìn vào đoạn code tính số serial ở trên, và dịch nó sang C Em làm ví dụ này

để thấy làm thế nào để tính được real serial :

Real serial= [( kí tự viết hoa đầu tiên * chiều dài của chuỗi)<< 0x0A ]+0x2F8CC

Ở đây các bác chú ý 2 vấn đề :

+ các kí tự trong FN sẽ được chuyển sang chữ hoa khi bạn gõ chúng trong text box + “<< 0x0a” có nghĩa là “ nhân với 2^10”

Trong C nó sẽ như thế này :

#include <string.h>

#include <stdio.h>

int main()

{

unsigned long code;

unsigned char buffer[0*1e];

printf(“CommandLine 95 Keymaker by the_lighthouse\n”);

printf(“Enter your name: “);

gets(buffer);

Trang 3

strupr(buffer);

code = ( ((unsigned long)buffer[0] *

(unsigned long)strlen(buffer))

<< 0x0A) + 0x2f8cc;

printf(“Your serial is : %lu”, code);

return 0;

}

5 Làm thế nào mà lệnh PUSH và lệnh CALL và những lệnh khác thật sự làm việc khi mà chương trình gọi 1 funtion

===============================================

Nào, chúng ta hãy nhìn lại đoạn 1 code của TaskLock ( nếu bác nào không bít nó nằm ở đâu thì hãy nhìn vào đoạn code đầu tiên) :

PUSH 32 _Lưu chiều dài của FS

PUSH EAX _Lưu địa chỉ của text buffer

PUSH 000003F4 _Lưu Identifier của control

PUSH DWORD PTR [ESI+1C] Lưu handle của dialog

CALL [USER32!GetDlgItemTextA]

Nếu các bác gọi nó từ chương trình C, nó sẽ như thế này :

GetDlgItemTextA(hwndDlg, 0x3F4, buffer, 0x32);

_| |

_| |

[ESI+1C] EAX

PUSH lưu dữ liệu trên 1 vài lệnh gọi stack Kết quả này trong mỗi lệnh PUSH đặt 1 phần của dữ liệu phía trên stack, và sau đó function kiểm tra cái gì đang nằm trên stack và dùng nó để làm bất cứ cái gì

6 Đôi điều về chương trình viết bằng Visual Basic

===================================

File Visual Basic.exe không thực sự được biên dịch ra file exe Nó chỉ chứa đoạn code để gọi file VBRUNxxx.DLL , file này có nhiệm vụ đọc dữ liệu từ file exe và chạy chương trình Đó là lí do vì sao chương trình viết bằng Visual Basic lại chạy chậm như vậy Và khi file exe không có thực, các bác không thể disassemble nó, các bác chỉ tìm thấy đoạn lệnh gọi DLL và rất nhiều “rác”, và khi các bác dubeg, các bác sẽ kết thúc tại DLL

Và cách giải quyết là decompiler (dịch ngược) Có rất nhìu chương trình decompile cho Visual Basic, được viết bởi DoDi Đây là chương trình shareware và có thể tìm được trên mạng

Trang 4

Tuy nhiên các bác cũng chớ lo vì các programmer giỏi thường không bao giờ viết chương trình bằng Basic (phù, may quá ;))

Phụ lục :

A Làm thế nào để kiểm tra SoftICE đã load symbols ?

++++++++++++++++++++++++++++++++++++++

Để kiểm tra xem SoftICE đã load symbols cho GetWindowText chưa, các bác vào

SoftICE và đánh : exp getwindowtext

B Cú pháp cho function

+++++++++++++++++

int GetWindowText(int windowhandle, char *buffer, int maxlen);

int GetDlgItemText(int dialoghandle, int controlid, char *buffer, int maxlen);

int GetDlgIemInt(int dialoghandle, int controlid, int *flag, int type);

the_lighthouse (http://www.reaonline.net) cRACKER's nOTES

Quote:

Bài viết được chia thành 10 phần chính :

00 Giới thiệu

01 Assembly for Crackers

02 SoftICE ( Boot Menu, Setup, Commands)

+ 02.1 Boot Menu

+ 02.2 Setup

+ 02.3 Commands

03 Breakpoints và Win API Details

+ 03.1 Crippled Programs

+ 03.2 Dialog Box

+ 03.3 Drive Type Checks

+ 03.4 File Accesses

+ 03.5 Registry Accesses

+ 03.6 Serial Catching

+ 03.7 Time & Date Accesses

+ 03.8 Window Generating

04 Kiến thức về lệnh nhảy ( jump )

05 Kiến thức về SET

06 Tips & Tricks for Cracking

+ 06.1 Crippled Programs

+ 06.2 Dongles

+ 06.3 General

+ 06.4 InstallSHIELD Setups

Trang 5

+ 06.5 Key File Protections

+ 06.6 Nag Screens

+ 06.7 Runtime Limits

+ 06.8 Serials

+ 06.9 Time Limits

+ 06.10 Visual Basic Programs

07 Window Messages for Crackers

08 Nhận biết Functions, Arguments, và Variables

09 Các cách thức bảo vệ của phần mềm

+ 09.1 C – Dilla SafeDISC

+ 09.2 SalesAgent

+ 09.3 SecuROM

+ 09.4 softSENTRY

+ 09.5 TimeLOCK

+ 09.6 Vbox

10 Bitmanipulation

Phụ lục :

+A Những ý kiến chung về Cracking

+B Những câu hỏi thường gặp

*******************************************

00 Giới thiệu

========

Bài viết là 1 cuốn “bí kíp” được tích lũy từ những kiến thức “bí mật không thể bật mí “ cũng như các kinh nghiệm quý báu của các cracker trên thế giới, do đó những gì quan trọng nhất mà 1 cracker cần phải biết đều có trong loạt tuts này

01 Assembly for Crackers

================

Quote:

AND

Cú pháp : AND <đích>,<nguồn>

Tác dụng : thực hiện logical AND của 2 giá trị, thay thế đích với nguồn

Ví dụ : AND BX,03h

Quote:

CALL

Cú pháp : CALL address

Tác dụng : đưa vào stack lệnh next Sử dụng cho việc gọi hàm

Ví dụ : CALL 10284312

+ Gọi function tại địa chỉ “address”, sau khi function kết thúc, đoạn code ngay phía dưới lệnh call sẽ được tiếp tục

Quote:

Trang 6

 

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

TỪ KHÓA LIÊN QUAN