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
Trang 1The ReadProcessMemory function reads memory in a specified process The entire area to be read must be accessible, or the operation fails
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 );
Kiểm tra địa chỉ cần patch Nếu sai thì nhảy tới bước 4 Thông thường thì chúng ta sẽ cho thoát Và End process…
3 Ghi
The WriteProcessMemory function writes memory in a specified process The entire area to be written to must be accessible, or the operation fails
BOOL WriteProcessMemory(
Trang 2
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 );
Ghi giá trị cần đổi vào process
4 Load lại
The ResumeThread function decrements a thread's suspend count When the suspend count is decremented to zero, the execution of the thread is resumed
DWORD ResumeThread(
HANDLE hThread // identifies thread to restart
);
5 Thoát
Trang 3
The CloseHandle function closes an open object handle
BOOL CloseHandle(
HANDLE hObject // handle to object to close
);
Thoát
* Những điều trên có nghĩa là gì! Trông rắc rối nhưng thật sự dễ như ăn cháo vậy Nếu các bạn có học pascal sẽ được học kiểu files Chắc bạn cũng còn nhớ chúng ta
sẽ làm gì khi muốn tác động lên một tập tin mà chúng ta điều khiển từ pascal Thì
mở file, đọc file, ghi file và …biến Okie, PIM cũng tương tự như vậy Đầu tiên chúng ta sẽ tạo một process để làm việc (patch một chương trình) Sau đó chúng ta đọc xem cần patch chỗ nào! Sau đó sẽ ghi và thoát! Các bạn xem những dòng phân tích trong các hàm trên cần thiết để code cho đúng…
* Lâu quá không có patch nên hacnho chỉ tạm thời nhớ nhiêu đây thôi! Anh em cao thủ nào thấy thiếu hay sai thì làm ơn chỉ giùm! Okie bây giờ chúng ta thử crack cái crackme của lão Hoàng Cái này yêu cầu serial nhưng nó chỉ có một serial “ Le
Vu Hoang is a handsome boy :) )” Mục tiêu chúng ta là patch nó trên bộ nhớ Để thôi lão Hoàng bảo chúng ta crack tà đạo trên soft của lão ấy :d
II Thực hành
Trang 4
* Patch trên bộ nhớ thực sự hữu dụng khi các bạn không unpack được soft Dù cho
nó có pack lại thì chúng ta cũng chạy phẻ re Nhưng trong tut này, để dễ dàng cho người mới học, hacnho sẽ hướng dẫn các bạn patchmem với soft đã unpacked Các tut sau chúng ta sẽ thực hành trên soft packed
Mở khóa LVH Crackme Phần mềm: LVH crackme
Bảo vệ: Serial
Công cụ : - OllyDBG 1.09d, DZA patcherm, PEiD 0.91
- PeTools,Delphi 3.0 để code loader
Phương pháp crack: patch mem
Mức độ: ()Dễ ()Vừa (x)Hơi khó ()Rất khó
File cần crack: crackme.exe
Cracker: hacnho (hacnho_hva@yahoo.com)
Website: http://www.hvaonline.net
Tải crackme tại đây! http://nhandan.info/crackme.zip
Download loader: http://nhandan.info/hvaloader.zip
1 Unpack
Sau khi tải về, các bạn phải dùng PEiD detect nó Okie packed bằng UPX Chúng
ta dùng chức năng PE Editor của PE Tools (hoặc dùng Procdump cũng okie) để
Trang 5chỉnh sections của UPX 0 từ E0000080 thành E0000020 Sau đó load lên bằng OllyDBG (Nhớ config Olly bằng cách Alt+O -> đánh dấu chọn Stop at entry of seft-etractor và Use real entry from previous run) Bạn sẽ ở đây:
0060C840 > $ 60 PUSHAD
0060C841 BE 15A06000 MOV ESI,crackme.0060A015
0060C846 8DBE EB6FDFFF LEA EDI,DWORD PTR DS:[ESI+FFDF6FEB] 0060C84C 57 PUSH EDI
0060C84D 83CD FF OR EBP,FFFFFFFF
0060C850 EB 10 JMP SHORT crackme.0060C862
Cuộn màn hình disassembler xuống dưới cho tới khi bạn gặp những dòng sau:
0060C988 > FF96 44C02000 CALL DWORD PTR DS:[ESI+20C044]
0060C98E > 61 POPAD < Đặt breakpoint ở đây!
0060C98F -E9 6C46DFFF JMP crackme.00401000 < - Nhảy tới EP
Nhấn F2 tại 60C98E Nhấn F9 rồi nhấn F8 hai lần bạn sẽ ở đây!
00401000 C605 60744000 01 MOV BYTE PTR DS:[407460],1
00401007 E8 E8160000 CALL crackme.004026F4
0040100C C605 60744000 00 MOV BYTE PTR DS:[407460],0
Ngay tại địa chỉ của chương trình 401000 Bạn mở plugin OllyDump lên Do Olly
đã tìm sẵn cho ta OEP của chương trình bằng cách trừ 401000 cho 400000 nên ta khỏi mắc công trừ Bạn chọn dump debugged