ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Ошибка Error_partial_copy при чтении памяти процесса (Ассемблер)
  #1  
Старый 01.06.2007, 19:44
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

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

Проблема такая. При чтении памяти процесса функцией ReadProcessMemory возникает ошибка ERROR_PARTIAL_COPY. Пробовал менять атрибуты защиты (VirtualProtectEx)- не помогло. На каком я зыку будет пример - особого значения не имеет. Мне бы концепцию понять.

Последний раз редактировалось 0x0c0de; 01.06.2007 в 20:32..
 
Ответить с цитированием

  #2  
Старый 01.06.2007, 20:37
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Сорс в студию. У меня проблем не было
 
Ответить с цитированием

  #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
 
Ответить с цитированием

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

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

Причем если отхватить кусочек памяти килобайта на три - прокатывает. А больше - нет.
 
Ответить с цитированием

  #5  
Старый 01.06.2007, 20:48
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

А смысл вызывать ReadProcessMemory для ТЕКУЩЕГО процесса? оО
 
Ответить с цитированием

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

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

Могу непосредственно внедритель продемонстрировать. Так лучше дампить... Изнутри самого процесса, предварительно заслав в него длл. Весь день сегодня просидел за этим

Последний раз редактировалось 0x0c0de; 01.06.2007 в 20:53..
 
Ответить с цитированием

  #7  
Старый 01.06.2007, 20:59
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

а rep mosvb не рулит? я никак не могу понять, в чем прикол читать таким раком память текущего процесса если можно напрямую =\
 
Ответить с цитированием

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

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

Процедура внедрения этой длл......
Код:
dump__ proc par__:dword
 local procEntry:PROCESSENTRY32
  local buffertool:dword 
  local bufferfirst:dword
  local  hProcess:dword
  LOCAL pNumberOfBytesRead:dword
  local written_:dword
  local szModulePath[256]:byte
  local lpflOldProtect:dword
invoke CreateToolhelp32Snapshot,2,0
mov buffertool, eax
mov procEntry.dwSize,500
invoke Process32First,buffertool, addr procEntry
mov bufferfirst, eax
  .if eax!=INVALID_HANDLE_VALUE 
    xor edi,edi 
    .while eax!=0 
    invoke Process32Next,buffertool,addr procEntry
    lea esi,procEntry
    pushad
    invoke lstrcmpiA,addr procEntry.szExeFile,par__
    .if eax==0
    mov esi,procEntry.th32ProcessID
    invoke OpenProcess,PROCESS_ALL_ACCESS,0,esi
    .if eax!=0
    mov  hProcess,eax
    jmp alloc_
    nachalo_shell:
    jmp metka1
    metka2:
    call metka3
    library_razbor: 
    mov edi,dword ptr[esp+4]  
    mov esi,dword ptr [esp+8] 
mov eax,dword ptr [edi+3Ch]
mov ebx,dword ptr[esp+4]
mov ebp,edi
mov edx,dword ptr [ebp+eax+78h]
add edx,ebp
mov ecx,dword ptr [edx+18h]
mov ebx,dword ptr [edx+20h]
add ebx,ebp
push esi
poka:
jecxz exit_from_proc 
dec ecx
xor esi,esi
mov esi,dword ptr [ebx+ecx*4h]
add esi,ebp
xor edi,edi
cld
cycl_:
xor eax,eax
lodsb 
cmp al,ah ; конец строки?
je null_symbol 
rol edi,0Ah ; хешируем 
add edi,eax
jmp cycl_
null_symbol:
cmp edi,dword ptr[esp] ; сравниваем хеши
jnz poka
mov ebx,dword ptr [edx+24h]
ADD EBX,EBP
mov cx,word ptr [ebx+ecx*2h]
mov ebx,dword ptr [edx+1Ch]
add ebx,ebp
mov eax,dword ptr [ebx+ecx*4h]
add eax,ebp
exit_from_proc:
pop esi
db 0c3h ; ret 
metka1:
call metka2
metka3:
pop edi
push edi
db 64h,0a1h,30h,00h,00h,00h ; у меня компилятор не скомпилил mov eax,fs:[30]
mov eax,dword ptr [eax+0ch]
mov esi,dword ptr[eax+1ch]
lodsd
mov edx,dword ptr [eax+8h]
push 5d217051h ; LoadLibraryA
push edx
call edi
jmp name_of_module
llibrary_:
pop edi
push edi
call eax
dead_loo:
jmp dead_loo ; в мертвый цикл...............
name_of_module:
call llibrary_ 
path:
db 258 dup(0)
    alloc_:
    invoke VirtualProtect,offset path,258,PAGE_EXECUTE_READWRITE,addr lpflOldProtect
    .if eax==0
    invoke MessageBoxA,0,offset error_protect,0,0
    jmp ret_
    .endif 
    invoke GetCurrentDirectory,255,offset path
    .if eax==0
    invoke MessageBoxA,0,offset error_dir,0,0
    jmp ret_
    .endif
    invoke lstrcat,offset path,offset sym_
    invoke lstrcat,offset path,offset dll_ ; составляем путь к библиотеке 
    mov edi,offset alloc_ 
    sub edi,offset nachalo_shell ; вычисляем размер внедряемого кода
    mov si_,edi
    pushad
    invoke VirtualAllocEx,hProcess,0,si_, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
    .if eax==0 ; выделилась ли память в процессе
    invoke MessageBoxA,0,offset error_alloc,0,0 
    jmp ret_
    .endif
    .if eax!=0
    mov addr_in_process_,eax
    invoke WriteProcessMemory,hProcess,addr_in_process_,offset nachalo_shell,si_,addr written_
    .if eax==0
    invoke MessageBoxA,0,offset error_write,0,0
    jmp ret_
    .endif
    invoke CreateRemoteThread,hProcess,0, 0,addr_in_process_,0, 0,0 
    .endif
    .endif 	
    jmp ret_
    .endif
    popad 
    .endw 
  .endif
  ret_: 
ret
dump__ endp
хотя не думаю что это суть важно. Уж не знаю что делать
 
Ответить с цитированием

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

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

Дык это ж длл для боевых условий. Как я прочитаю, если память недоступна? Причем у народа такая ошибка возникала и при чтении из другого процесса. И при записи. Как вариант был VirtualProtect, но не помогло.

Последний раз редактировалось 0x0c0de; 01.06.2007 в 21:07..
 
Ответить с цитированием

  #10  
Старый 01.06.2007, 21:10
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Как я прочитаю, если память недоступна?
VirtualProtect ? потом чтение через rep movsb. В упор не пойму зачем использовать readprocessmemory для текущего процесса
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки Windows 2 SVipeR Windows 9 02.03.2009 19:28
Bsod. [Причины/Решения] rijy Windows 15 23.04.2007 21:13
Jimm FAQ KPOT_f!nd ICQ 2 15.04.2007 14:48
Советы при работе с картами памяти alextoun Аппаратное обеспечение 0 12.03.2007 14:32
Моделирование программно-аппаратных ''реактивных'' систем раскрашенными сетями Петри bxN5 Чужие Статьи 1 09.03.2007 15:50



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ