| Автор
| Сообщение |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
третий способ: написать самому очень похожий блокнот и заменить системный! (в двух местах).
помнится, когда мне нужно было сделать так чтобы при открытии отчёта блокнотом некоторые строки были не видны пользователю (надо было скрывать факт перерасхода))) ), тут мне посоветовали повозиться с NativeAPI c функциями типа Zw*, но тогда я не знал сплайсинга, и придумал этот метод) _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
|
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
И тут я подумал забавно, а оказалось за деньги...
Действительно, забавно, NikotiN, забавно будт мне написать новый Access кпримеру
Кстате, я что-то слышал про NativAPI. это вроде как те же API, только на более низком уровне, что-то связанное с ntdll.dll, что-то невнятое и расплывчатое. Вобщем буду пытаться с ДЛЛ. ох и противное же это дело...
Но все равно спасибо, тут лыбые идеи важны, если появятся еще - пуляй, я срадостью ознакомлюсь.
Тоже самое касается и остальных... _________________ Зараннее тащусь |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
ещё идея )))
можно написать свой загрузчик, т.е. запускаешь ты аксекс, а на самом деле запускается твоя прога, которая запускает аксекс и патчит ему память.
имхо, самое удачное. что я сегодня придумал))) _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
А вот это уже очень даже реально осуществимо. Круто, нужно будет попробывать. Ведь н сколько я понял, если мояпрога запускает процесс, то он расценивается как дочерний и находится в том же адресном пространстве, что и загрузчик, что дает нам доступ и... о да!  _________________ Зараннее тащусь |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
а вот нифига и не в одном) _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
В таком случае, что же меняется? _________________ Зараннее тащусь |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
что меняется? - после запуска дочернего процесса у родительского остается дискриптор дочернего с полными правами. не надо получать никаких там отладочных привилегий, они уже есть.
и если ты в самом деле решишь так сделать, то я бы тебе посоветовал делать так: загрузчик запускает дочерний процесс в режиме Suspended (заморожен), внедряет в его адресное пространство dll-ку (которая выполняет замену кода внутри адресного пространства, которое для нее уже является "родным") и после того возобновляет дочерний процесс. _________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
Тема, Буду пробовать...
О резыльтатах отпишусь... _________________ Зараннее тащусь |
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
|
Цитата |
|
Вот развели треп. Запись в память (и перехват функций тоже) уже обсуждался ранее. Пользуйтесь поиском господа  _________________ Bonum initium est dimidium facti
SQL-задачи (on-line) |
|
| В начало |
|
 |
|
|
 |
 Ordep
Новичок

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.01.2007
Сообщения: 16
Откуда: Новосибирс
|
|
|
Цитата |
|
Especially for Dogma!
Треп мы не разводим т.к. Подобные вопросы не односторонни, и даже если они когдато обсуждались(в чем нт сомнений), то обсуждение проходило в конкретном контексте, В даннм случае мне нужно именно в моем, под мою ситуацию, с конкретным примером! А бесконечно ползать по форумам, собирая листинговую "мазайку" - просто терять время. Это как после прочтения даже самого подробного учебника, у нормального человека парочка, да возникнет вопросов.
Я думаю лучще: конкретный впрос - конкретный ответ! Экономится куча времени, да и парням на форуме не скучно...
Господа, продолжаем...
Я временно замешкался и результаты Никотиновской темы будут, думаю, завтра, вместе с новыми вопросами(естественно)... _________________ Зараннее тащусь |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
| В начало |
|
 |
 dogma
aka Достоевский

Возраст: 27
Знак зодиака: 
Зарегистрирован: 20.12.2004
Сообщения: 1702
Откуда: Холмск
|
|
| В начало |
|
 |
ddd
Частый гость

Возраст: 23
Знак зодиака: 
Зарегистрирован: 08.07.2006
Сообщения: 35
|
|
|
Цитата |
|
to Ordep
Да ну ты и лентяё если уж не захотел читать спец литературу, то прочиталбы хотябы книги про которые тебе Dr-passо сказал ну или на худой конец знаменитые статьи ms-rem’а на которые тебе тоже линк давали. Ну да ладно вот тебе практический код самый простой, что только можно себе представить
| Код: |
library XYK;
uses
SysUtils,
Windows,
Classes;
{$R *.res}
type
fr_jmp=packed record
PuhsOp:byte;
PushArg:pointer;
RetOp:byte;
end;
var
Новый_Код:fr_jmp;
OldCrp:array[1..6]of byte;
bw:dword;
SysHook:HHook=0;
function NewMessageBox(Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer;export; stdcall;
begin
WriteProcessMemory(GetCurrentProcess,
GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxA'),@OldCrp,6,bw);
result:=MessageBox(Parent,Txt,PChar('Перехвачена '+Caption),TextType);
//записываем новое начало CreateProcessA
WriteProcessMemory(GetCurrentProcess,GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxA'), @Новый_Код, SizeOf(fr_jmp),bw);
end;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
CallNextHookEx(SysHook, Code, wParam, lParam);//Передать сообщение другим ловушкам в системе
end;
procedure RunStopHook;export; stdcall;
begin
SysHook := SetWindowsHookEx(WH_CALLWNDPROCRET,@SysMsgProc, HInstance, 0);
end;
exports RunStopHook index 1;
begin
//сохраняем старое начало функции
ReadProcessMemory(GetCurrentProcess,GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxA'),@OldCrp,6, bw);
Новый_Код.PuhsOp:=$68;
Новый_Код.PushArg:=@NewMessageBox;
Новый_Код.RetOp:=$C3;
//записываем новое начало CreateProcessA
WriteProcessMemory(GetCurrentProcess,GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxA'), @Новый_Код, SizeOf(fr_jmp),bw);
end. |
| Код: |
procedure RunStopHook(hand:dword);stdcall; external 'XYK.dll';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
RunStopHook(Handle); |
Работает он тоже проще не придумаешь в длл вызывается функция RunStopHook, которая ставит ловушку функцией SetWindowsHookEx при установки ловушки длл подключается ко всем процессам и выполняется код между begin и end в самом низу. Этот код и устанавливает ловушку ну там всё прокомментировано. |
|
| В начало |
|
 |
 TuXAPuK
Великий гонщик


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
Спасибо за линки... Узнал много нового...  _________________
 |
|
| В начало |
|
 |
 NikotiN
Розовый мамонт

Возраст: 26
Знак зодиака: 
Зарегистрирован: 18.03.2005
Сообщения: 2137
|
|
|
Цитата |
|
=))))
пожалуйста, только вот добавлю, одну вещь, сначала файерволл делает сплайсинг функций, потом антивирус этих же функций, потом мы, потом вирус, потом ещё кто-нить.... и в итоге код мизерной функции разрастается до больших размеров...а говорим ещё винда глючит.... _________________ Сила дурака в том, что умный перед ним бессилен. |
|
| В начало |
|
 |
|