Bài mới nhất

Sửa Đóng
Thư mục: Crack Phần Mềm |
Đăng ngày: 00:11 28-10-2008
PHỤ LỤC: hàm API Getdlgitemtext

GetDlgItemText


The GetDlgItemText function retrieves the title or text associated with a control in a dialog box.


UINT GetDlgItemText(

HWND hDlg, // handle of dialog box

int nIDDlgItem, // identifier of control

LPTSTR lpString, // address of buffer for text

int nMaxCount // maximum size of string

);


Parameters


hDlg

Identifies the dialog box that contains the control.

nIDDlgItem

Specifies the identifier of the control whose title or text is to be retrieved.

lpString

Points to the buffer to receive the title or text.

nMaxCount

Specifies the maximum length, in characters, of the string to be copied to the buffer pointed to by lpString. If the length of the string exceeds the limit, the string is truncated.

Return Values

If the function succeeds, the return value specifies the number of characters copied to the buffer, not including the terminating null character.

If the function fails, the return value is zero.

Remarks

The GetDlgItemText function sends a WM_GETTEXT message to the control.

----------------------------------------------------------------------------------------------



_Bài viết của hacnho xin vui lòng để lại dòng này khi trích dẫn hoặc đăng tải.

_download bản tut bằng HTML :
Yeah! Để hưởng ứng với HacNho part II “Cracker! Who are you” phần lấy correct Serials, Zombie post tiếp tuts cho chương trình này…

Production: IPSearch 1.9
Copyright by: Paul Gerhart
Homepage: http://www.worldlynx.net/pgerhart/
Protector: Name/Serials
Packed: None
Tools: OllyDbg 1.09d
Done: Get Correct Serials
Cracked by: Zombie DeathMan
Comment: IPsearch lets you search the Internet's IP address space - give it a starting IP address and it sequentially searches for HTTP ports and reports summary HTML content. IPsearch can also do a complete Whois function and can convert domain names to IP addresses. Results can be saved and printed.

Sử dụng thử thử chương trình bạn sẽ thấy gặp một số khó chịu khi chưa Reg: Menu Item yêu cầu Reg, hiện Nag khi Exit, limited functions…

Hm…Với ngần ấy rắc rối này mà patch thì hơi mệt đa (vì phải tìm đến từng vị trí cần correct serials mà Patch). Thui…Đành chơi ra correct Serials vậy (còn Keygen thì….hm..Chương trình này thuật tạo Keygen cũng no so hard..You can try it.. )

Bắt đầu crack để tìm correct serials là việc tìm đến BadBoy. Ở đây là string “Name/Code mis-match. Try again.” Oki! Sử dụng OllyDbg để tìm đến String này.
Bạn sẽ đến được BadBoy này tại Addr: 004057F7

004057F3 |> \6A 00 PUSH 0 -->Dịch dấu nháy đến here bạn sẽ thấy OllyDbg chỉ đến lệnh nhảy trước đó (Jump from) ở Addr 00405760, 0040579B
004057F5 |. 6A 00 PUSH 0
004057F7 |. 68 8C834100 PUSH IPsearch.0041838C ; ASCII "Name / Code mis-match. Try again."

Như vậy ở 2 Addr 00405760, 0040579B nếu nhảy sẽ --> BadBoy. Vì thế chắc chắn trước đó phải có hàm tạo Keygen…Yeh! Hàm tạo Keygen ở 00405743. Vào trong hàm này bạn sẽ thấy nó được Call từ khá nhiều chỗ --> Patch là mệt nghĩ.

Tìm đến 00405786.

0040577E |. 52 PUSH EDX ; /s2
0040577F |. 8B85 7CFFFFFF MOV EAX,DWORD PTR SS:[EBP-84] ; |
00405785 |. 50 PUSH EAX ; |s1
00405786 |. FF15 B0454100 CALL DWORD PTR DS:[<&MSVCRT._mbscmp>] ; \_mbscmp

Ở đây là hàm cmp với 2 đối số là 2 String cần so sánh. Rõ rồi. Chỉ cần set bp here là bạn sẽ có được CorrectSerials (Nhìn giá trị ở các đối số: 1 cái là your entered, còn cái kia là correct).
Xong! Vậy bạn chỉ việc chạy lại chương trình và nhập lại đúng thôi.

*********************************************************
Name: Zombie
Serials: B4E6FEEF3C44F074782E8C5E36FEC2E9
Name: Zombie DeathMan
Serials: 07E7EF148B80CA07ADB21D7AC9FE94E1
**********************************************************

PS: Trong quá trình trace code bạn sẽ thấy một chuỗi string..ke..ke..Lưu ý nó nha..Khá quan trong cho việc code keygen đó…
Name/Code sau khi Oki sẽ được lưu trong Reg ở HKEY_LOCAL_MACHINE\SOFTWARE\Paul Gerhart Software\IPsearch\User
Hic..Zombie tìm ra được thuật code keygen của nó (dựa trên language ASM) nhưng code ngược lại bằng Visual Basic .NET không được..Tức cành hông ..!


[/B]

--------------------
Welcome to THE H-E-L-L
A world no sense of mercy !!!

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

Buồn...Thương người đơn phương ...!
Chỉ mong rollback thời gian...
Chỉ mong có được người ấy như xưa...
Chỉ mong....
*********************************************
Tìm real key hả cho tui tham gia với:

[Marquee]CRACK FAMALY KEYLOGGER v2.53[/Marquee]

Download at: www.SpyArsenal.com

Cracker : deux

Tool: softice for win, w32dasm


Đây là một soft kiểm tra key không phức tạp nhưng lại rất dài dòng vậy nên nếu không tìm ra chô cần carck thì rất dễ nản , bây giờ hãy bắt đầu.

Mở W32Dasm disasembler nó ra tìm cái nag invalid key trong Refs>String Data.

Dbclick vào nó sẽ đưa bạn đến chỗ cái nag

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

|:004034D6©

|

:004034FF 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"FamilyKeyLogger"

|

:00403501 8B0D08514000 mov ecx, dword ptr [00405108]

:00403507 51 push ecx

chú ý tại 004034D6© nó cho biết có một lệnh nhảy có điều kiện đến cái nag, nhấn shift+F12 điền vào địa chỉ này OK bạn sẻ đến đây:

:004034C9 FF1578104000 Call dword ptr [00401078]

:004034CF E895E8FFFF call 00401D69

:004034D4 85C0 test eax, eax

:004034D6 7427 je 004034FF nhảy đến nag nếu =0

:004034D8 6A00 push 00000000

* Possible StringData Ref from Data Obj ->"FamilyKeyLogger"

|

:004034DA A108514000 mov eax, dword ptr [00405108]

:004034DF 50 push eax

* Possible StringData Ref from Data Obj ->"Thank you for registration!"

|

:004034E0 8B0D4C514000 mov ecx, dword ptr [0040514C]

như vậy đều cần thiết là cái lệnh nhảy đó phải đứng im, tuy nhiên điều cần làm là tìm key chớ không phải patch, và nếu bạn patch thì cho dù co lên cái câu "Thank you for registration" bạn cũng vẫn bị đòi đăng ký ở lần sau, các soft bây giờ nó đểu lắm, patch nag là xưa rồi,Okie bạn hãy nhìn lên trước cái lệnh nhảy sẽ có lệnh call 00401D69, chính lệnh call này sẽ gọi một hàm , và hàm này quyết định xem số key của bạn đúng hay sai. Vậy hãy di chuyển đến đó và click vào nút Call , bạn sẽ đến một nơi nào đó trong chương trình , hãy kéo xuống một đoạn nữa đến chỗ sau:

:00401E4B 8D95F8FDFFFF lea edx, dword ptr [ebp+FFFFFDF8] chuyển key bạn nhập vào edx

:00401E51 52 push edx

* Reference To: KERNEL32.lstrlenA, Ord:0308h hàm này cho chiều dài của chuỗi ban nhập

|

:00401E52 FF159C104000 Call dword ptr [0040109C]

:00401E58 83F81D cmp eax, 0000001D so sánh số ký tự với 1D(hex)=29(Dec)

:00401E5B 7407 je 00401E64 nhảy nếu bằng

:00401E5D 33C0 xor eax, eax set cho eax=0 ( nguyên nhân dẫn đến cái nag)

:00401E5F E942040000 jmp 004022A6

như vậy số ký tự bạn nhập vào phải bằng 29, tất nhiên nếu nhìn vào W32dasm thì không thể thấy chính xác các phép toán thực hiện như thế nào vì nó không thể hiện được giá trị của register hay address tại thời điểm chạy đến đoan mã này, nhưng bạn cần suy đoán để tìm ra thôi, ví dụ như tại sao nhìn vào lea edx, dword ptr [ebp+FFFFFDF8] lại biết là nó chuyển reg của mình nhập vào edx, cái này thì không ai có thể bày cho bạn được mà bạn phải crack nhiều , chịu khó quan sát và kinh nghiệm sẽ cho bạn biết chỗ cần tìm. Đối với người mới bắt đầu có thể xài soft-ice để kiểm chứng lại cái đoạn tôi nói ở trên,

do crack này hơi dài tôi chỉ nói sơ trong SI như sau:

set BP trong SI là getdlgitemtextA xong press F5 trở về lại màn hình đăng ký, nhấn OK bạn sẽ trở lại màn hình của SI, nhấn F12 để trở về vị trí vừa gọi hàm Getdlgitemtexta, trace down bằng F10 , thêm một luu ý nữa nếu gặp các hàm API thì cứ việc nhấn F10, bạn có thể biết nó là hàm API khi trước đó có phần Kernell32.dll.. hay User32., bởi vì bạn không cần biết nội dung của hàm đó, nếu muốn biết thì tốtnhất là tìm các tut về hàm API, còn nếu gặp các lệnh call đến các địa chỉ như

Call 004xxxxxx thì các bạn làm ơn trace bằng F8 để vào xem cái hàm đó nó làm gì nếu không sẽ trace qua cái đoạn code cần tìm. Bạn trce bằng F10 đến khi gặp hàm [Kernel32!sleep], ngay bên dưới nó sẽ có một lệnh Call, trace bằng F8 vào lệnh call này bạn sẽ đến đoạn mã cần tìm tương ứng bên W32dasm.

lưu ý đối với những người mới cài và sử dụng SI:để set breakpoint cho các hàm API trong Kernek32.dll và User32.dll cần phải mở Winice.dat bằng Notepad và bỏ dấu ";" trước các lệnh sau

EXP=c:\windows\system\kernel32.dll

EXP=c:\windows\system\user32.dll

Rồi khởi động lại.

Trở lại với W32Dasm, nói chung nhiệm vụ của bạn là phải làm sao cho nó đừng nhảy tới chỗ

xor eax,eax mà lèo lái sao cho nó đến chỗ mov eax,00000001 thì soft sẽ đăng ký thành công, tất nhiên bạn có thể patch nhưng như vậy thì cũng phải sử cả chục cái lệnh nhảy chớ không ít đâu,bây giờ giả sử bạn đã nhập đủ 29 ký tự thì sẽ đến vị trí sau:

:00401E64 0FBE85FCFDFFFF movsx eax, byte ptr [ebp+FFFFFDFC]

:00401E6B 83C00A add eax, 0000000A cộng kt thứ 5 với A

:00401E6E 83F837 cmp eax, 00000037 so sánh với 37

:00401E71 7E07 jle 00401E7A nhảy nếu nhỏ hơn

:00401E73 33C0 xor eax, eax

:00401E75 E92C040000 jmp 004022A6

Bạn hãy nhớ byte ptr[ebp+FFFFFDF8] là ký tự đầu tiên, nên byte ptr [ebp+FFFFFDFC] là ký tự thứ 5

Bạn thấy đó dưới cái jle nó lăm lăm cái xor eax,eax chui vào đó là tiêu luôn, vạy nên ký tự của bạn có mã ASCII hệ 16 sau khi cộng với 5 phải <= 37, (kí tự thứ 5<=2D)

Bạn hãy dò đến các phần tiếp theo nó sẽ kiểm tra các ký tự thứ 10([ebp+FFFFFE01], ký tự thứ 15([ebp+FFFFFE06]) ký tự thứ 20... tất cả nó đều có điểm chung là phải nhỏ hơn hoặc bằng 2D hãy tìm đến vị trí tiếp theo:

:00401ED2 0FBE95FCFDFFFF movsx edx, byte ptr [ebp+FFFFFDFC] ký tụ thứ 5 vào edx

:00401ED9 0FBE8501FEFFFF movsx eax, byte ptr [ebp+FFFFFE01] ký tự thứ 10 vào eax

:00401EE0 3BD0 cmp edx, eax ktthứ 5 phải bằng kt thứ 10

:00401EE2 7572 jne 00401F56

:00401EE4 0FBE8DFCFDFFFF movsx ecx, byte ptr [ebp+FFFFFDFC] ký tự thứ 5 vào ecx

:00401EEB 0FBE9506FEFFFF movsx edx, byte ptr [ebp+FFFFFE06] ký tự thứ 20 edx

:00401EF2 3BCA cmp ecx, edx KTthứ 5 phải = KTthứ 20

:00401EF4 7560 jne 00401F56

:00401EF6 0FBE85FCFDFFFF movsx eax, byte ptr [ebp+FFFFFDFC] ký tự thứ 5

:00401EFD 0FBE8D10FEFFFF movsx ecx, byte ptr [ebp+FFFFFE10] ký tự thứ 25

:00401F04 3BC1 cmp eax, ecx

:00401F06 754E jne 00401F56

:00401F08 0FBE95FCFDFFFF movsx edx, byte ptr [ebp+FFFFFDFC]

:00401F0F 83FA2D cmp edx, 0000002D ký tự thứ 5 phải bằng 2D

:00401F12 7442 je 00401F56

như vậy bạn có thể hình dung sơ là số đăng ký sẽ như sau:XXXX-XXXX-XXXX-XXXX-XXXX

tiếp theo hãy tìm hiểu chỗ này:

:00401F56 0FBE85F8FDFFFF movsx eax, byte ptr [ebp+FFFFFDF8] ký tự thứ 1

:00401F5D 83F846 cmp eax, 00000046 so sánh với 46

:00401F60 7566 jne 00401FC8

:00401F62 0FBE8DF9FDFFFF movsx ecx, byte ptr [ebp+FFFFFDF9]

:00401F69 83F945 cmp ecx, 00000045

:00401F6C 755A jne 00401FC8

:00401F6E 0FBE95FAFDFFFF movsx edx, byte ptr [ebp+FFFFFDFA]

:00401F75 83FA46 cmp edx, 00000046

:00401F78 754E jne 00401FC8

:00401F7A 0FBE85FBFDFFFF movsx eax, byte ptr [ebp+FFFFFDFB]

:00401F81 83F845 cmp eax, 00000045

:00401F84 7542 jne 00401FC8

cái thằng soft này quả là lắm chuyện tôi chỉ có thể nói vắn tắt thế này các ký tự từ 1 đến 4 , kt 1 phải khác 46 hoặc kt2 phải khác 45 hặc kt3 khác 46.. Có nghĩa là phải làm cho 1 trong bốn lệnh nhảy trên nhảy nếu không sẽ đến cái chỗ xor eax,eax.

Tiếp theo sau khi nhảy sẽ đến đây:

:00401FC8 0FBE8DF8FDFFFF movsx ecx, byte ptr [ebp+FFFFFDF8]

:00401FCF 0FBE95FAFDFFFF movsx edx, byte ptr [ebp+FFFFFDFA]

:00401FD6 3BCA cmp ecx, edx

:00401FD8 0F858A000000 jne 00402068

:00401FDE 0FBE85F9FDFFFF movsx eax, byte ptr [ebp+FFFFFDF9]

:00401FE5 0FBE8DFBFDFFFF movsx ecx, byte ptr [ebp+FFFFFDFB]

:00401FEC 3BC1 cmp eax, ecx

:00401FEE 7578 jne 00402068

:00401FF0 0FBE9511FEFFFF movsx edx, byte ptr [ebp+FFFFFE11]

:00401FF7 0FBE8513FEFFFF movsx eax, byte ptr [ebp+FFFFFE13]

:00401FFE 3BD0 cmp edx, eax

:00402000 7566 jne 00402068

:00402002 0FBE8D12FEFFFF movsx ecx, byte ptr [ebp+FFFFFE12]

:00402009 0FBE9514FEFFFF movsx edx, byte ptr [ebp+FFFFFE14]

:00402010 3BCA cmp ecx, edx

:00402012 7554 jne 00402068

:00402014 0FBE85FEFDFFFF movsx eax, byte ptr [ebp+FFFFFDFE]

:0040201B 0FBE8DFFFDFFFF movsx ecx, byte ptr [ebp+FFFFFDFF]

:00402022 3BC1 cmp eax, ecx

:00402024 7542 jne 00402068

cũng như trên bạn phải làm cho nó nhảy một trong các lệnh nhảy này, không là ra cái nag, còn mấy cái kt trên là ký tự thứ mấy thì chắc là bạn cũng nắm được cách tính rồi phải không?

Đơn giản tôi lấy cái đầu tiên nó chuyển kt thứ nhất vào ecx và kt thứ 3 vào edx, và nó so edx với ecx vậy nếubạn muốn nó nhảy thì ký tự thứ nhất phải khác ký tự thứ 3.

Bây giờ đến chô tiếp

:00402068 0FBE9502FEFFFF movsx edx, byte ptr [ebp+FFFFFE02]

:0040206F 83FA74 cmp edx, 00000074

:00402072 755A jne 004020CE

:00402074 0FBE8503FEFFFF movsx eax, byte ptr [ebp+FFFFFE03]

:0040207B 83F853 cmp eax, 00000053

:0040207E 754E jne 004020CE

:00402080 0FBE8D04FEFFFF movsx ecx, byte ptr [ebp+FFFFFE04] kt thứ 12

:00402087 83F952 cmp ecx, 00000052

Đây nữa:

:00402126 0FBE85FDFDFFFF movsx eax, byte ptr [ebp+FFFFFDFD] kt thứ 5

:0040212D 83F854 cmp eax, 00000054

:00402130 7424 je 00402156

:00402132 0FBE8D02FEFFFF movsx ecx, byte ptr [ebp+FFFFFE02] kt thứ 10

:00402139 83F954 cmp ecx, 00000054

:0040213C 7418 je 00402156

:0040213E 0FBE9507FEFFFF movsx edx, byte ptr [ebp+FFFFFE07] kt thứ 15

:00402145 83FA54 cmp edx, 00000054

:00402148 740C je 00402156

:0040214A 0FBE850CFEFFFF movsx eax, byte ptr [ebp+FFFFFE0C]

:00402151 83F854 cmp eax, 00000054

:00402154 7542 jne 00402198

tuy nhiên chỗ này thì khác , mấy cái je mà nhảy là đến xor eax, eax vậy nên các ký tự phải thỏa điều kiện để không bằng cho đến chỗ jne 00402198

Hy vọng là bạn đã hiểu được cách thức , hãy làm sao cho nó nhảy qua chô xor eax,eax đến được chỗ này là bạn thành công:

:00402299 3BD0 cmp edx, eax

:0040229B EB04 jmp 004022A1

:0040229D 33C0 xor eax, eax

:0040229F EB05 jmp 004022A6

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

|:0040229B(U)

|

:004022A1 B801000000 mov eax, 00000001

để dễ cho các bạn tính toán tôi cho saün bảng như sau:

byte ptr [ebp+FFFFFDF8] kt thứ 1

byte ptr [ebp+FFFFFDF9] 2

byte ptr [ebp+FFFFFDFA] 3

byte ptr [ebp+FFFFFDFB] 4

byte ptr [ebp+FFFFFDFC] 5

byte ptr [ebp+FFFFFDFD] 6

byte ptr [ebp+FFFFFDFE] 7

byte ptr [ebp+FFFFFDFF] 8

byte ptr [ebp+FFFFFE00] 9

byte ptr [ebp+FFFFFE01] 10

byte ptr [ebp+FFFFFE02] 11

byte ptr [ebp+FFFFFE03] 12

byte ptr [ebp+FFFFFE04] 13

byte ptr [ebp+FFFFFE05] 14

byte ptr [ebp+FFFFFE06] 15

byte ptr [ebp+FFFFFE07] 16

byte ptr [ebp+FFFFFE08] 17

byte ptr [ebp+FFFFFE09] 18

byte ptr [ebp+FFFFFE0A] 19

byte ptr [ebp+FFFFFE0B] 20

byte ptr [ebp+FFFFFE0C] 21

byte ptr [ebp+FFFFFE0D] 22

byte ptr [ebp+FFFFFE0E] 23

byte ptr [ebp+FFFFFE0F] 24

byte ptr [ebp+FFFFFE10] 25

byte ptr [ebp+FFFFFE11] 26

byte ptr [ebp+FFFFFE12] 27

byte ptr [ebp+FFFFFE13] 28

byte ptr [ebp+FFFFFE14] 29

Ý tưởng của thuật toán này như sau:

kt1+kt2=kt3+kt4 và kt1!=kt3 ví dụ như: EFFE, FEEF, 2112..vv

Kt5=kt10=kt15=kt20=kt25="-"(2D hex) hay <=2D khi kt5!=kt20.

Kt6, kt7 có mã ASCII>=7

Kt7>=kt8

Kt16=kt18!=kt17

Mã ascii (Kt23)!=mã ascii (kt24)+1

Kt26+kt29=kt27+kt28.

Tôi cho bạn 1 key làm ví dụ: @||@-deUx-LOVE-EYES-MINH-@!@!

Copyright © 10-27-2003 by Deux.

Xem thêm

Xem ngày tháng

S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30