> > Вот возникла идея создать другой процесс (но не > нить!), > > старый процесс закрыть, и из нового все сделать...но > > CreateProccess требует исполняемого файла, а держать > его > > копию внутри вируса расточительно и как то > некрасиво...а
Да и гемора здесь не оберешься. Новый процесс нужно будет синхронизировать со старым. А это тянет за собой сразу кучу проверок (типа, процесс жив/мертв и т.п.), использование семафоров и т.д.
> Можно сделать ДОС-овский СОМ файл, и запихать в твой > "вирус", сом весит мало. А патом его записать в файл и > исплонить тем же CreateProccess или WinExec.
Не подскажет ли кто нибудь как мне решить лучше всего данну траблу...
Чуствуется что здесь есть известное простое решение а изобретать лесопед заново не хочется...
вообщем ситуация:
я, вирус, загруженный из файла (прогии...)...мне надо этот файл проредактировать (точнее , вылечить) но так что бы я сам себя не удалил. Но дело в том, что я не могу редактировать свой файл пока он запущен...
В этом и проблема.
Вот возникла идея создать другой процесс (но не нить!), старый процесс закрыть, и из нового все сделать...но CreateProccess требует исполняемого файла, а держать его копию внутри вируса расточительно и как то некрасиво...а нельзя кстати создать безфайловый процесс?
Заранее большое спасибо..
[Win32] Есть еще другой вариант13.03.02 17:19 Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
> Вот возникла идея создать другой процесс (но не нить!), > старый процесс закрыть, и из нового все сделать...но > CreateProccess требует исполняемого файла, а держать его > копию внутри вируса расточительно и как то некрасиво...а > нельзя кстати создать безфайловый процесс?
CreateFile
FILE_ATTRIBUTE_TEMPORARY
The file is being used for temporary storage. File systems attempt to keep all of the data in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.
Делай так - тот exe, в кот. ты сейчас сидишь и который занят системой копируй в такой временный файл, запускай. Дожидайся завершения главного файла.
Редактируй.
[Win32] Есть еще другой вариант14.03.02 18:39 Автор: vh <Дмитрий> Статус: Member
> > Вот возникла идея создать другой процесс (но не > нить!), > > старый процесс закрыть, и из нового все сделать...но > > CreateProccess требует исполняемого файла, а держать > его > > копию внутри вируса расточительно и как то > некрасиво...а > > нельзя кстати создать безфайловый процесс? > > CreateFile > FILE_ATTRIBUTE_TEMPORARY > > The file is being used for temporary storage. File systems > attempt to keep all of the data in memory for quicker > access rather than flushing the data back to mass storage. > A temporary file should be deleted by the application as > soon as it is no longer needed. > > Делай так - тот exe, в кот. ты сейчас сидишь и который > занят системой копируй в такой временный файл, запускай. > Дожидайся завершения главного файла. > Редактируй. не понял :(
можно еще раз?
[Win32] Есть еще другой вариант15.03.02 10:16 Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
> > не понял :( > > можно еще раз? > > Если не понял то что я написал про CreateFile, смотри хелп. > А если принцип..... > > Скажи конкретнее усоловия задачи. фича в том чтобы зараженная программа при своем запуске лечила сама себя (ну точнее чтобы вирус сам себя удалил..на диске) и запустилась бы уже излеченная..хорошая. допустим есть уже функция health(file) которая это делает. но проблема в том что открытый файл редактировать нельзя. :(
нужно сделать так чтоб пользователь ничего не заметил, не использовать выход в ринг 0.
уф...это уже третяя попытка...описал понятно как только мог
> Не подскажет ли кто нибудь как мне решить лучше всего данну > траблу... > Чуствуется что здесь есть известное простое решение а > изобретать лесопед заново не хочется... > вообщем ситуация: > я, вирус, загруженный из файла (прогии...)...мне надо этот > файл проредактировать (точнее , вылечить) но так что бы я > сам себя не удалил. Но дело в том, что я не могу > редактировать свой файл пока он запущен... > В этом и проблема. > Вот возникла идея создать другой процесс (но не нить!), > старый процесс закрыть, и из нового все сделать...но > CreateProccess требует исполняемого файла, а держать его > копию внутри вируса расточительно и как то некрасиво...а > нельзя кстати создать безфайловый процесс? > > Заранее большое спасибо.. CreateRemoteThread(...)
sdes` pro eto uzhe pisalos` i ne raz.
[Win32] О модифицировании запущенного файла...13.03.02 02:36 Автор: ih8u <i hate you> Статус: Member
> > CreateRemoteThread(...) > > sdes` pro eto uzhe pisalos` i ne raz. > > А оно случайно не только для выньНТ работает?? в хелпах написано:
Windows NT: The handle must have PROCESS_CREATE_THREAD access. For more information
интересно какие процессы в НТ заведомо существуют и дают делать в себе нити?
[Win32] О модифицировании запущенного файла...13.03.02 16:44 Автор: ih8u <i hate you> Статус: Member
> Тока что в хелпе по WINAPI читал: видимо у тебя другой хелп...у меня по другому написано...на всякий слуяай я решил проверить, оказалось что функция в 98-ой винде (SE) есть такая..
прога:
<p>
.386p
.model flat
extrn GetModuleHandleA:PROC
extrn ExitProcess:PROC
extrn GetProcAddress:PROC
.data
NCreateRemoteThread db 'CreateRemoteThread',0
Kernel32N db "KERNEL32.dll",0
> а ещё в 9х есть все функции, оканчивающиеся на W, но это не > значит, что 9х понимает unicode :) ну хорошо...а что тогда надо сделать чтобы полностью удостовериться что какая либо апи-функция в винде есть?
вызывать я ее пробовал, но видимо с параметрами намудил, поэтому она всегда 0 возращала
> ну хорошо...а что тогда надо сделать чтобы полностью > удостовериться что какая либо апи-функция в винде есть? > вызывать я ее пробовал, но видимо с параметрами намудил, > поэтому она всегда 0 возращала
она ноль возвращает не потому что ты намудил, а потому что билл гейтс намудил :)
посмотри в отладчике или дизассемблере что внутри этой функции
там будет что то типа
xor eax, eax
ret N
в MSDN же написано, что нет этой функции в 9х, значит её там и правда нет
если уж MS пишет что что то не работает, значит оно и правда не работает :)
вот если пишет что работает, то это ещё не факт, что оно и правда работает :))
гы гы гы :)15.03.02 19:08 Автор: vh <Дмитрий> Статус: Member
> > ну хорошо...а что тогда надо сделать чтобы полностью > > удостовериться что какая либо апи-функция в винде > есть? > > вызывать я ее пробовал, но видимо с параметрами > намудил, > > поэтому она всегда 0 возращала > > она ноль возвращает не потому что ты намудил, а потому что > билл гейтс намудил :) > посмотри в отладчике или дизассемблере что внутри этой > функции > там будет что то типа > xor eax, eax > ret N > проверил бы..да софтайс глючит :)...будь добр проверь сам и опубликуй плиз код, что находится по адресу 84f30150
гы гы гы гы гы гы :)))))))17.03.02 19:43 Автор: Biasha <Бяша> Статус: Member Отредактировано 17.03.02 19:46 Количество правок: 1
Точнее:
// Возможно: if (IsCurrent(hProcess)) return CreateThread(…);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
> > xor eax, eax > > ret N
> проверил бы..да софтайс глючит :)...будь добр проверь сам и > опубликуй плиз код, что находится по адресу 84f30150
У меня 9х нет, но:
Джеффри Рихтер: Programming Applications for Microsoft Windows (4th edition):
In Windows 98, the CreateRemoteThread function has no useful implementation
and simply returns NULL; calling GetLastError returns ERROR_CALL_NOT_IMPLEMENTED.
(The CreateThread function contains the complete implementation of the code
that creates a thread in the calling process.) Because CreateRemoteThread
is not implemented, you cannot use this technique to inject a DLL under
Windows 98.
---
MSDN Library - January 2002:
Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.
---
Альтернативный способ создания потока в чужом процессе (работающего почти всегда (при наличии цикла сообщений и прав), во всех виндах) я описывал когда-то на этой доске.
Люди, а вы ваще MSDN читаете? 14.03.02 10:34 Автор: Bender Статус: Незарегистрированный пользователь
Короче, что бы CreateRemoteThread заюзать, нужно что бы в Remote процессе уже БЫЛА функция, которая этот самый remote thread реализует.
Т.е. для начала, вы должны в чужой поток свой код впрыснуть (как в бо2к) а потом уж о remote thread говорить...
[Win32] О модифицировании запущенного файла...12.03.02 17:35 Автор: ih8u <i hate you> Статус: Member