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

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

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

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

поспешили вы закрыть тему вот эту --> Link <-- .
уменя возникла проблемма с темже сорцем..он выдаёт ентри поинт но он какойто нетакой как в PEiD и как в OllyDbg...посмотрите плиз еще раз сорец и скажите в чём проблемма.
Code:
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. //------------------------------------
  5. int PEScan(char *pszFileName)
  6. {
  7.   
  8.   PIMAGE_NT_HEADERS nt_headers_ptr;
  9.   PIMAGE_DOS_HEADER dos_header_ptr;
  10.          
  11.  
  12.   HANDLE hFile = CreateFile(pszFileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  13.          if (hFile == INVALID_HANDLE_VALUE)
  14.          {
  15.                  MessageBox(0, "Could not open file!", "Error", 0);
  16.                  return(0);
  17.          }
  18.  
  19.   HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY       , 0,0,0);
  20.          if (hMapFile == NULL)
  21.          {
  22.                  MessageBox(0, "Could not create file map!", "Error", 0);
  23.                  return(0);
  24.          }
  25.          
  26.   PDWORD pMapFile = (PDWORD)MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0);
  27.          if (pMapFile == NULL)
  28.          {
  29.                  MessageBox(0, "Could not mapped file! ", "Error", 0);
  30.                  return(0);
  31.          }
  32.  dos_header_ptr = (PIMAGE_DOS_HEADER)pMapFile;
  33.  nt_headers_ptr = (PIMAGE_NT_HEADERS)((DWORD)pMapFile + dos_header_ptr->e_lfanew);
  34.  
  35.  DWORD ImageBase = nt_headers_ptr->OptionalHeader.ImageBase;
  36.  DWORD EP = nt_headers_ptr->OptionalHeader.AddressOfEntryPoint;
  37.  
  38.  return EP+ImageBase;
  39. }
  40. //---------------------------
  41.  
  42. int main(int argc, char* argv[])
  43. {   char buffer[7];
  44.     char Path[1024];
  45.     char EP[9]="00";
  46.     printf("Enter path:");
  47.     scanf("%s",Path);
  48.     printf("\n%d",PEScan(Path));
  49.     //itoa(PEScan(Path),buffer,10);
  50.     strcat(EP,buffer);
  51.     //MessageBox(0, EP, "Entry Point", 0);
  52.    return 0;
  53. }




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

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

google RVA to offset.

-----
Shalom ebanats!




Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

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

ВСЁ ТУТ



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

Создано: 05 апреля 2011 01:06
· Личное сообщение · #4

полезные ответы =\ но я уже писал что не шарю в этой структуре,я читал статью которую ты мне дал - SergX

а в гугле рва ту офсет функций на с++ нету а сам я хз как реализовывать - SLV



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

Создано: 05 апреля 2011 01:18 · Поправил: Kaimi
· Личное сообщение · #5

PeID и OllyDbg показывают EP в хексе насколько я помню, а в этом коде он отображается в виде десятичного числа. Или в уме/на калькуляторе переводишь в одну систему и не совпадает?




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

ixtorio
Просто переведи число в шестнадцатеричную систему счисления(если у тебя в десятеричной) и прибавь
ImageBase. Получится всё как в ольке. Честно, если не разбираешься в этом, напиши свою прогу/модуль для
чтения структур, тогда всё станет понятно для тебя и не будет возникать подобных вопросов. Конечно,
если цель оправдывает средства.

-----
Research For Food




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 05 апреля 2011 07:52
· Личное сообщение · #7

ixtorio пишет:
в чём проблемма

Убери strcat, сделай wspintf с таким параметром %08X




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

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

ixtorio пишет:

а в гугле рва ту офсет функций на с++ нету а сам я хз как реализовывать -

При чём тут рва в оффсет перевод? Ни PeID, ни Ollydbg оффсеты не показывают. SLV глумится, походу. Но раз вы, ixtorio, согласны, что этот перевод нужно выполнить, тогда юзайте ImageRvaToSection. Из Рва вычитайте VirtualAddress из IMAGE_SECTION_HEADER, найденного предыдущей функцией, и к полученному результату прибавляйте PointerToRawData.

Да, кстати, если олли покажет ЕР RVA + ImageBase, то PeID - только ЕР RVA.

Убирать strcat не нужно, вводить wspintf - тоже, в данном случае достаточно чего-то типа этого:

Code:
  1. printf("EP = %08X\n",TheEP); // DWORD TheEP - hex value of the entry point


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




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

Создано: 05 апреля 2011 13:41
· Личное сообщение · #9

ixtorio пишет:
int main(int argc, char* argv[])
{   char buffer[7];
    char Path[1024];
    char EP[9]="00";
    printf("Enter path:");
    scanf("%s",Path);
    printf("\n%d",PEScan(Path));
    //itoa(PEScan(Path),buffer,10);
    strcat(EP,buffer);
    //MessageBox(0, EP, "Entry Point", 0);
   return 0;
}

Переделай:
int main(int argc, char* argv[])
{   char buffer[7];
    char Path[1024];
    char EP[9];
    printf("Enter path:");
    scanf("%s",Path);
    sprintf(EP, "EntryPoint:\n%08X",PEScan(Path));
    MessageBox(0, EP, "Entry Point", 0);
   return 0;
}

Изучай функции форматированного ввода/вывода в я зыке Си. Будешь понимать всякие спецификаторы %s, %d, %x

ARCHANGEL пишет:
При чём тут рва в оффсет перевод?

Ему это тоже надо. Он хочет получать байты с EntryPoint...

SergX пишет:
ВСЁ ТУТ

ixtorio
Из этого источника выдирай функу:
Code:
  1. //Base - файл проецируется в память, это его база
  2. //RVA - значение, которое нужно преобразовать в Offset
  3. DWORD RVAtoOffset(DWORD Base,DWORD RVA)
  4. {
  5.          PIMAGE_NT_HEADERS pPE=(PIMAGE_NT_HEADERS)((long)Base+((PIMAGE_DOS_HEADER)Base)-»e_lfanew);
  6.          short NumberOfSection=pPE-»FileHeader.NumberOfSections;
  7.          long SectionAlign=pPE-»OptionalHeader.SectionAlignment;
  8.          PIMAGE_SECTION_HEADER Section=(PIMAGE_SECTION_HEADER)
  9.             (pPE-»FileHeader.SizeOfOptionalHeader+(long)&
  10.             (pPE-»FileHeader)+sizeof(IMAGE_FILE_HEADER));
  11.          long VirtualAddress,PointerToRawData;
  12.          bool flag=false;
  13.          for (int i=0;i«NumberOfSection;i++)
  14.          {
  15.                  if ((RVA>=(Section-»VirtualAddress))&&
  16.                     (RVA«Section-»VirtualAddress+
  17.                     ALIGN_UP((Section-»Misc.VirtualSize),SectionAlign) ))
  18.                  {
  19.                         VirtualAddress=Section-»VirtualAddress;
  20.                         PointerToRawData=Section-»PointerToRawData;
  21.                         flag=true;
  22.                         break;
  23.                  }
  24.                  Section++;
  25.          }
  26.          if (flag) return RVA-VirtualAddress+PointerToRawData;
  27.          else return RVA;
  28. }

И передавай туда значение EP (из строчки DWORD EP = nt_headers_ptr->OptionalHeader.AddressOfEntryPoint;) и указатель на файл (pMapFile).

P.S. Тему можно было просто попросить открыть (у любого из модераторов), не надо было создавать новую.




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

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

Может проще нанять кодера, если нужен сорс того, в чем не разбираешься и разбираться не хочешь?

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


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

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

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

спасибо всем

и

в томто и дело что я учусь =) разбираться,познаю и не безуспешно...чтото даётся самому чтото даётся с помощью других людей=)




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

Создано: 06 апреля 2011 20:45
· Личное сообщение · #12

Вот учиться надо самому, сидеть и гуглить, а не спрашивать про каждый чих на форуме. И не надо рассказывать, что десятичную форму от 16-ричной нельзя отличить без очередного топика на форуме, когда и так все сорцы уже выпросил.
Данный форум поощряет людей, кто учится, но это называется попрошайничество, сделайте за меня кто-нибудь. Будешь так продолжать-надолго здесь не задержишься.


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