![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов API функций в чужом процессе
The Scorpion © (2004-11-05 12:46:00)Объясните ,пожалуйста, почему при вызове API функций ,в чужом процессе ,этот процесс завершается .Как этого избежать?
kaZaNoVa (2004-11-06 18:26:00) [1]Удалено модератором
Примечание: Offtopic
kaZaNoVa (2004-11-06 18:18:00) [2]Удалено модератором
Примечание: Нельзя
kaZaNoVa (2004-11-06 18:17:00) [3]Удалено модератором
Примечание: Шел бы ты на хакерские сайты
kaZaNoVa (2004-11-06 17:33:00) [4]Wiz@rd (06.11.04 16:11) [31]
супер, спасибо !
Wiz@rd (2004-11-06 16:11:00) [5]http://iamaphex.cjb.net- там вместе библиотекой afxCodeHook идёт пример Remote Execute - то что нужно!
n0name (2004-11-06 16:08:00) [6]The Scorpion (05.11.04 18:46) [25]
В винде можно многое, но как ты собираешься создавайть поток, конечно функцией CreateThread, посмотри какие параметры она принимает(да хоть в MSDN). В их чисте есть аргумент стартуемого потока. Он один, и ты никак(документированно) не передашь ещё один или несколько параметров своему потоку, как правильно заметил Игорь читай Рихтера.
The Scorpion (06.11.04 00:01) [28]
SuspendThread+GetThreadContext
Игорь Шевченко (2004-11-06 00:29:00) [7]The Scorpion (06.11.04 00:01) [28]
Я еще раз настоятельно советую почитать Рихтера. Объяснять здесь все по пунктам у меня нет ни времени, ни трафика.
The Scorpion (2004-11-06 00:01:00) [8]Как получить указатель на стек ?и как получить значение IP?
Для чужого процесса.
Игорь Шевченко (2004-11-05 20:16:00) [9]
> Т.е. ты хочешь сказать что поток МОЖЕТ БЫТЬ ТОЛЬКО функцией
> с возвращающем dword и аргументом pointer?!Смелое заявление
> ,я могу опровергнуть его бесчисленное число раз.
Возвращать она может практически что угодно, а вот 4-х быйтовый аргумент должна принимать. И соответствовать соглашению о вызовах stdcall.
ЗЫ: Почему бы Рихтера не почитать, прежде чем спорить ?
Кстати, описываемая тобой функция будет работать только до момента возврата, далее следует закономерное AV из-за некорректного стека. А поскольку функция занимается бесконечным циклом, то возврата из нее не будет.
kaZaNoVa (2004-11-05 19:09:00) [10]ИМХО винда часто позволяет такое, о чём даже и не подумаешь, и иногда даже то,что не должно работать, работает :)))
- имхо ...
The Scorpion (2004-11-05 18:46:00) [11]"Сейчас лопну от смеха:((("
Объясняю для особо ударенных это был сарказм(a это ирония).
"от тупости ты лопнешь, а не от смеха.
когда ты не хихикал бы и не демонстрировал дешевую упертость, у тебя хватило бы мозгов открыть справку хотя бы к ф-ции CreateThread() и увидеть там следующее :"
Мозгов хватило.
"DWORD WINAPI ThreadFunc( LPVOID );
после чего сравнить со своей декларацией и поняв, что она ЯВНО отличается от ориг.док-ции, прекратить дурацкий спор и выполнить хотя бы ЭТИ рекуомендации .. не говоря уже об остальных, устраняющих порочие отмеченные грубые несуразности твоего кода."
Т.е. ты хочешь сказать что поток МОЖЕТ БЫТЬ ТОЛЬКО функцией с возвращающем dword и аргументом pointer?!Смелое заявление ,я могу опровергнуть его бесчисленное число раз.
kaZaNoVa (2004-11-05 18:20:00) [12]Digitman © (05.11.04 18:12) [22]
возможно .. но код же зацикливается, нить создаётся ...
kaZaNoVa (2004-11-05 18:20:00) [13]Digitman © (05.11.04 17:29) [18]
> далее - дело примитивной техники : готовишь свою ДЛЛ
> и грузишь ее в "чужом" АП вызовом CreateRemoteThread с
> указанием FixedAddress в кач-ве адреса поточной ф-ции
это конечно самый лучший выход ..
НО иногда нужно делать безDll - например организация обхода фаерволла, через внедрение в процесс, которому разрешён доступ в инет, при этом подгружать Dll недопустимо потому, что "контроль компонентов" фаерволла "завопит" - "изменились модули процесса" ..
- я правда это не реализовывал, но те, наработки, которые есть, дают возможность сделать такой вывод ...
//просьба не считать это "хакингом" - это всего лишь один из способов применения CreateRemoteThread, где "надо без Dll" ;)
//зы в А311 это УЖЕ Реализовано !!
- уже надо искать "противоядие"
Digitman (2004-11-05 18:12:00) [14]
> kaZaNoVa © (05.11.04 17:54) [21]
о чудесах ты волен рассказывать все что угодно и сколь угодно долго, но страницы памяти, распределенные под исполняемый код, обязаны иметь атрибут EXECUTE.
kaZaNoVa (2004-11-05 17:54:00) [15]Digitman ©
я скопировал этот код, и "натравил" на Explorer - в нём создалась нить, пожирающая 99% ресурсов проца - убил её Process Explorerom, всё стало нормально ..
поэтому, я думаю, как не смешно, но Работает !!! (система 2003)
я делал так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
con:_context;
h,id,newh,PH,id2:thandle;
p,pp:pointer;
sm,sm2,k:dword;
mas:array [1..50] of byte;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
procedure f;
Var t:integer;
begin
// ЛЮБАЯ функция написанная здесь завершает процесс
while true do t:=1;
//Application.Initialize;
//Application.CreateForm(TForm1, Form1);
//Application.Run;
end;
procedure EndCod;
begin
end;
begin
GetWindowThreadProcessID(FindWindow('Progman', nil),Id2);
h:=openprocess(PROCESS_all_access ,false,id2);
//SetThreadContext (getcurrentprocess,con);
sm:=dword(@endcod);
sm2:=dword(@f) ;
sm:=sm-sm2;
p:=VirtualAllocEx(h,nil,sm,MEM_RESERVE OR MEM_COMMIT ,PAGE_READWRITE);
if WriteProcessMemory(h,p,@F,sm,k) then
newh:=CreateRemoteThread(h,nil,0,p,nil,CREATE_SUSPENDED,id);
ResumeThread(newh);
end;
end.
Digitman (2004-11-05 17:37:00) [16]
> Сейчас лопну от смеха
от тупости ты лопнешь, а не от смеха.
когда ты не хихикал бы и не демонстрировал дешевую упертость, у тебя хватило бы мозгов открыть справку хотя бы к ф-ции CreateThread() и увидеть там следующее :
lpStartAddress
The starting address of the new thread. This is typically the address of a function declared with the WINAPI calling convention that accepts a single 32-bit pointer as an argument and returns a 32-bit exit code. Its prototype is:
DWORD WINAPI ThreadFunc( LPVOID );
после чего сравнить со своей декларацией и поняв, что она ЯВНО отличается от ориг.док-ции, прекратить дурацкий спор и выполнить хотя бы ЭТИ рекуомендации .. не говоря уже об остальных, устраняющих порочие отмеченные грубые несуразности твоего кода.
Digitman (2004-11-05 17:31:00) [17]
> Это не ошибки ,а пожелания , причем твои.
это не мои "пожелания", а абсолютно реальные требования платформы, при реализации которых ты осуществишь то что тебе нужно
Digitman (2004-11-05 17:29:00) [18]
> The Scorpion (05.11.04 17:08) [13]
> "Ссылки импорта не настроены."
> Не могли бы вы подсказать как сие осуществить.
1. Определить базовый адрес загруженного kernel32-модуля
2. Получить адрес точек входа в имп. из него ф-ции LoadLibrary, GetProcAddress
3. Вызвать эти ф-ции для получения факт.адресов интересующих прочих WinAPI-функций
4. После успешного получения факт.адресов собственно и и вызывать эти АПИ-ф-ции.
Есть еще вариант - не занимать всей этой хреновиной, а положиться на вполне реальный по сей момент факт, что базовый адрес загрузки kernel32 всегда фиксирован для данной ОС и для данного ее сеанса, и вызывать удаленную поточную ф-цию, передавая ей адрес, равный полученному вызовом FixedAddress := GetProcAddress(hKernel32, 'LoadLibrary') в "своем" процессе ... далее - дело примитивной техники : готовишь свою ДЛЛ и грузишь ее в "чужом" АП вызовом CreateRemoteThread с указанием FixedAddress в кач-ве адреса поточной ф-ции
> Мой код создает поток с активным циклом ожидания(загрузка
> процессора=99.99%).
значит, реальный код выглядит иначе, нежели приведенный здесь.
> Сейчас лопну от смеха
тебе помощь нужна ? или клоунада ?
Игорь Шевченко (2004-11-05 17:17:00) [19]The Scorpion (05.11.04 17:08) [13]
> Не могли бы вы подсказать как сие осуществить.
Почитать книгу Джеффри Рихтера "Создание эффективных WIN32-приложений", там все подробно написано, найти в электронном виде можно на http://www.podgoretsky.com
The Scorpion (2004-11-05 17:16:00) [20]"не гни пальцы.
в твоем коде даже невоор.глазом сразу видны как минимум 3 грубейшие ошибки."
Это не ошибки ,а пожелания , причем твои.