Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поток без длл или самодостаточный код


Страницы:   1 2 3 4 5 6

kaZaNoVa ©   (2004-11-10 18:01:00) 

Идея: создать программу, которая могла бы "создавать самодостаточный код" - в плане того, чтобы возможно внедриться в другой процесс, и при этом НЕ подгружать дополнительных DLL ;)
Я давно интересовался этой темой, и только недавно нащёл реализацию:
(использованы материалы с сайта   http://www.iamaphex.cjb.net)
код:
program Project1;

{$IMAGEBASE $13140000}

uses
 Windows;

function Main(dwEntryPoint: Pointer): longword; stdcall;
begin
 LoadLibrary('kernel32.dll');
 LoadLibrary('user32.dll');
    MessageBox(0, 'Ok', 'Hijacked Process', 0);
// ExitProcess(0);
 Result := 0;
end;

procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
var
 Module, NewModule: Pointer;
 Size, BytesWritten, TID: longword;
begin
 Module := Pointer(GetModuleHandle(nil));
 Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
 VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
 NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
 WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
 CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);
end;

var
 ProcessHandle, PID: longword;
begin
 GetWindowThreadProcessId(FindWindow('Progman', nil), @PID);
 ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
 Inject(ProcessHandle, @Main);
 CloseHandle(ProcessHandle);
end.


Меня интересует - всё ли в этом примере правильно - нет ли негде "подводных камней" ?

И, что будет, если в созданном потоке возникнет исключение - "процесс-носитель" в этом случае завершится ? - как в таком случае можно обрабатывать исключения ?


Digitman   (2004-11-17 08:09:00) [61]


> kaZaNoVa


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

можно долго и нужно выспрашивать здесь "азы" (коих ой как немало), но толку от этого будет с гулькин нос .. для "толка" будет крайне полезно запустить под отладчиком целевой процесс, записать код внедряемого трэда в целевое АП, поставить брейкпойнт на точке входа в трэд-функцию и далее шаг за шагом пройти тело трэда, внимательно контролируя всякий раз обращения мащ.инструкций к памяти и сравнивая ожидаемое с действительным .. это лучший способ понять, "чего в супе не хватает" или чего там явно лишнего


kaZaNoVa   (2004-11-16 19:06:00) [62]

Игорь Шевченко ©   (16.11.04 17:43) [48]
также, по поводу " рано ли":
можно годами изучать "основы", и изучить их в совершенстве, и топтаться на месте ...

можно изучить основы, а потом и всё более сложное- идеальный вариант, но не всегда для этого есть время и желание ...

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

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

по поводу "читай справку", "есть в FAQ" - не спорю, важно .. НО почему-то во всех университетах есть консультациис преподавателями - так как не каждая задача есть в справке, и не каждый сможет найти быстро ответ ..  а иначе бы никаких "консультаций" не существовало бы - всех бы отсылали  к энциклопедиям .. ;)

//извиняюсь за оффтоп - но это была моя самая главная мысль по поводу "внешне глупых вопросов" ...


kaZaNoVa   (2004-11-16 18:53:00) [63]

Игорь Шевченко ©   (16.11.04 17:43) [48]
признаюсь ..  что некоторые вещи я вообще не знаю ..
- все мы специалисты в какой-то своей области ....


Игорь Шевченко   (2004-11-16 17:43:00) [64]

kaZaNoVa ©   (16.11.04 17:16) [46]


> string(переменная типа cardinal) - ерунда получается ...
> ;(


Я очень извиняюсь, но не рано ли с такими знаниями браться за "Поток без длл или самодостаточный код " ?


Digitman   (2004-11-16 17:25:00) [65]


> string(переменная типа cardinal) - ерунда получается


разумеется ерунда ... ибо в дан.случае преобразование к неявному вызову п/программ, расположенных в system.pas


kaZaNoVa   (2004-11-16 17:16:00) [66]

Digitman ©   (16.11.04 8:09) [45]
а ручками - это как ?
string(переменная типа cardinal)- ерунда получается ... ;(


Digitman   (2004-11-16 08:09:00) [67]


> как можно тогда преобразовать


ручками !


> при попытке вызвать какие-нить API-функции, могут возникнуть
> исключения


какие конкретно ?


kaZaNoVa   (2004-11-15 21:00:00) [68]

любопытно, что о сабже много в нете упоминаний, но дальше теории почти нигде ничего нет ..  ;)

по теме - при попытке вызвать какие-нить API-функции, могут возникнуть исключения - как можно обработать ?


kaZaNoVa   (2004-11-15 17:09:00) [69]

Digitman ©   (15.11.04 17:00) [42]

> для использования станд.ф-ций "преобразования" в АП
> "чужого" процесса должны присутствовать как минимум
> модули System, SysUtils

так я же его (екзешник) полностью копирую, функции из System должны быть ..
функции из SysUtils не использую ...

- как можно тогда преобразовать ?


Digitman   (2004-11-15 17:00:00) [70]


> мне надо отладить


на то есть, к примеру, оч даже неплохой дебаггер OllyDbg


> хотел все адреса (Pointer'ы) - преобразовать в стринги и
> вывести мессагебоксом .. - в целях отладки ...


для использования станд.ф-ций "преобразования" в АП "чужого" процесса должны присутствовать как минимум модули System, SysUtils

жми F1 на фразе "Str" - в справке черным по белому написано, что декларация и реализация этой проц-ры находится в модуле system.pas


> выдаётся исключение .. прога завершается .. странно


ничего странного.


kaZaNoVa   (2004-11-15 16:53:00) [71]

так при  I(5) к примеры - выдаётся исключение .. прога завершается .. странно ..


kaZaNoVa   (2004-11-15 16:52:00) [72]

я хотел все адреса (Pointer'ы) - преобразовать в стринги и вывести мессагебоксом .. - в целях отладки ...


kaZaNoVa   (2004-11-15 16:51:00) [73]

Digitman ©   (15.11.04 16:36) [38]
мне надо отладить ..
как ?  %_)))


> с какого перепугу "cardinal в string" преобразуется ?

Function I(t:cardinal):string;
Begin
Str(t,result);
End;


Digitman   (2004-11-15 16:36:00) [74]


> галки НЕТ


щзначит, остается проблема "статики".


> как отлаживать его ?


вопрос отдельный.


> почему-то не могу преобразовать cardinal в string


с какого перепугу "cardinal в string" преобразуется ?


kaZaNoVa   (2004-11-15 16:18:00) [75]

а как отлаживать его ?
(код в чужом процессе ?)
и я почему-то не могу преобразовать cardinal в string . . выдвётся исключение


kaZaNoVa   (2004-11-15 16:16:00) [76]

галки НЕТ


Digitman   (2004-11-15 16:11:00) [77]


> kaZaNoVa ©   (15.11.04 15:40) [34]


слушай, я устал уже.
говорим на совершенно разных языках.
последний вопрос в надежде восстановить "понимание" - в опциях проекта, в котором ты пытаешься "влупить" некий код в "чужое" АП, галка "Build With Run-Time Packages" стоит или "висит" ?


kaZaNoVa   (2004-11-15 15:40:00) [78]

Digitman ©   (15.11.04 15:38) [33]

> те самые 15-20к твоего ехе - это ВЕСЬ код ? или код в
> расчете на использование кода из ран-тайм пакетов ?

весь код ...


Digitman   (2004-11-15 15:38:00) [79]


> kaZaNoVa ©   (15.11.04 15:28) [30]


> слыхал ..  но это имхо не то ..
> (их таскать за собой придётся ...)


и это все что ты знаешь о ран-тайм пакетах ? применительно к поднятой тобой теме ?

те самые 15-20к твоего ехе - это ВЕСЬ код ? или код в расчете на использование кода из ран-тайм пакетов ?


kaZaNoVa   (2004-11-15 15:30:00) [80]

Digitman ©   (15.11.04 15:26) [29]

> и долго ты тут будешь захламлять ветку, без конца
> дублируя код от "старых попыток" ? например, код
> установки привелегий чего-то там, НЕ имеющий к сабжу
> никакого отношения ?

постараюсь приводить только "значимый" код ;)))


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо