PDA

View Full Version : بستن دو پروسه با هم



Mask
دوشنبه 13 آبان 1387, 21:10 عصر
با سلام به همه دوستان گلم.
یه ویروس روی سیستم بنده هست که کار جالبی انجام میده .
دو تا پروسه در تسک منیجر وجود داره که هر کدوم رو می بندم اون یکی اولی رو دوباره زنده میکنه. و به همین ترتیب .
دومی رو که می بندم اولی دوباره لودش میکنه.
به نظر شما چطوری میشه همزمان دو تا پروسه رو بست.
با تشکر.

دنیای دلفی
دوشنبه 13 آبان 1387, 21:38 عصر
يك برنامه بنويس كه دو تا را عم زمان ببنده با اين كار اولي يا دومي فرصت توليد بعدي را ندارد .
اين هم كد :


function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeF ile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end;

CloseHandle(FSnapshotHandle);
end;

نحوه استفاده
KillTask('Splash.exe');

Mask
سه شنبه 14 اردیبهشت 1389, 18:08 عصر
این کد کار نمیده الان.
دوستان راه حله دیگه ای ندارن.

Felony
سه شنبه 14 اردیبهشت 1389, 21:55 عصر
به وسیله کامپوننت processInfo آقای کشاورز میتونید این کار رو انجام بدید .

Mask
سه شنبه 14 اردیبهشت 1389, 22:23 عصر
اگه ممکنه یه نمونه بزارید.
ممنون.

Felony
سه شنبه 14 اردیبهشت 1389, 22:50 عصر
ProcessInfo1.RunningProcesses.FindByName('A.exe'). TerminateProcess;
ProcessInfo1.RunningProcesses.FindByName('B.exe'). TerminateProcess;
البته به این نکته دقت کنید که علی آقا چند وقت پیش کامپونت ProcessInfo رو به روز رسانی کردن و چند تا از قابلیت ها رو تغییر دادن که در سایت خودشون کامل توضیح داده شده ، فقط اگر از ورژن به روز نشده استفاده میکنید باید قبل از فراخوانی این کد متد UpdateList کامپوننت رو فراخوانی کنید ولی در ورژن جدید این متد به صورت اتوماتیک در زمان ساخت کامپوننت فراخوانی میشه و با پیغام خطا مواجه نمیشید .
کد برای استفاده از ورژن به روز نشده :

ProcessInfo1.UpdateList;
ProcessInfo1.RunningProcesses.FindByName('A.exe'). TerminateProcess;
ProcessInfo1.RunningProcesses.FindByName('B.exe'). TerminateProcess;

Mask
سه شنبه 14 اردیبهشت 1389, 22:59 عصر
سایت خودشون کامل توضیح داده شده
میشه سایتشون رو بزارید.
و دوم اینکه لینک دانلود ورژن جدیده ProcessInfo رو هم اگه ممکنه.
من یه نمونشو دارم. حالا نمیدونم جدیدست یا قدیمی؟

Felony
سه شنبه 14 اردیبهشت 1389, 23:46 عصر
دومین پست سایتشون هست : www.vcldeveloper.com

vcldeveloper
چهارشنبه 15 اردیبهشت 1389, 00:14 صبح
به وسیله کامپوننت processInfo آقای کشاورز میتونید این کار رو انجام بدید .
ProcessInfo هم به طور ترتیبی اون Processها را میبنده، نه همزمان؛ مگه اینکه TerminateProcess رو در دو Thread جداگانه اجرا کنید. البته اگر اون دو Process وضعیت همدیگه رو در فواصل زمانی معین (مثلا هر یک ثانیه یک بار) چک می کنند، در اون صورت، همان اجرای پشت سر هم TerminateProcess هم کفایت میکنه، چون اجرای او دو متد به ترتیب در کسری از ثانیه انجام میشه.

یک راه دیگه این میتونه باشه که یکی از Processها را Suspend کنید، و سپس Process دوم را ببندید. بعد از بسته شدن آن، Process اول را که Suspend شده بود، ببندید. این کار رو هم می تونید از طیق برنامه نویسی (مثل همون استفاده از ProcessInfo انجام بدید)، هم از طریق ابزارهایی مثل SysInternals Process Explorer.

lord_viper
چهارشنبه 15 اردیبهشت 1389, 09:23 صبح
راحترین راه اینه که با استفاده از دستور Taskkill یک یچ فایل بسازین برای هر 2 پروسه
البته این کد رو یه 10-20 بار پشت هم copy/paste کنین حتما سته میشن

(این ویروس رو سیستم بود به همین شکل پروسه ها رو بستم)

Felony
چهارشنبه 15 اردیبهشت 1389, 10:27 صبح
البته این کد رو یه 10-20 بار پشت هم copy/paste کنین حتما سته میشن
پس نتیجه میگیریم پروسه های ویروس دارن در فواصل زمانی خاصی زنده بودن پروسه هم رو چک میکنن ، پس میشه کدی که من به وسیله کامپوننت ProcessInfo گزاشتم رو تو یک حلقه مثلا از 0 تا 10 اجرا کرد که پروسه ها رو ببنده .

الته راهی Cyberfox گفت بی دردسر تر هست ، مگر اینکه بخواین برای این ویروس یک آنتی بنویسید .

Mask
چهارشنبه 15 اردیبهشت 1389, 13:07 عصر
الته راهی Cyberfox گفت بی دردسر تر هست ، مگر اینکه بخواین برای این ویروس یک آنتی بنویسید .
ممنون.
تو همین فکرم.
الان دچار یه مدل دیگه شدم.
اونم اینه که دوتا پروسه همدیگه رو چک میکنن اگه یکیشون نبود سیستم رو ری استارت میکنن.
حالا باید چیکار کرد؟
فکر کنم اون قضیه Suspend که علی آقا فرمودند بهتر باشه.
چون این دو پروسه وجود همو چک میکنن نه اجرا بودنشون رو.
خوب این Suspend رو با برنامه نویسی چطوری باید انجام داد؟
ممنون.

vcldeveloper
چهارشنبه 15 اردیبهشت 1389, 13:16 عصر
خوب این Suspend رو با برنامه نویسی چطوری باید انجام داد؟
همون ProcessInfo براتون انجام میده.