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

Cracker Handbook 1.0 part 168 pot

6 126 1

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

THÔNG TIN TÀI LIỆU

Nội dung

Hảy kiểm tra tất cả các những chi tiết về hàm API mà tui nói ở đây trong win32.hlp nhé. Vì tui chỉ thảo luận vài điều quan trong cho loader của chúng ta mà thôi lpApplicationName là path + name của chương trình cần load. (eg c:\somedir\crackme.exe) lpCommandLine có thể sử dụng nếu bạn muốn thêm vài tham số dòng lệnh commandline cho "cái bia" mà chúng ta xử. dwCreationFlags thông số này rất quan trọng cho chúng ta , Vì chúng ta muốn tạm ngưng tiến trình sớm hơn nó đã được tải. Để thực hiện điều đó , chúng ta dùng hằng CREATE_SUSPENDED cho thông số này. lpStartupInfo trỏ vào cấu trúc thông tin khởi tạo (xem lại trong win32.hlp để có thêm chi tiết) lpProcessInformation Trỏ vào một cấu trúc rỗng sẽ được làm “đầy” khi "đích ngắm" được tải vào trong bộ nhớ. Cấu trúc này chứa "process handle"," thread handle" và process/thread ID. NOTE : Điều thuận lợi sử dụng process handle thay vì thread handle, là khi dùng process handle bạn có hằng PROCESS_ALL_ACCESS để ra vào đối tượng.Có nghĩa là chúng ta có thể đọc/ viết cho tòan bộ tiến trình. Còn khi dùng thread handle, bạn chỉ có thể viết vào khi phải thao tác bằng tay. Ok, Bây giờ đích ngắm của chúng ta đã được tải, Chúng ta có thể dễ dàng chạy/ tạm dừng 1 thread với các thông số hàm API's sau đây : Quote: DWORD ResumeThread( HANDLE hThread // identifies thread to restart ); Hảy chạy nó và: Quote: DWORD SuspendThread( HANDLE hThread // handle to the thread ); để dừng nó một lần nữa. Thông số hThread thì handle có thể tìm thấy trong cấu trúc LPPROCESS_INFORMATION . Cuối cùng , chúng ta có thể read và write từ tiến trình bới sử dụng các thông số hàm API's sau: Quote: BOOL WriteProcessMemory( HANDLE hProcess, // handle to process whose memory is written to LPVOID lpBaseAddress, // address to start writing to LPVOID lpBuffer, // pointer to buffer to write data to DWORD nSize, // number of bytes to write LPDWORD lpNumberOfBytesWritten // actual number of bytes written ); Ở đây, là một trích dẫn " hProcess handle" là một thành phần trong cấu trúc LPPROCESS_INFORMATION . Read từ một tiến trình : Quote: BOOL ReadProcessMemory( HANDLE hProcess, // handle of the process whose memory is read LPCVOID lpBaseAddress, // address to start reading LPVOID lpBuffer, // address of buffer to place read data DWORD nSize, // number of bytes to read LPDWORD lpNumberOfBytesRead // address of number of bytes read ); Những thông tin này sẽ ko đủ đề hiểu , hảy xem ví dụ sau: 3.VÍ DỤ VỀ LOADER: Trong ví dụ duới đây, tôi sẽ mở một file : museArc.exe và thay đổi giá trị địa chỉ 0040D24Fh từ 7Ch(lệnh JL) thành EBh(lệnh JUMP) (tham khảo thêm tut 3) Tôi sẽ cho chạy tiến trình trong 24 giờ (bạn muốn nhiều hơn tùy bạn), và rồi kết thúc tiến trình. Vì vậy ở dây chúng ta patch một byte đơn giản Quote: < Code Snippet > .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data FileName db "C:\Program Files\museArc\PROGRAM\museArc.exe",0 notloaded db "It did not work :-(",0 Letsgo db "The process is started",13,10, "Let's change smthg and run it now :-)",0 NewText db 7Dh Startup STARTUPINFO <> processinfo PROCESS_INFORMATION <> .data? hInstance HINSTANCE ? byteswritten dd ? uExitCode dd ? .code start: invoke GetModuleHandleA, NULL mov hInstance,eax ; Create a process and load museArc in it, and ; immediatly suspend the thread (pause it) invoke CreateProcess, ADDR FileName, NULL, NULL, NULL, NULL, CREATE_SUSPENDED,NULL, NULL, ADDR Startup, ADDR processinfo .IF eax == NULL ; Creation of new process failed? invoke MessageBox, NULL, ADDR notloaded, NULL, MB_ICONEXCLAMATION .ELSE invoke MessageBox, NULL, ADDR Letsgo, NULL, MB_OK ; Display Message ; I will change the byte in museArc used in ; addr 0040D24Fh invoke WriteProcessMemory, processinfo.hProcess, 0040D24Fh, ADDR NewText,1, byteswritten ; Let the process run happily ;) invoke ResumeThread, processinfo.hThread ;Hay cho tien trinh chay trong 24h và ngat no invoke Sleep, 86400000 invoke TerminateProcess, processinfo.hProcess, uExitCode .ENDIF invoke ExitProcess,eax end start < End Code Snippet > Ðó là tất cả những gì dể cài đặt một loader ;) Để các bạn newbie mới làm wen với MASM , tôi xin hướng dẫn sơ qua về cách biên dịch một chương trình asm Các bạn hảy bật Qedit.exe, copy đọan mã trên , paste vào Qedit. Biên dịch như sau: Vào menu Project lần lượt chọn : -Chọn Assemble ASM file -Chọn Link OBJ File -Chọn Assemble & Link -Run program Thế là xong. Chúc các bạn vui vẽ. Nếu các bạn ko hiểu thì hảy ignore Benina biên sọan USING “LOG WINDOW” IN OLLY TO CRACK A TIME TRIAL PROGRAM Vấn đề đặt ra là , trong SI thì dùng “Symbol Loader”, vậy trong Olly thì làm như thế nào?. Ko biết có ai có cách nào hay ko, nhưng tui dùng Log window trong Olly tương tự như Symbol Loader trong SI. Cách làm này hết sức đơn giản, thật ra ko cần post một bài như vầy. Nhưng vì tui là newbie ,nên tui nghĩ các bạn newbie cũng cần biết qua kỹ thuật này, còn các cao thủ xin mời đọc bài khác cho đỡ mất thời gian. Trước hết, các bạn nên đọc bài “Using “Symbol Loader” cracking a time trial program” rồi hả đọc “cua” này nhe các bạn. Tư tưởng ở đây cũng giống bài Symbol Loader. Nhưng trong Olly thì hình như ko có cái như Symbol Loader của SI (Nếu ai biết chỉ giúp).Vì vậy ta cần log những địa chỉ đã trace qua vào cửa sổ Log window trong Olly. Rồi save cửa sổ này thành 1 file txt. Thế là ta có 1 file log giống như SL của SI. Bước 1: set bp: bpx getsystemtime Bước 2: Chạy ard.exe =====> break Bước 3: Run script : Ở đây tui chỉ cho số chỉ thị khi trace lớn nhất khi log vào cửa sổ Log là : Max=100 Quote: Cat o day //============= //Script: Log addr EIP to Log Window //Limit counter: max=100 //Author: Benina //============= var x var y var max mov max,100 mov x,1 lb_loop: mov y,eip log y sto inc x cmp x,max jbe lb_loop ret//exit script cat den day Tôi chỉ post ở đây một script hết sức đơn giản , từ đó các bạn có thể chế biến ra nhieu srcipt hay hon. . Max = 10 0 Quote: Cat o day //============= //Script: Log addr EIP to Log Window //Limit counter: max = 10 0 //Author: Benina //============= var x var y var max mov max , 10 0 mov x ,1. ; I will change the byte in museArc used in ; addr 00 40D24Fh invoke WriteProcessMemory, processinfo.hProcess, 00 40D24Fh, ADDR NewText ,1, byteswritten ; Let the process run happily ;) invoke. FilesmuseArcPROGRAMmuseArc.exe" ,0 notloaded db "It did not work :-(" ,0 Letsgo db "The process is started" ,13 , 10 , "Let's change smthg and run it now :-)" ,0 NewText db 7Dh

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN