Сейчас на форуме: UniSoft, _MBK_, laslo, bartolomeo (+7 невидимых)

 eXeL@B —› Программирование —› Dump программы и проблемы с ReadProcessMemory...
Посл.ответ Сообщение

Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 июля 2011 21:35 · Поправил: Модератор
· Личное сообщение · #1

Уважаемые форумчане добавил в свою программу (что то типо таск менеджер) такую опцию: dump вирт памятии процесса исходник в ссылке. Но проблема в том что когда открываю только что созданный exe- шник вывдодятся сообщения с крестом "запрос ReadProcessMemory или WriteProcessMemory был выполнен частично" а VirtualQueryEx тоже читает память частично только COMMIT регионы. Как запустить этот exe-шник и что надо делать для этого. Заранее спасибо.

ReadProcessMemory вызивается в функции CreateDump(), в конце файла.
От модератора: Пользуйся кнопкой "Правка", не создавай сообщения подряд.

a15a_05.07.2011_EXELAB.rU.tgz - Proc List 2Dlg.cpp




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 июля 2011 11:59
· Личное сообщение · #2

Т.е., не запускается только что сдампленный ехе-шник? Ну так ничего удивительного. А то если б всё было так просто!

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2011 16:59
· Личное сообщение · #3

Что надо делать что бы дамп запустилось, и что это за ошибка "запрос ReadProcessMemory или WriteProcessMemory был выполнен частично" вот листинг получения дампа

Code:
  1. BOOL WINAPI CProcList2Dlg::CreateDump(MEMORY_BASIC_INFORMATION lpBuffer)
  2. {        
  3.          TCHAR* newDir = new TCHAR [MAX_PATH];
  4. //       MEMORY_BASIC_INFORMATION lpBuffer;
  5. //       ZeroMemory( &lpBuffer, sizeof(lpBuffer));
  6.          newDir = TEXT("E:\ALgoritms\Proc List 2\Dumps\Process Dump.exe");
  7.          HANDLE hFile = NULL;
  8.          
  9.          int pid = GetPID();
  10.          HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,true,pid);
  11.  
  12.          HMODULE hModule = 0;
  13.          MODULEINFO modinfo;
  14.          memset(&modinfo,0,sizeof(MODULEINFO));
  15.          DWORD dwReaded = 0;
  16.          
  17.  
  18.          HANDLE hThread = CreateRemoteThread(hProcess, NULL,0,(LPTHREAD_START_ROUTINE)GetModuleHandle, NULL, 0, NULL);
  19.          WaitForSingleObject(hThread,INFINITE);
  20.          GetExitCodeThread(hThread, (LPDWORD)&hModule);
  21.          CloseHandle(hThread);
  22.  
  23.          LPDWORD lpNumberOfBytesWritten = 0;
  24.          LPDWORD lpDwBytesWrite = {0};
  25.          
  26.  
  27.          GetModuleInformation(hProcess,hModule,&modinfo,sizeof(MODULEINFO));
  28.          PBYTE pBuffer = new BYTE[modinfo.SizeOfImage];
  29.  
  30.          SIZE_T WINAPI vMap = VirtualQueryEx(hProcess, NULL, &lpBuffer, sizeof( MEMORY_BASIC_INFORMATION ));
  31.  
  32.          BOOL bProcMemRead = ReadProcessMemory(hProcess, modinfo.lpBaseOfDll, pBuffer, modinfo.SizeOfImage, &dwReaded);
  33. //       BOOL bProcMemRead = ReadProcessMemory(hProcess, lpBuffer.BaseAddress, pBuffer, modinfo.SizeOfImage, &dwReaded);
  34.          int err = GetLastError();
  35.          
  36.          if(bProcMemRead != 0)
  37.          {
  38.                  hFile = CreateFile(newDir,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
  39.                  if(hFile != NULL)
  40.                  {
  41.                         WaitForSingleObject(hFile, INFINITE);
  42.                         CFile cfile(hFile);
  43.                         cfile.Write(pBuffer, modinfo.SizeOfImage);
  44.                         CloseHandle(hFile);
  45.                         MessageBoxW(L"ОК <img src="http://exelab.ru/f/img/smilies/s1.gif" border="0" align="" alt="">)", L"Attention
  46.                  }
  47.                  else
  48.                  {
  49.                         MessageBoxW(L"Cannot create file", L"Attention",MB_OK);
  50.                         return FALSE;
  51.                  }
  52.          }
  53.          return 0;
  54. }




Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 06 июля 2011 18:26 · Поправил: tempread
· Личное сообщение · #4

graviton9 пишет:
Что надо делать что бы дамп запустилось


Перед тем как программно это делать самому, прочти теорию,и сделай хотя бы один раз с помощью существующих инструментов. Запакуй любой экзешник пакером upx, и распакуй вручную - статей по ручной распаковке upx много. Поймешь методику - тогда делай то же самое програмно,уже сам будешь понимать какой порядк действий нужен,что бы "дамп запустилось".



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2011 19:38 · Поправил: graviton9
· Личное сообщение · #5

tempread --------[t][/t]Согласен, даже более того я делал dump файлов PETools и LordPe тулзами, много раз распоковал, проходил по курсу Нарвахи, теперь надо что то свое вот написал. Делая дамп моей программой даже ребуилдил PEtools -ом все ровно не открывается. Просто я хочу наверняка знать "запрос ReadProcessMemory или WriteProcessMemory был выполнен частично" это ошибка следствие невернего PE заголовка или что-то я не учел в своем коде то есть код надо дописать. Да совсем забыл Какие мануалы и статьи посоветуйте на эту тему ? спасибо



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 06 июля 2011 19:45
· Личное сообщение · #6

graviton9 пишет:
...это ошибка следствие невернего PE заголовка или что-то я не учел в своем коде то есть код надо дописать.

ежели не изменяет память, то этот косяк связан с неверным размером секции




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 06 июля 2011 20:19
· Личное сообщение · #7

От неверного размера секций он скорее всего будет не win32-файл, так пожалуется загрузчик. А такая ошибка скорее от корявых директорий, импорта, в частности. А вообще лучше бы выложил файл оригинальный и дампленый.
З.Ы. И в общем случае в чистом виде дамп вообще работать и не должен, читай любую статью по распаковке, где надо ещё восстанавливать как минимум импорт. Иногда релоки и что-нибудь ещё.



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2011 20:53 · Поправил: graviton9
· Личное сообщение · #8

вот сдампил notepad exe-шники в ссылках

028d_06.07.2011_EXELAB.rU.tgz - notepad.exe



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 июля 2011 20:55
· Личное сообщение · #9

а вот собственно и dump

b381_06.07.2011_EXELAB.rU.tgz - Process Dump.exe




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 06 июля 2011 21:33
· Личное сообщение · #10

У меня не ругается, но падает при выполнении. У тебя косяк в том, что все RAW параметры надо сравнять с Virtual в заголовках секций.



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2011 08:25
· Личное сообщение · #11

Вот что сделал. Открыл LordPE->ПеЕдитор обычный exe-шник а потом compare с дампом- там не совпадает только один параметр filesize. Как это исправить ? Вот скрин

69db_07.07.2011_EXELAB.rU.tgz - Безымянный.JPG




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 июля 2011 09:21
· Личное сообщение · #12

Никак. Я уже сказал, что надо исправить.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 июля 2011 09:56 · Поправил: PE_Kill
· Личное сообщение · #13

notepad вполне может работать после дампа, т.к. там thunk's все заполнены в импорте. Проблема в том, что ТС понятие не имеет, что делают тулзы которыми он ручной метод делал, и стало быть аналог и не может написать.

-----
Yann Tiersen best and do not fuck





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 07 июля 2011 10:29
· Личное сообщение · #14

Archer пишет:
У тебя косяк в том, что все RAW параметры надо сравнять с Virtual в заголовках секций.

graviton9
В Pe tools есть опция DumpFixer.
Вот тут:
--> MiniDumper<--
пример реализации, смотрите, наслаждайтесь.

-----
Stuck to the plan, always think that we would stand up, never ran.


| Сообщение посчитали полезным: graviton9

Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2011 13:26
· Личное сообщение · #15

ARCHANGEL---RESPECT за исходники и не только, честно большое спасибо, сам искал что то в этом роде




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 07 июля 2011 13:30
· Личное сообщение · #16

graviton9
Но оговорюсь, что сдампленные файлы будут работать (гарантированно) только в том случае, если вы дампите на ОЕР или рядом, для незапакованных - на ЕР, но не вижу в этом смысла, если нету всяких антидампов, которые надо восстанавливать... Короче, ещё много всяких если, но если всё соблюдать, то это работает.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2011 15:52 · Поправил: graviton9
· Личное сообщение · #17

ARCHANGEL---"сдампленные файлы будут работать (гарантированно) только в том случае, если вы дампите на ОЕР или рядом" но ведь это можно знать наверняка только в том случае эсли процесс (прогрмма) загружен в отладчик, то есть если взять какой нить процесс который не загружен в отладчик не возможно сказать где находится регистер eip его первичнoго потока оно может находится где угодно но не в oep. Значит ли это что надо загрузить программу в отладчик стоять на original ep потом уж сдампить то есть делать дамп своей программой !(не плагином отладчика !) ?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 07 июля 2011 16:12
· Личное сообщение · #18

graviton9
Что-то я не пойму ваших целей. Зачем вам дамп программ?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2011 16:19 · Поправил: graviton9
· Личное сообщение · #19

Что бы превратить эго что то типо так сказать в клонера программ "clone porgramm (process)"ну для забавы ) и потом делая такие проекты можно многому научится (это понятно что у программ еще и dll -ки собственные)



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 07 июля 2011 17:05
· Личное сообщение · #20

Клонер!? Не, не слышали. Нужно преследовать какую-то осмыслённую цель xDDD Может будет проще использовать CopyFile? )))




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 08 июля 2011 06:18 · Поправил: ARCHANGEL
· Личное сообщение · #21

graviton9
Вы уж не обижайтесь на меня - на старого больного человека, но мелете вы какую-то ерунду. А в случае ерунды я вам помочь ничем не могу. Почитайте статьи и посмотрите, для чего и как применяются дампы.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 08 июля 2011 07:30
· Личное сообщение · #22

Я же написал, что ТС понятие не имеет что хочет, поэтому тут советы бессмысленны. Идея - утопия.

-----
Yann Tiersen best and do not fuck




Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2011 08:21
· Личное сообщение · #23

Всем спасибо может я не точно сформулировал свои мысли не имеет значения вы все мне очень помогли, большое спасибо всем и особенно ARCHANGEL


 eXeL@B —› Программирование —› Dump программы и проблемы с ReadProcessMemory...
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати