ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с выделением памяти в заинжекченом процессе
  #1  
Старый 19.11.2007, 21:10
razzzar
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме:
725870

Репутация: 208
Question Проблема с выделением памяти в заинжекченом процессе

Есть программа, которая инжектирует свой код в svchost.exe
Выполняет в нем какой-то код, а потом выполняет действия наподобии этих:
Код:
char * szData = (char *) malloc(GetFileSize(hFile, NULL));
...
free(szData);
Так вот работает все отлично, но как только доходит до выделения памяти выкидует сообщение о ошибке и просьбе отослать отчет в Microsoft. Кто знает с чем связано?
 
Ответить с цитированием

  #2  
Старый 19.11.2007, 23:01
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

>>Есть программа, которая инжектирует свой код в svchost.exe

ну да, код может и инжекцируется, но вы уверенны, что хэндл hFile имеет место быть в процессе svchost? если нет, то malloc'у передастся -1. не хочется разбираться почему, но malloc возвращает не NULL на -1, однако очевидно, что память такого размера выделиться не может и первые четыре байта до возвращаемого указателя совсем не размер содержат...
 
Ответить с цитированием

  #3  
Старый 19.11.2007, 23:17
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Гыыы) Дело в CRT-шных malloc'ах и free'хах))

Код:
void *new_malloc(size_t size)
{
  return HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,size);
}

void new_free(void *p)
{
  HeapFree(GetProcessHeap(),0,p);
}
при инжекте в процесс многие ф-ие CRT использовать не получится

а вообще, автор, отладчики ведь придумали не просто так

PS
HeapAlloc, HeapFree - это в NT на самом деле экспорт-форвардинг на ntdll.RtlAllocateHeap и соотв. ntdll.RtlFreeHeap.
как и getlasterror=RtlGetLastWin32Error

Последний раз редактировалось KEZ; 19.11.2007 в 23:21..
 
Ответить с цитированием

  #4  
Старый 19.11.2007, 23:39
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

2KEZ а что в реализации этих crt-функций такого?)
 
Ответить с цитированием

  #5  
Старый 19.11.2007, 23:41
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

Цитата:
Сообщение от kez  
а вообще, автор, отладчики ведь придумали не просто так
Да, и очень жаль, что люди, подобные ТС, не умеют ими пользоваться.
 
Ответить с цитированием

  #6  
Старый 19.11.2007, 23:52
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
Сообщение от ZaCo  
2KEZ а что в реализации этих crt-функций такого?)
Их нет как я понимаю, хотя я в отладчик не заглядывал.
 
Ответить с цитированием

  #7  
Старый 20.11.2007, 00:43
razzzar
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме:
725870

Репутация: 208
По умолчанию

спасибо за ответ )
 
Ответить с цитированием

  #8  
Старый 20.11.2007, 01:06
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
2KEZ а что в реализации этих crt-функций такого?)
Зако тоже не любит отладченки походу.
Для чего нужна инициализация CRT? Вот оно инициализивалась, особенно куча тек. процесса получилась, и тут вдруг кусок кода идет в совсем другой процесс со своей кучей. Подробнее - см. дизасм malloc() и free().
Это примерно тоже, что получить хендлы, справедливые только в текущем процессе (открытые объекты "файл", к примеру) и инжектнуть код, с ними работающий, в другой процесс, удивляясь, почему не работает.
А в crt как бы нет ориентировки на то, что её будут хакеры использовать в целях инжекта в бедный svchost

Последний раз редактировалось KEZ; 20.11.2007 в 01:08..
 
Ответить с цитированием

  #9  
Старый 20.11.2007, 03:01
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

2KEZ ну это ясно. только не понятно зачем ты щас конретизируешь кучу, ведь изначально ошибко кроется в том, что нельзя инжектить код, который использует "родные" адреса для вызова дальних jmp или call. ну в общем-то да, вот только тогда не понятно как автор решил инжектить код со своими адресами.. ахх, если бы винду собирали с crt автору при удачном стечении обстоятельств было бы попроще
 
Ответить с цитированием

  #10  
Старый 20.11.2007, 12:58
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


Exclamation

Цитата:
ведь изначально ошибко кроется в том, что нельзя инжектить код, который использует "родные" адреса для вызова дальних jmp или call.
Все адреса при инжекте остались родными) В svchost выделили нужные адреса, скопировали туда свой образ целиком (автор, я телепат??) и запустили нужную ф-ию.
Проблема не в jmp или call. С джампами и колами - это другая проблема, их надо релочить. А тут - косяк чисто в CRT. Достаточно посмотреть шаги работы malloc().
Помниться, когда я только узнал про инжект в процесс, у меня была точно такая же проблема.

Цитата:
ну в общем-то да, вот только тогда не понятно как автор решил инжектить код со своими адресами..
хз почему ты так решил

Последний раз редактировалось KEZ; 20.11.2007 в 13:01..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разгон памяти FeraS Аппаратное обеспечение 5 20.10.2007 03:31
Проблема с icq reider ICQ 6 16.08.2007 14:47
Советы при работе с картами памяти alextoun Аппаратное обеспечение 0 12.03.2007 14:32
Bsod экран смерти silveran Чужие Статьи 1 21.12.2005 22:34
Проблема с перл Эксплойтом для ipb 2.0.* SURRENDER Форумы 2 07.12.2004 12:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ