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

 eXeL@B —› Вопросы новичков —› Как узнать ImageBase процесса?
Посл.ответ Сообщение

Ранг: 39.0 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 11 января 2009 14:20
· Личное сообщение · #1

Появилась необходимость узнавать ImageBase ПРОЦЕССА. В файле узнать не проблема. А тут процесс
Желательно на делфи. Можно на С++.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 11 января 2009 14:48
· Личное сообщение · #2

Используя Debug API можно получить у Iczelion'а урок 28, правда на асме

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 11 января 2009 14:56 · Поправил: FrenFolio
· Личное сообщение · #3

Вот пример на C++. Функция возвращает хендл процесса, полученного по окну запущенного процесса.

Code:
  1. HANDLE OpenProc()
  2. {
  3.          DWORD ProcId = NULL;
  4.          HWND Wind = NULL;
  5.          HANDLE hProc = NULL;
  6.          if (FindWindow(NULL,"Fuck! Error!!!")) return NULL;
  7.          Wind = FindWindow(Pr_Class,Pr_Caption);
  8.          
  9.          if (!Wind) {
  10.                  MessageBox(mDlg,"Failed to find window!","Fuck! Error!!!",MB_OK|MB_ICONERROR);
  11.                  return NULL;
  12.          }
  13.          else {
  14.                   GetWindowThreadProcessId(Wind,&ProcId);
  15.                   if (!ProcId) {
  16.                          MessageBox(mDlg,"Failed to get PID","Fuck! Error!!!",MB_OK|MB_ICONERROR);
  17.                          return NULL;
  18.                   }
  19.                   else {
  20.                         hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcId);
  21.                         if (!hProc) {
  22.                               MessageBox(mDlg,"Failed to open process!","Fuck! Error!!!",MB_OK|MB_ICONERROR);
  23.                               return NULL;
  24.                         }
  25.                         else {
  26.                               return hProc;
  27.                         }
  28.                   }
  29.          }
  30. }


Виноват, не тонаписал. Это пример проги, получающий PID и хендл процесса, а тебе нужно получить Image Base. Тогда используй Debug API.

-----
Программист SkyNet




Ранг: 39.0 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 11 января 2009 15:05
· Личное сообщение · #4

coderess, асм, к сожалению, я знаю плохо

FrenFolio, вы меня, наверно, неправильно поняли. ID процесса мне не нужен. Мне нужен именно ImageBase. Тогда объясню для чего это мне. Я сделал дампер процессов. Ну понятно что дампить нужно начиная с адреса, равного ImageBase. Дампить ImageSize байт. Я не знаю как узнать ImageBase процесса. И поэтому дампер предполагает что он равен 00400000. Простовато...




Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 11 января 2009 15:49
· Личное сообщение · #5

Посмотри статью «Об упаковщиках в последний раз. Часть вторая» — там в 7-й главе как раз о дампере процессов написано:
www.cracklab.narod.ru/doc/wasm2.htm#7




Ранг: 106.9 (ветеран), 27thx
Активность: 0.080
Статус: Участник

Создано: 11 января 2009 18:03
· Личное сообщение · #6

SVIN95, а чем PETools провинился?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 11 января 2009 18:48 · Поправил: DillerInc
· Личное сообщение · #7

Товарищи,о чём вы говорите вообще?Какие Debug API?
Достаточно сходить на MSDN и почитать про функцию CreateToolHelp32Snapshot http://msdn.microsoft.com/en-us/library/ms686701(VS.85).aspx и как с помощью неё можно перебирать процессы,а также модули этих процессов.Тогда там можно будет получать и имена процессов/модулей и адреса загрузки модулей.
А Свину я бы сказал,что ему нужен ImageBase не процесса,а исполняемого файла,который запустил этот самый процесс.А это в свою очередь есть самый первый модуль в списке конкретного процесса.

Oott пишет:
SVIN95, а чем PETools провинился?

...это та ещё хрень.

-----
the Power of Reversing team





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

Создано: 11 января 2009 19:07
· Личное сообщение · #8

Постановка вопроса неправильная, у процесса нет ImageBase. В процесс грузится несколько модулей, у каждого ImageBase свой. Для перечисления модулей и информации о них есть достаточно апи, к примеру, toolhelp api. Тот же EnumModules.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 11 января 2009 20:31 · Поправил: coderess
· Личное сообщение · #9

Ну конечно так легче:CreateToolHelp32Snapshot->Module32First->Module32Next
Заполнит структуру:
Code:
  1. typedef struct tagMODULEENTRY32 {
  2. .......................
  3. <b>  BYTE *     modBaseAddr;</b>
  4.   DWORD     modBaseSize;
  5. .......................
  6. } MODULEENTRY32, 
  7.  *PMODULEENTRY32;


-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes



 eXeL@B —› Вопросы новичков —› Как узнать ImageBase процесса?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати