Показать сообщение отдельно

  #3  
Старый 01.06.2007, 20:41
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

В общем хочу процесс изнутри сдампить
Код:
 .386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib kernel32.lib
.data
szModulePath db 257 dup(?)
hHandle dword ?
hf_ dword ?
m7 dword ?
size_ dword ?
hdumped dword ?
address_ dword ?
error_ db "Cannot create file!",0
si_ dword ?
lpflOldProtect dword ?
hcom dword ?
REGION_ dword ?
CREATED_ db "Rewrite file?",0
open_error db "Cannot open file!",0
name_ db 300 dup (?)
concat_ db "\dumped_.exe",0
read_error db "Read file error!",0
size_headers dword ?
filter_ db "All EXEs",0
size_obraz dword ?
lpNumberOfBytesWritten dword ?
lpNumberOfBytesRead dword ?
title_ db "File To dump",0
.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
	mov  eax,TRUE
	.if m7!=7
	mov m7,7
	invoke GetModuleFileNameA,0,addr szModulePath,255
	invoke MessageBoxA,0,addr szModulePath,0,0
	.if eax!=0
	invoke GetModuleHandle,0
	.if eax!=0
	mov hHandle,eax
	invoke CreateFile,addr szModulePath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0
	.if eax==-1
	invoke MessageBoxA,0,offset open_error,0,16
	jmp ret_
	.endif
    mov hf_,eax
    invoke GetFileSize,hf_,0
    .if eax!=0
    mov size_,eax
    invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_READWRITE	
    mov address_,eax
    invoke ReadFile,hf_,address_, size_,addr lpNumberOfBytesRead,0
    mov edi,lpNumberOfBytesRead
    .if edi!=size_
    invoke MessageBoxA,0,offset read_error,0,16
    jmp free_
    .endif
    mov eax,address_
    cmp word ptr[eax],IMAGE_DOS_SIGNATURE ; ïðîâåðÿåì èñïîëíÿåìûé ëè ýòî ôàéë
    jnz free_
    add eax, 03ch
    mov esi, dword ptr [eax]
    sub esi, 03ch
    add eax, esi
    cmp dword ptr [eax],IMAGE_NT_SIGNATURE ; åñëè íå PE, òî âûõîäèì
    jnz free_
    assume	eax:ptr IMAGE_NT_HEADERS
    mov esi,[eax].OptionalHeader.SizeOfHeaders
    mov size_headers,esi
    mov esi,[eax].OptionalHeader.SizeOfImage
    sub esi, size_headers
    mov size_obraz,esi
    invoke GetCurrentDirectory,255,offset name_
    invoke lstrcat,offset name_,offset concat_
    invoke CreateFile,addr name_,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0
    .if eax!=-1
    pushad
   invoke MessageBox,0, addr CREATED_,0,MB_YESNO
   .if eax!=7 
   invoke CreateFile,addr name_,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_ALWAYS,0,0
   .if eax==-1
    invoke MessageBox,0, addr error_,0,16
    jmp free_
   .endif
   .endif
    mov hdumped,eax
    popad
    .endif
    .if eax==-1
    invoke CreateFile,addr name_,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_ALWAYS,0,0
    .if eax==-1
    invoke MessageBox,0, addr error_,0,16
    jmp free_
   .endif
    mov hdumped,eax
    .endif
    invoke WriteFile,hdumped,address_,size_headers,addr lpNumberOfBytesWritten,0	 
    free_:
    invoke VirtualFree,address_,size_,MEM_DECOMMIT	
    mov esi,hHandle
    add esi,size_headers
    pushad
    invoke VirtualAlloc,0,size_obraz,MEM_COMMIT,PAGE_READWRITE	
    mov REGION_,eax
    popad
    invoke VirtualProtectEx,-1,esi,size_obraz,PAGE_EXECUTE_READWRITE, addr lpflOldProtect 
    invoke ReadProcessMemory,-1,esi,REGION_,size_obraz,addr lpNumberOfBytesRead ; вот тут вылетает ошибка
    mov edi,lpNumberOfBytesRead
    .if edi==size_obraz
    invoke WriteFile,hdumped,REGION_,size_obraz,addr lpNumberOfBytesWritten,0
    .endif
    .endif
    invoke VirtualFree,REGION_,size_obraz,MEM_DECOMMIT
    invoke CloseHandle,hf_
    invoke CloseHandle,hdumped
	.endif
	.endif
	.endif
	ret_:
	ret
DllEntry Endp
End DllEntry
 
Ответить с цитированием