Сейчас на форуме: zds, UniSoft (+6 невидимых)

 eXeL@B —› Программирование —› Проверка shell coda в программе
Посл.ответ Сообщение

Ранг: 9.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2012 16:30 · Поправил: _or_75
· Личное сообщение · #1

Короче получаю базу мапинга файла вот так:

Code:
  1. hMap = (LPBYTE)MapViewOfFile(hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, fsize);
  2. if(!hMap)
  3. {
  4.         printf("[-] MapViewOfFile failed\n");
  5.         CloseHandle(hFileMap);
  6.         CloseHandle(hFile);
  7.         return 0;
  8. }


//Функция проверки кода:

Code:
  1. int IsInfect(unsigned char* pExe)
  2. {
  3.          if(*(WORD*)((DWORD)pExe+0x1C) == 0x55) // что-то тут не ТАК!
  4.                  return 1;
  5.          else
  6.                  return 0;
  7. }


//Проверяю файл на shell код:

Code:
  1. if(IsInfect((unsigned char *)(LPVOID)hMap))
  2. {
  3.          printf("[-] FILE GOD!\n");
  4.          goto cleanup;
  5. }


на скриншоте все верно :



но в итоге не пишет!!!! '[-] FILE GOD, хотя должно




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

Создано: 05 ноября 2012 16:51 · Поправил: ARCHANGEL
· Личное сообщение · #2

А кто ж вам сказал, что он маппится по ImageBase?

Остальное, я так подагаю - очепятки, т.е. 1С вместо 3С и вторая буква о в "боге" ))

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





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

Создано: 05 ноября 2012 16:55
· Личное сообщение · #3

Файл Бог? Ну-ну. Про отладчик ты тоже ничего не слышал? И даже боюсь спросить, при чём тут вообще 0x1C и каким оно образом связано с указанным на скриншоте адресом.



Ранг: 9.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2012 17:05
· Личное сообщение · #4

1C это смешение как вроде




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

Создано: 05 ноября 2012 18:38
· Личное сообщение · #5

Смещение от чего и до чего? Я вот вижу смещение на скрине 0x9380, например.



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

Создано: 05 ноября 2012 19:03
· Личное сообщение · #6

Да и к тому же читаешь WORD и сравниваешь с 55h, а там как минимум 8B55h будет, либо UCHAR/BYTE вместо WORD



Ранг: 9.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2012 19:51 · Поправил: _or_75
· Личное сообщение · #7

писал вот так

Code:
  1. if(*(WORD*)((DWORD)pExe+0x9380) == 0x55)


все нормально

а если у меня вот так



то не работает.

WORD не помогает так как он 2 байта вроде , DWORD в MessageBox показывает 9 байтов вместо 8.

ниже на скриншоте в Hex dump я выделил что он в msgbox показывает в строке unicode. Вместо того чтобы показать

h7!!..hh6 он мне показывает h7!!..hh642



именно по этому я не могу просто так взять и написать так:

Code:
  1. if(*(DWORD*)((DWORD)pExe+0x9380) == 0x683713000068683642)




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 05 ноября 2012 19:59
· Личное сообщение · #8

Code:
  1. int IsInfect(void* Base)
  2. {
  3.     const UCHAR Signature[] = { 0x11, 0x22, 0x33, 0x44 };
  4.     const ULONG_PTR Offset = 0x9380;
  5.  
  6.     return memcmp(reinterpret_cast<PUCHAR>(pExe) + Offset, Signature, sizeof(Signature))) ? StatusNotFound : StatusFound;
  7. }


-----
старый пень




Ранг: 9.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 05 ноября 2012 20:17
· Личное сообщение · #9

r_e пишет:
Code:
  1. int IsInfect(void* Base)
  2. {
  3.     const UCHAR Signature[] = { 0x11, 0x22, 0x33, 0x44 };
  4.     const ULONG_PTR Offset = 0x9380;
  5.  
  6.     return memcmp(reinterpret_cast<PUCHAR>(pExe) + Offset, Signature, sizeof(Signature))) ? StatusNotFound : StatusFound;

}


100500 ошибок




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

Создано: 05 ноября 2012 20:24
· Личное сообщение · #10

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



Ранг: 9.9 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 06 ноября 2012 07:42
· Личное сообщение · #11

все догнал что проекция файла это тоже самое что в ollydbg Hex Dump'е



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

Создано: 10 ноября 2012 02:38 · Поправил: tomac
· Личное сообщение · #12

_or_75 пишет:
DWORD в MessageBox показывает 9 байтов вместо 8

Шедевр.
_or_75 пишет:
if(*(DWORD*)((DWORD)pExe+0x9380) == 0x683713000068683642)

Еще один.

Дворд - это 4 байта. MapViewOfFile дает указатель на начало проекции файла, если грузили без всяких SEC_IMAGE, прямо там будет MZ.
Почитай про базу загрузки, базу файла, секции. И вообще про загрузку PE файлов в память.

//Пардон, что пишу в относительно старую тему, не мог удержаться после 9 байт в дворде.


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


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