Cracking part 31

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

0
50
lượt xem
4
download

Cracking part 31

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

Phương pháp này dựa trên hàm api FindWindow của hệ thống. Như ta biết, các cửa sổ của Ollydbg đều có caption và classname. Vì thế ta sẽ cố tìm xem tại thời điểm hiện tại chương trình OllyDbg có được chạy hay không. Hàm FindWindow : trả về handle của cửa sổ chứa class name và window name phù hợp với chuỗi nhập vào, lưu ý là hàm này không tìm trong cửa sổ con.

Chủ đề:
Lưu

Nội dung Text: Cracking part 31

  1. tìm ra được một số cách khác khá hữu hiệu, và hi vọng với bài viết này các bạn sẽ có thể sử dụng, cũng như phát triển kĩ thuật này nhuần nhuyễn hơn. Cách I: FindWindow: Phương pháp này dựa trên hàm api FindWindow của hệ thống. Như ta biết, các cửa sổ của Ollydbg đều có caption và classname. Vì thế ta sẽ cố tìm xem tại thời điểm hiện tại chương trình OllyDbg có được chạy hay không. Hàm FindWindow : trả về handle của cửa sổ chứa class name và window name phù hợp với chuỗi nhập vào, lưu ý là hàm này không tìm trong cửa sổ con. Cấu trúc hàm: Quote: HWND FindWindow( LPCTSTR lpClassName, // address of class name LPCTSTR lpWindowName // address of window name ); Tham số: lpClassName: chứa tên của class name. lpWindowName: chứa tên của cửa sổ, nếu tham số này là NULL thì có nghĩa là chấp nhận mọi window names (caption). Giá trị trả về: là EAX=0 nếu không tìm ra Đoạn code: Code: .data strOllyClsName db "OLLYDBG",0 .code invoke FindWindow, ADDR strOllyClsName, NULL cmp eax, 00000000h jne Olly_Detected Cách II: CreateToolhelp32Snapshot, Process32First/Next: Cách thức sử dụng: 1. Sử dụng GetCurrentProcessId để lấy processId hiện tại của chương trình.
  2. 2. Tạo một vòng lặp của hàm CreateToolhelp32Snapshot và Process32First/Next , so sánh mọi giá trị th32ProcessID trong cấu trúc PROCESSENTRY32 với giá trị processid mà ta đã lấy từ bước 1 cho tới khi nào tìm ra. 3. Khi đó, lấy giá trị th32ParentProcessID của cấu trúc PROCESSENTRY32 hiện tại. 4. Lại tạo một vòng lặp của hàm CreateToolhelp32Snapshot và Process32First/Next , so sánh mọi giá trị th32ProcessID trong cấu trúc PROCESSENTRY32 với giá trị th32ParentProcessID mà ta đã lấy từ bước 3 cho tới khi nào tìm ra. 5. Lấy giá trị szExeFile của cấu trúc PROCESSENTRY32 hiện tại và kiểm tra xem nó có phải là "Ollydbg.exe" 6. Nếu có thì có nghĩa là chương trình hiện tại đang bị debug bởi Olly :D Đoạn code: Code: .586 .model flat, stdcall option casemap:none include d:\masm32\INCLUDE\Windows.inc include d:\masm32\INCLUDE\user32.inc include d:\masm32\INCLUDE\kernel32.inc includelib d:\masm32\lib\user32.lib includelib d:\masm32\lib\kernel32.lib .data strCaption db "OllyDbg Detector!",0 strFound db "OllyDbg found!",0 strNotFound db "OllyDbg NOT found!",0 strOllyDbg db "OLLYDBG.EXE",0h valCurrentPiD dd 0 valParentPiD dd 0 hSnapShot dd 0 .data? proces PROCESSENTRY32 .code
  3. start: ; Create the snapshot invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS,NULL mov hSnapShot,eax ;Get the ProcessId of the Current Process invoke GetCurrentProcessId mov valCurrentPiD,eax lea esi,offset proces assume esi:ptr PROCESSENTRY32 mov [esi].dwSize,sizeof PROCESSENTRY32 ;Begin the first Loop and find the current process ;using the valCurrentPiD invoke Process32First,hSnapShot,addr proces lea esi,offset proces assume esi:ptr PROCESSENTRY32 mov ebx,valCurrentPiD cmp ebx,[esi].th32ProcessID jne nope1 nope1: invoke Process32Next,hSnapShot,addr proces lea esi,offset proces assume esi:ptr PROCESSENTRY32 mov ebx,valCurrentPiD cmp ebx,[esi].th32ProcessID jne nope1
  4. push [esi].th32ParentProcessID pop valParentPiD invoke CloseHandle,hSnapShot ; Create the snapshot again invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS,NULL mov hSnapShot,eax mov [esi].dwSize,sizeof PROCESSENTRY32 ; Begin the second Loop and find the parent ; process using the valParentPiD invoke Process32First,hSnapShot,addr proces lea esi,offset proces assume esi:ptr PROCESSENTRY32 mov ebx,valParentPiD cmp ebx,[esi].th32ProcessID jne nope2 nope2: invoke Process32Next,hSnapShot,addr proces lea esi,offset proces assume esi:ptr PROCESSENTRY32 mov ebx,valParentPiD cmp ebx,[esi].th32ProcessID jne nope2 ; Extract filename of the Parent Process from the whole string lea eax, [esi].szExeFile push eax
  5. invoke lstrlen,eax sub eax,11 pop ebx add ebx,eax ; Case Upper the string and compare it with "OLLYDBG.EXE" invoke CharUpper,ebx invoke lstrcmp,ebx,addr strOllyDbg .IF eax==0 invoke MessageBox,0,addr strFound,addr strCaption,0 .ELSE invoke MessageBox,0,addr strNotFound,addr strCaption,0 .ENDIF invoke CloseHandle,hSnapShot invoke ExitProcess,0 end start Cách III: SetUnhandledExceptionFilter Chức năng của hàm SetUnhandledExceptionFilter: Cho phép chương trình ngăn chặn việc xử lí lỗi ngoại lệ mặc định của hệ thống. Sau khi gọi hàm này, nếu có lỗi ngoại lệ phát sinh trong chương trình không bị debug , thì việc xử lí lỗi sẽ được chuyển giao cho bộ quản lí lỗi đã được chỉ định ở trên bởi thông số lpTopLevelExceptionFilter của hàm. Ý tưởng của phương pháp này là ta sẽ tạo một bộ quản lý lỗi ngoại lệ bằng hàm SetUnhandledExceptionFilter. Sau đó ta sẽ cố tình phát sinh một lỗi bất thường trong chương trình, khi đó, nếu chương trình đang bị debug thì lỗi này sẽ o được chuyển giao cho bộ quản lí lỗi đã được chỉ định ở trên. Khi ấy, debugger sẽ không biết phải làm gì và dẫn tới crash chương trình. Chương trình o bị debug thì mọi thứ diễn ra bình thường.Điều này có nghĩa là, khi ấy, chương trình sẽ gọi bộ quản lí lỗi, xử lí lỗi phát sinh và chuyển tới đoạn lệnh kế tiếp. Trình tự thực hiện: 1. Thiết lập bộ xử lí lỗi ngoại lệ bằng cách dùng hàm api SetUnhandledExceptionFilter  
Đồng bộ tài khoản