Cracking part 24

Chia sẻ: Dqwdasdasd Qwdasdasdasd | Ngày: | Loại File: PDF | Số trang:6

0
29
lượt xem
4
download

Cracking part 24

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

WM_CREATE message sẽ xuất hiện mỗi khi chương trình yêu cầu window được tạo bằng hàm CreateWindowEx hoặc CreateWindow. Window procedure của new window nhận message này sau khi window được tạo , nhưng trước khi window trở nên visible. Hàm này được gởi trước khi hàm CreateWindowEx hoặc CreateWindow return.

Chủ đề:
Lưu

Nội dung Text: Cracking part 24

  1. wNotifyCode = HIWORD(wParam); // notification code wID = LOWORD(wParam); // item, control, or accelerator identifier hwndCtl = (HWND) lParam; // handle of control Returns Nếu chương trình chấp nhận message này, giá trị trả về là 0. WM_CREATE WM_CREATE message sẽ xuất hiện mỗi khi chương trình yêu cầu window được tạo bằng hàm CreateWindowEx hoặc CreateWindow. Window procedure của new window nhận message này sau khi window được tạo , nhưng trước khi window trở nên visible. Hàm này được gởi trước khi hàm CreateWindowEx hoặc CreateWindow return. Code: lpcs = (LPCREATESTRUCT) lParam; // structure with creation data Returns Nếu chương trình chấp nhận message này, giá trị trả về là 0 để tiếp tục tạo window. Nếu chương trình trả về -1, window sẽ bị hủy và hàm CreateWindowEx hoặc CreateWindow trả về NULL handle. WM_DESTROY WM_DESTROY message sẽ xuất hiện khi window bị hủy. Nó được gởi đến window procedure của window sau khi window bị remove khỏi màn hình. Returns Nếu chương trình chấp nhận message này, giá trị trả về là 0. WM_GETTEXT Chương trình sẽ gởi WM_GETTEXT message để copy text phù hợp với window vào buffer dự phòng Code: wParam = (WPARAM) cchTextMax; // number of characters to copy lParam = (LPARAM) lpszText; // address of buffer for text Returns Giá trị trả về là số kí tự được copy WM_GETTEXTLENGTH Chương trình gởi WM_GETTEXTLENGTH message để xác định chiều dài của text kết hợp với window. Code: wParam = 0; // not used; must be zero lParam = 0; // not used; must be zero Returns Giá trị trả về là chiều dài của text WM_INITDIALOG
  2. WM_INITDIALOG message được gởi đến dialog box trước khi dialog box được display. Dialog box đặc trưng sử dụng message này khởi chạy control và carry out những task khởi tạo ảnh hưởng đến sự xuất hiện của dialog box. Code: hwndFocus = (HWND) wParam; // handle of control to receive focus lInitParam = lParam; // initialization parameter Returns Dialog box trả về TRUE để chỉ đạo Windows đặt keyboard focus vào control được đưa ra bởi hwndFocus. Ngược lại, nó sẽ trả về FALSE để ngăn chặn Windows từ setting keyboard focus mặc định. WM_LBUTTONDBLCLK WM_LBUTTONDBLCLK message sẽ xuất hiện khi người dùng double click chuột trái khi con trỏ đang nằm trong khu vực client của window. Nếu “con chuột” không được capture , message sẽ xuất hiện ở phía dưới con trỏ. Ngược lại message sẽ xuất hiện ở window đã capture “con chuột” Code: fwKeys = wParam; // key flags xPos = LOWORD(lParam); // horizontal position of cursor yPos = HIWORD(lParam); // vertical position of cursor Returns Nếu chương trình chấp nhận message này, giá trị trả về là 0. WM_LBUTTONDOWN WM_LBUTTONDOWN message sẽ xuất hiện khi người dùng nhấn chuột trái khi con trỏ đang nằm trong khu vực client của window. Nếu “con chuột” không được capture , message sẽ xuất hiện ở phía dưới con trỏ. Ngược lại message sẽ xuất hiện ở window đã capture “con chuột” Code: fwKeys = wParam; // key flags xPos = LOWORD(lParam); // horizontal position of cursor yPos = HIWORD(lParam); // vertical position of cursor Returns Nếu chương trình chấp nhận message này, giá trị trả về là 0. WM_LBUTTONUP WM_LBUTTONUP message sẽ xuất hiện khi người dùng “nhả” chuột trái khi con trỏ đang nằm trong khu vực client của window. Nếu “con chuột” không được capture , message sẽ xuất hiện ở phía dưới con trỏ. Ngược lại message sẽ xuất hiện ở window đã capture “con chuột” Code: fwKeys = wParam; // key flags xPos = LOWORD(lParam); // horizontal position of cursor
  3. yPos = HIWORD(lParam); // vertical position of cursor Returns Nếu chương trình chấp nhận message này, giá trị trả về là 0. WM_QUIT WM_QUIT message cho biết yêu cầu để kết thúc 1 ứng dụng và được sinh ra khi chương trình gọi hàm PostQuitMessage. Nó làm cho hàm GetMessage trả về 0. Code: nExitCode = (int) wParam; // exit code Returns Message này không có giá trị trả về The_lighthouse (http://www.reaonline.net) Cracking MD5Hash Quote: Homepage : http://www.xrlly.com Production : xrlly software. SoftWare : Arial CD Ripper 1.3.80 Copyright by : Copyright © 2004 xrlly software. All Rights Reserved. Type : Name / Serial Packed : N/A Language : Borland Delphi 6.0 - 7.0 Crack Tool : OllyDbg 1.09d, PEiD 0.92, kWdsm 10 Unpack : N/A Request : Correct Serial / KeyGen ---------------------------------------------------------------------------------------------------------- I – Information : - Chương trình này chủ yếu Em hướng dẫn các bác cách tìm và crack một chương trình sử dụng MD5Hash . - Trước hết, như thường lệ ta sẽ dùng PeiD để kiểm tra các thuật toán của SOFT . Trong SOFT này, ta thấy có sử dụng thuật toán MD5 và một số các thuật toán khác . Ta chú ý đến 2 dòng địa chỉ của thuật toán MD5 . - Vì không thể biết được dòng nào là chính, nên ta lấy cả 2 địa chỉ này,. - Đầu tiên ta lấy địa chỉ bên dưới : 005678A7 . Dùng Olly chuyển đến địa chỉ này, dò ngược lên trên, ta thấy đoạn này bắt đầu Code: từ :
  4. 00567848 /$ 53 PUSH EBX đến 00567F75 |. 5B POP EBX trong khoảng này ta thấy chương trình sử dụng nhiều Function lập đi lập lại, chỉ có các tham số đầu vào là thay đổi, chẳng hạn như Function đầu tiên : Code: 0056789E |. 50 PUSH EAX ; /Arg4 0056789F |. 8B4424 1C MOV EAX,DWORD PTR SS:[ESP+1C] ;| 005678A3 |. 50 PUSH EAX ; |Arg3 005678A4 |. 6A 07 PUSH 7 ; |Arg2 = 00000007 005678A6 |. 68 78A46AD7 PUSH D76AA478 ; |Arg1 = D76AA478 005678AB |. 8BC3 MOV EAX,EBX ;| 005678AD |. 8B0F MOV ECX,DWORD PTR DS:[EDI] ;| 005678AF |. 8B16 MOV EDX,DWORD PTR DS:[ESI] ;| 005678B1 |. E8 4EFEFFFF CALL Arial_CD.00567704 ; \Arial_CD.00567704 So sánh với Source code của thuật toán MD5 : Code: P( A, B, C, D, 0, 7, 0xD76AA478 ); Ta thấy là hoán toàn như nhau . Đây chính là Funtion MD5Finish của thuật toán MD5 . Ta dò ngược xuống đến gần cuối và đặt BP tại lệnh CALL cuối cùng : Code: 00567F46 |. E8 55F8FFFF CALL Arial_CD.005677A0 ; \Arial_CD.005677A0 Đồng thời ở bên dưới này ta thấy đoạn Function : Code: 00567F78 /$ C700 01234567 MOV DWORD PTR DS:[EAX],67452301 00567F7E |. C740 04 89ABC>MOV DWORD PTR DS:[EAX+4],EFCDAB89 00567F85 |. C740 08 FEDCB>MOV DWORD PTR DS:[EAX+8],98BADCFE 00567F8C |. C740 0C 76543>MOV DWORD PTR DS:[EAX+C],10325476 Ta xem lại thuật toán MD5 : Code: ctx->state[0] = 0x67452301; ctx->state[1] = 0xEFCDAB89; ctx->state[2] = 0x98BADCFE; ctx->state[3] = 0x10325476; Đây chính là MD5Start hay MD5Init Đây chính là mấu chốt, vì đa số các SOFT hay CrackMe dùng MD5, SHA... nếu có thay đổi, thì tập trung thay đổi ở đây .
  5. - Ngoài ra, mã hoá MD5 còn một thông số nữa ta cần quan tâm, nhưng không thể tìm ngay từ ban đầu, đó là MD5Update . Thông tin này rất quan trọng, vì chính ở đây ta sẽ biết được chuỗi thực mà chương trình đem đi mã hoá . Trong hầu hết các trường hợp, nếu ta lấy được thông tin về chiều dài chuỗi đưa vào trong quá trình này thì ta sẽ biết ngay được chuỗi đem đi có bị biến đổi về chìeu dài hay không ( thêm hay bớt chuỗi ) . Và sau đó có thể biết thêm chuỗi có bị biến đổi thêm gì không ( UpperCase hay LowerCase .. ) . Đa số các trường hợp, quá trình này diễn ra bên ngoài, trực tiếp hay thông qua một Function nào đó . Còn phức tạp hơn, CODER có thể sử dụng trong chính đoạn code này để thêm thắt các thông tin mã hoá . - Hầu hết các trường hợp mã hoá MD5 bị biến đổi tập trung vào MD5Start hay MD5Init và MD5Update ( thêm thông tin ), chứ hiếm khi MD5Finish bị biến đổi ( tôi chỉ mới gặp có một lần duy nhất ) . - Vì thế, để crack một chương trình mã hoá bằng MD5 hay SHA ... điều cần biết là phải ghi nhớ được chuỗi MD5 hay SHA ... của tên mình sử dụng để CRACKING là gì, từ đó quá trình theo dõi sẽ đơn giản hơn . - Ví dụ, đối với User : Moonbaby thì có MD5 : DC4ED14643DEE0B5249784B4DC4A652D . Khi biết được đây là một đoạn mã hoá MD5, đầu tiên, ta chỉ cần trace qua, nếu chuỗi cho ra là đúng như chuỗi gốc của mình, thì ko cần quan tâm đến quá trình mã hoá MD5 làm gì . Nếu có sự khác biệt thì làm theo các bước sau : (1) kiểm tra MD5Start hay MD5Init có bị thay đổi không, (2) hay kiểm tra chuỗi sử dụng trong MD5Update là gì , (3) và cuối cùng mới xem đến trong quá trình MD5Finish có bị thay đổi hay không . II – Cracking : - Như đã nói ở trên, ta dùng thông tin MD5 cuối cùng trong PeiD để kiểm tra . Sau khi nhảy đến đoạn này và đặt BP tại lệnh CALL cuối cùng như đã nói ở trên, ta chạy chương trình và nhập vào U/S .Nhấn Oki và ta thấy chương trình dừng lại tại BP này . Code: 00567F46 |. E8 55F8FFFF CALL Arial_CD.005677A0 ; \Arial_CD.005677A0 - Trace tiếp và ta đến : Code: 00567F51 |. 0110 ADD DWORD PTR DS:[EAX],EDX ;
  6.  
Đồng bộ tài khoản