![]() |
Проблема с выделением памяти в заинжекченом процессе
Есть программа, которая инжектирует свой код в svchost.exe
Выполняет в нем какой-то код, а потом выполняет действия наподобии этих: Код:
char * szData = (char *) malloc(GetFileSize(hFile, NULL)); |
>>Есть программа, которая инжектирует свой код в svchost.exe
ну да, код может и инжекцируется, но вы уверенны, что хэндл hFile имеет место быть в процессе svchost? если нет, то malloc'у передастся -1. не хочется разбираться почему, но malloc возвращает не NULL на -1, однако очевидно, что память такого размера выделиться не может и первые четыре байта до возвращаемого указателя совсем не размер содержат... |
Гыыы) Дело в CRT-шных malloc'ах и free'хах))
Код:
void *new_malloc(size_t size)а вообще, автор, отладчики ведь придумали не просто так PS HeapAlloc, HeapFree - это в NT на самом деле экспорт-форвардинг на ntdll.RtlAllocateHeap и соотв. ntdll.RtlFreeHeap. как и getlasterror=RtlGetLastWin32Error |
2KEZ а что в реализации этих crt-функций такого?)
|
Цитата:
|
Цитата:
|
спасибо за ответ )
|
Цитата:
Для чего нужна инициализация CRT? Вот оно инициализивалась, особенно куча тек. процесса получилась, и тут вдруг кусок кода идет в совсем другой процесс со своей кучей. Подробнее - см. дизасм malloc() и free(). Это примерно тоже, что получить хендлы, справедливые только в текущем процессе (открытые объекты "файл", к примеру) и инжектнуть код, с ними работающий, в другой процесс, удивляясь, почему не работает. А в crt как бы нет ориентировки на то, что её будут хакеры использовать в целях инжекта в бедный svchost |
2KEZ ну это ясно. только не понятно зачем ты щас конретизируешь кучу, ведь изначально ошибко кроется в том, что нельзя инжектить код, который использует "родные" адреса для вызова дальних jmp или call. ну в общем-то да, вот только тогда не понятно как автор решил инжектить код со своими адресами.. ахх, если бы винду собирали с crt автору при удачном стечении обстоятельств было бы попроще:)
|
Цитата:
Проблема не в jmp или call. С джампами и колами - это другая проблема, их надо релочить. А тут - косяк чисто в CRT. Достаточно посмотреть шаги работы malloc(). Помниться, когда я только узнал про инжект в процесс, у меня была точно такая же проблема. Цитата:
|
| Время: 17:47 |