Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Как в коде получить Entry Point
Посл.ответ Сообщение

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

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

Как в с++ , а возможно и асм вставкой ,узнать точку входа типа 00410010 в программу и адрес списка машинных команд в хексе такой как в винхексе типа 00000653 с которого начинают идти нужные команды?
вот на картинке в атаче точнно что мне надо
чтоб скажем я скармливаю ему екзешку ввожу нужный машинный код а он мне говорит их адрес в файле , и чтоб екзешку скармливая он мне говорил ее ентри поинт

8886_03.04.2011_EXELAB.rU.tgz - Безымянный.jpg




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 03 апреля 2011 21:06
· Личное сообщение · #2

Читай маны по ПЕ, получить address of entry point просто.

-----
Лучше быть одиноким, но свободным © $me




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 03 апреля 2011 21:07
· Личное сообщение · #3

немного не подходящие вопросы для этого форума.
сходите лучше на форумы по программированию



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

Создано: 03 апреля 2011 21:07 · Поправил: Модератор
· Личное сообщение · #4

я в них ничего непонимаю =(
к вам обратился потомучто вы знакомы с такими программами и как они работают



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 03 апреля 2011 21:12
· Личное сообщение · #5

вам что надо, чтобы прогу написали вместо вас?
BoRoV выше уже сказал - читайте как работать с PE-заголовком, чтобы получить информацию об EntryPoint
ну а насчёт поиска байт в файле - тут вообще не знаю что ответить




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

Создано: 03 апреля 2011 21:38
· Личное сообщение · #6

Я не жадный
Code:
  1. int PEScan(char *pszFileName)
  2. {
  3.          
  4.          hFile = CreateFile(pszFileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  5.          if (hFile == INVALID_HANDLE_VALUE)
  6.          {
  7.                  MessageBox(0, "Could not open file!", "Error", 0);
  8.                  return(0);
  9.          }
  10.  
  11.          hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY       , 0,0,0);
  12.          if (hMapFile == NULL)
  13.          {
  14.                  MessageBox(0, "Could not create file map!", "Error", 0);
  15.                  return(0);
  16.          }
  17.          
  18.          pMapFile = (PDWORD)MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 0);
  19.          if (hMapFile == NULL)
  20.          {
  21.                  MessageBox(0, "Could not mapped file! ", "Error", 0);
  22.                  return(0);
  23.          }
  24.  
  25.          pdos_hdr = PIMAGE_DOS_HEADER(pMapFile);
  26.  
  27.          pnt  = PIMAGE_NT_HEADERS((DWORD)pMapFile + (PIMAGE_DOS_HEADER)(DWORD)pdos->e_lfanew);
  28.  
  29.          DWORD ImageBase = pnt->OptionalHeader.ImageBase;
  30.          DWORD EP = pnt->OptionalHeader.AddressOfEntryPoint;
  31. // ...
  32.               return EP;
  33. }


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


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

Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 03 апреля 2011 22:12
· Личное сообщение · #7

я тоже не жадный, но ТС таким способом абсолютно ничему не научится
тем более вы забыли выложить бинарный поиск по файлу, так что незачёт



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

Создано: 03 апреля 2011 22:34
· Личное сообщение · #8

спасибо огромное, Coderess!
tihiy_grom , я не прошу дать мне полный готовый код,просто некую помощь,хотябы сказать где хранится покакому адресу этот самый энтри поинт в проге онаж както его находит сама из заголовка ПЕ...или я неправ?




Ранг: 95.2 (постоянный), 26thx
Активность: 0.060
Статус: Участник

Создано: 03 апреля 2011 22:39
· Личное сообщение · #9

тебе лень посмотреть мануал по PE ? там же все четко написано, займет намного меньше времени чем постить тут на форуме.



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

Создано: 03 апреля 2011 23:28
· Личное сообщение · #10

Подскажите какова типа должна быть переменная pdos в выше приведенном исходнике в конце 27 строки,
точнее как ее объявить перед этой строкой




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

Создано: 03 апреля 2011 23:31 · Поправил: Coderess
· Личное сообщение · #11

tihiy_grom
тем более вы забыли выложить бинарный поиск по файлу, так что незачёт
Этот код из моего незавершенного сканера одного протектора, не особо хочется его светить Придерживаюсь мнения, что иногда небольшой код помогает понять как "это" работает, поэтому ставим int3 и отлаживаем в ольке. Также все написано в уроке Iczelion'а http://wasm.ru/article.php?article=1002002
http://wasm.ru/article.php?article=1002004 вооружившись когда-то этими статьями мною много чего было написано


----


Code:
  1.          HANDLE hFile;
  2.          HANDLE hMapFile;
  3.          LPVOID pMapFile;
  4.  
  5.          LPVOID  lpMap;
  6.          PIMAGE_DOS_HEADER pdos_hdr;
  7.          PIMAGE_NT_HEADERS pnt_hdr;



---


Djeck
Неее, старый-корявый код, только щас заметил как оно работало??!
ужас просто не используйте его

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





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 апреля 2011 23:32
· Личное сообщение · #12

ixtorio
))юный вирусописатель?
там же уже указаны типы переменных к которым приводится




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

Создано: 03 апреля 2011 23:33
· Личное сообщение · #13

Взять и руками объявить. Хочешь учиться-бери и учись, гугл с тонной сорцов и ман пе в твоём распоряжении. Уже и готовые исходники дали, ему всё мало.
Считай это предупреждением. И заодно ознакомься с кнопкой Правка.



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

Создано: 03 апреля 2011 23:49 · Поправил: ixtorio
· Личное сообщение · #14

послушайте ,я конечно понимаю что вас напрягает отвечать , но форум создан для обмена опытом .. и для общения и обсуждения...в гугле нету того что описал Coderess и исходников таких я ненашел там , и чувствуя что вы скажете что плохо я искал скажу таки что хорошо искал в своем понимании , думаете мне делать нех чем сидеть на форуме?мне гораздо легче мануал прочитать ... но если я его непонимаю или немогу найти это не значит что меня надо банить , а значит что можно было бы мне и помочь...

мне всего навсего нужно знать какого типа переменные в исходнике ибо я в душе незнаю в каком типе переменных есть такая фигня ->e_lfanew

вотак?

PIMAGE_NT_HEADERS pnt_hdr;
PIMAGE_NT_HEADERS pnt;
PIMAGE_DOS_HEADER pdos_hdr;
PIMAGE_DOS_HEADER pdos;

если так то уменя программа прекращает работу , умну вин 7 и там это наглядно видно ... файл который скармливаю это чистый незапакованный и не закриптованный екзешник



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 03 апреля 2011 23:57 · Поправил: VodoleY
· Личное сообщение · #15

ixtorio не повериш, если это адреса то это DWORD =4 byte=32 bits
в первая буква р в описании типа это 99 процентов поинтер, те указатель, т.е это адрес в памяти

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 04 апреля 2011 00:01
· Личное сообщение · #16

причем тут дворд , меня интересует какова типа объявить переменную pdos чтоб в ней было это : e_lfanew
это есть в PIMAGE_DOS_HEADER но программа вылетает когда я так делаю ,а подругому я хз как



Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 04 апреля 2011 00:04
· Личное сообщение · #17

попробуй почитать
http://www.kodges.ru/4940-issledovanie-programm-win32-do-dizassemblera-i.html



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

Создано: 04 апреля 2011 00:07
· Личное сообщение · #18

спасибо почитаю , но вопрос в силе



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 апреля 2011 00:09
· Личное сообщение · #19

ixtorio
делай include <Windows.h> или <Winnt.h>

Изучай структуры IMAGE_DOS_HEADER, IMAGE_NT_HEADERS, IMAGE_OPTIONAL_HEADER. В-кратце: в исполняемых файлах винды формата PE32 лежит структура IMAGE_DOS_HEADER, ее поле e_lfanew указывает по какому смещению относительно начала файла лежит структура IMAGE_NT_HEADERS. Уже в ней найдешь вложенную структуру IMAGE_OPTIONAL_HEADER и поле AddressOfEntryPoint - оно тебе и нужно.

Статьи и документация (на английском):
http://msdn.microsoft.com/en-us/library/ms680336(v=vs.85).aspx
http://www.skynet.ie/~caolan/pub/winresdump/winresdump/doc/pefile.html

Если не понимаешь что-то из сказанного, иди лучше почитай книги по Си++. Я полагаю, неправильно работаешь с памятью (об этом мне говорит юзание структур PIMAGE_DOS_HEADER вместо IMAGE_DOS_HEADER), раз у тебя вылет.

И вообще, покажи свой код, мы сможем сказать тебе, где и почему он падает.



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

Создано: 04 апреля 2011 00:18 · Поправил: ixtorio
· Личное сообщение · #20

теперь вообще не компилится
Code:
  1. // EP22222222.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <windows.h>
  6. //------------------------------------
  7. int PEScan(char *pszFileName)
  8. {
  9.   PIMAGE_NT_HEADERS pnt_hdr;
  10.   PIMAGE_NT_HEADERS pnt;
  11.   PIMAGE_DOS_HEADER pdos_hdr;
  12.   IMAGE_DOS_HEADER pdos;
  13.   HANDLE hFile = CreateFile(pszFileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  14.          if (hFile == INVALID_HANDLE_VALUE)
  15.          {
  16.                  MessageBox(0, "Could not open file!", "Error", 0);
  17.                  return(0);
  18.          }
  19.  
  20.   HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY       , 0,0,0);
  21.          if (hMapFile == NULL)
  22.          {
  23.                  MessageBox(0, "Could not create file map!", "Error", 0);
  24.                  return(0);
  25.          }
  26.          
  27.   PDWORD pMapFile = (PDWORD)MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 0);
  28.          if (hMapFile == NULL)
  29.          {
  30.                  MessageBox(0, "Could not mapped file! ", "Error", 0);
  31.                  return(0);
  32.          }
  33.  
  34.  pdos_hdr = PIMAGE_DOS_HEADER(pMapFile);
  35.  
  36.  pnt  = PIMAGE_NT_HEADERS((DWORD)pMapFile + (PIMAGE_DOS_HEADER)(DWORD)pdos->e_lfanew);
  37.  
  38.  
  39.          DWORD ImageBase = pnt->OptionalHeader.ImageBase;
  40.          DWORD EP = pnt->OptionalHeader.AddressOfEntryPoint;
  41. // ...
  42.               return EP;
  43. }
  44. //---------------------------
  45.  
  46. int main(int argc, char* argv[])
  47. {
  48.          printf("EP is: %d\n",PEScan("C:/Users/Ankh/Desktop/Stub.exe"));
  49.          return 0;
  50. }


когда вот так
Code:
  1.   
  2. PIMAGE_NT_HEADERS pnt_hdr;
  3.   PIMAGE_NT_HEADERS pnt;
  4.   PIMAGE_DOS_HEADER pdos_hdr;
  5.   PIMAGE_DOS_HEADER pdos;

то воттак

Code:
  1. --------------------Configuration: EP22222222 - Win32 Debug--------------------
  2. Compiling...
  3. EP22222222.cpp
  4. C:\Users\Ankh\Desktop\EP22222222\EP22222222.cpp(9) : warning C4101: 'pnt_hdr' : unreferenced local variable
  5. C:\Users\Ankh\Desktop\EP22222222\EP22222222.cpp(36) : warning C4700: local variable 'pdos' used without having been initialized
  6.  
  7. EP22222222.obj - 0 error(s), 2 warning(s)


когда вот так
Code:
  1.   PIMAGE_NT_HEADERS pnt_hdr;
  2.   PIMAGE_NT_HEADERS pnt;
  3.   PIMAGE_DOS_HEADER pdos_hdr;
  4.   IMAGE_DOS_HEADER pdos;


то вот так
Code:
  1. --------------------Configuration: EP22222222 - Win32 Debug--------------------
  2. Compiling...
  3. EP22222222.cpp
  4. C:\Users\Ankh\Desktop\EP22222222\EP22222222.cpp(36) : error C2819: type '_IMAGE_DOS_HEADER' does not have an overloaded member 'operator ->'
  5.         c:\program files\microsoft visual studio\vc98\include\winnt.h(4969) : see declaration of '_IMAGE_DOS_HEADER'
  6. C:\Users\Ankh\Desktop\EP22222222\EP22222222.cpp(36) : error C2227: left of '->e_lfanew' must point to class/struct/union
  7. C:\Users\Ankh\Desktop\EP22222222\EP22222222.cpp(36) : fatal error C1903: unable to recover from previous error(s); stopping compilation
  8. Error executing cl.exe.
  9.  
  10. EP22222222.obj - 3 error(s), 0 warning(s)


вобщем теперь ошибка одна точнее варнинг
Code:
  1. C:\Users\Ankh\Desktop\EP22222222\EP22222222.cpp(36) : warning C4700: local variable 'pdos' used without having been initialized

в ответ на PIMAGE_DOS_HEADER pdos;



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

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

Вам Coderess запостил неправильный код, а вы не можете головой подумать?

warning C4101: 'pnt_hdr' : unreferenced local variable = переменная объявлена, но не используется
local variable 'pdos' used without having been initialized = переменная используется, но не инициализирована

Первый ворнинг не страшен (не тонкий намек о намеренном засорении стэка). Второй предупреждает о том, что программа упадет.

PIMAGE_NT_HEADERS nt_headers_ptr;
PIMAGE_DOS_HEADER dos_header_ptr;

dos_header_ptr = (PIMAGE_DOS_HEADER)pMapFile;
nt_headers_ptr = (PIMAGE_NT_HEADERS)(pMapFile + (DWORD)dos_headers_ptr->e_lfanew);

DWORD ImageBase = nt_headers_ptr->OptionalHeader.ImageBase;
DWORD EP = nt_headers_ptr->OptionalHeader.AddressOfEntryPoint;

return EP+ImageBase;

Archer
А тебе слабо было посмотреть на исходники, прежде чем человека баном запугивать?

От модератора: от Archer: а ему слабо голову включить? 1 поле из документированной структуры прочитать не может. не говоря про то, что дали сорцы, да и весь интернет завален примерами работы с ПЕ. либо пусть думает сам, либо отключает голову и идёт на кодерский сайт, где платит/выпрашивает за просто так готовый и компиляющийся. пока он это делает здесь



Ранг: 60.6 (постоянный), 87thx
Активность: 0.060
Статус: Участник

Создано: 04 апреля 2011 00:43 · Поправил: Kaimi
· Личное сообщение · #22


PDWORD pMapFile = (PDWORD)MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 0);
if (hMapFile == NULL)
{
MessageBox(0, "Could not mapped file! ", "Error", 0);
return(0);
}

Вместо hFile должно быть hMapFile и вместо if (hMapFile == NULL) должно быть if (pMapFile == NULL)



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

Создано: 04 апреля 2011 00:47 · Поправил: ixtorio
· Личное сообщение · #23

всеравно вылетает =(

ой оапоздал с ответом , ща проверю отпишусь

вот теперь не вылетает но выдаёт ноль а не ентри поинт



Ранг: 196.0 (ветеран), 72thx
Активность: 0.140.02
Статус: Участник

Создано: 04 апреля 2011 01:27
· Личное сообщение · #24

Coderess это тот самый протектор про который я подумал?



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

Создано: 04 апреля 2011 01:31
· Личное сообщение · #25

никто незнает в чем проблемма чтоли?



Ранг: 60.6 (постоянный), 87thx
Активность: 0.060
Статус: Участник

Создано: 04 апреля 2011 01:44
· Личное сообщение · #26

Напиши типа
Code:
  1.          dos_header_ptr = (PIMAGE_DOS_HEADER)pMapFile;
  2.          nt_headers_ptr = (PIMAGE_NT_HEADERS)((DWORD)pMapFile + dos_header_ptr->e_lfanew);
  3.  
  4.  
  5.          DWORD ImageBase = nt_headers_ptr->OptionalHeader.ImageBase;
  6.          DWORD EP = nt_headers_ptr->OptionalHeader.AddressOfEntryPoint;
  7.          
  8.          return ImageBase + EP;




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

Создано: 04 апреля 2011 01:47
· Личное сообщение · #27

алелуйа заработало , спасибо вам огромное...



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 04 апреля 2011 10:06
· Личное сообщение · #28

Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".


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