Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "Основна";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

Вниз

Як стерти самого себе Знайти схожі гілки


Артем Владимирович   (2004-11-27 13:32) [0]

Шановні Майстри! Будь ласка, підкажіть чому не працює даний код:

var filename: string; atempBuf: array [0..MAX_PATH] of char; bat_file: string; f: textfile; si: TStartupInfo; pi: TProcessInformation; begin filename: = application.ExeName; if GetshortPathName (PChar (filename), atempBuf, sizeof (atempbuf) -1)> 0 then filename: = strpas (atempbuf); GetEnvironmentVariable ( "TEMP", aTempBuf, MAX_PATH); bat_file: = StrPas (aTempBuf) + "\" + "bp.bat"; if GetShortPathName (PChar (bat_file), aTempBuf, sizeof (aTempBuf) -1)> 0 then bat_file: = StrPas (aTempBuf); assignfile (f, bat_file); rewrite (f); writeln (f, "@ echo off"); writeln (f, ": try"); writeln (f, "del" + filename); write (f, "if exists" + Filename); writeln (f, "goto try"); write (f, "del" + bat_file); closefile (f); memo1.lines.LoadFromFile (bat_file); ZeroMemory (@ si, sizeof (si)); si.cb: = sizeof (si); si.wShowWindow: = SW_HIDE; si.dwFlags: = STARTF_USESHOWWINDOW; CreateProcess (nil, PChar (bat_file), nil, nil, false, IDLE_PRIORITY_CLASS or DETACHED_PROCESS, nil, nil, si, pi);

Нічого взагалі не відбувається.



[lamer]Barmaglot ©   (2004-11-27 14:18) [1]

Код не дивився ...
Самого себе під час роботи програми стерти не можна, вона лочітся ...
Для цього зазвичай створюють другу програму яка дивиться коли закінчиться перша і затирає її, або використовують певні ключі в Реєстрі або WinIni ...

Р.S. Писати віруси не добре ...



Артем Владимирович   (2004-11-27 14:21) [2]

По-перше, треба було б спочатку подивитися код - там робиться те, про що Ви говорите.

По-друге, це далеко не вірус. Я попросив б не ображати.



[lamer]Barmaglot ©   (2004-11-27 14:26) [3]

Складно уявляю іншу задачу, при якій довелося б прати себе самого ...
Чим не влаштовують ключі в реєстрі і winini?



Артем Владимирович   (2004-11-27 14:36) [4]

Як, наприклад, програма - реєстраційний ключ. Вона запускається, робить зміни в твоїй іншій програмі і потім видаляється, щоб користувач не зміг передати іншій людині.

А що Ви пропонуєте?



GuAV ©   (2004-11-27 14:36) [5]

Артем Володимирович (27.11.04 13: 32)
write (f, "if exists" + Filename);
writeln (f, "goto try");


write (f, "if exist" + Filename);
writeln (f, "goto try");



[lamer]Barmaglot ©   (2004-11-27 14:39) [6]

NT - MoveFileEx (szSrcFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
// ------------------------------------------------ --------------
для низки W9X - cм. wininit.ini, секція RENAME. Якщо Новов ім'я NUL - файл буде видалений. Імена файлів повинні бути короткі.
секція виглядає так:

[Rename]
NewShortName = OldShortName

для випадку видалення
[Rename]
NULL = ShortFileNameForDelete
ps. 1. Для нт при використанні MoveFileEx + MOVEFILE_DELAY_UNTIL_REBOOT
ім'я файлів, що підлягають перейменуванню, зберігаються в гілці реєстру
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ PendingFileRenameOperations
// ------------------------------------------------ --------------
wininit.ini

[Rename]
nul = c: \ temp \ killit.exe

ps І все таки писати віруси недобре ...



Артем Владимирович   (2004-11-27 14:42) [7]

Та ні, все одно нічого,GuAV.



Артем Владимирович   (2004-11-27 14:44) [8]

Під XP без змін?



[lamer]Barmaglot ©   (2004-11-27 14:47) [9]

А спробувати чи залізти в MSDN?



Anatoly Podgoretsky ©   (2004-11-27 14:48) [10]

Артем Володимирович (27.11.04 14: 36) [4]
Як, наприклад, програма - реєстраційний ключ. Вона запускається, робить зміни в твоїй іншій програмі і потім видаляється, щоб користувач не зміг передати іншій людині.

А що Ви пропонуєте?


Пропоную користувачеві зберегти цю програму до запуску



GuAV ©   (2004-11-27 15:41) [11]

Артем Володимирович (27.11.04 14: 42) [7]

А у мене працює.

Правда ще помилку знайшов - шляхи брати в лапки.

замість від assignfile (f, bat_file); до closefile (f); таке:

with TStringList.Create do try Text: = Format ( "@Echo off" + sLineBreak + ": Try" + sLineBreak + "Del"% 0: s "" + sLineBreak + "If exist"% 0: s "goto try" + sLineBreak + "Del"% 1: s "", [filename, bat_file]); Memo1.Text: = Text; SaveToFile (bat_file); finally Free; end;

Ще краще GetTempPath замість отримання% TEMP%



Артем Владимирович   (2004-11-28 12:39) [12]

Все одно результатів немає. Під XP має працювати? Не розумію в чому справа.



сторінки: 1 вся гілка

Форум: "Основна";
Поточний архів: 2004.12.12;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.6 MB
Час: 0.091 c
3-1100503339
Snake1977
2004-11-15 10:22
2004.12.12
union для стандартного аліаса


3-1100082487
Pertovsky
2004-11-10 13:28
2004.12.12
Десяткові розряди.


3-1100521163
Сер Джон
2004-11-15 15:19
2004.12.12
експорт з SyBase


14-1101124907
Comp
2004-11-22 15:01
2004.12.12
Інсталяція Turbo Assembler 5.0


3-1100317736
під
2004-11-13 06:48
2004.12.12
INFORMATION_SCHEMA в Access





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська