Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
ВнизУдалить программный код Найти похожие ветки
← →
UMU © (2006-08-10 16:16) [0]Помогите, пожайлуста, с таким вопросом:
Как программно, при определенном условии, можно удалить часть кода?
← →
Сергей М. © (2006-08-10 16:27) [1]Прямо так и удалить:
if Predefined_Condition then
DeleteSomePartOfProgramCode(PartNumber);
← →
Джо © (2006-08-10 16:34) [2]> Как программно, при определенном условии, можно удалить
> часть кода?
Что под этим подразумевается? То есть как удалить: в корзину, что-ли, под столом? 8-)
← →
UMU © (2006-08-10 16:37) [3]Можно и в корзину :)
← →
KilkennyCat © (2006-08-10 16:39) [4]if my2 not nujna then delete("my2.dll")
← →
Сергей М. © (2006-08-10 16:39) [5]if Predefined_Condition then
MoveSomePartOfProgramCodeToRecycle(PartNumber);
← →
UMU © (2006-08-10 16:40) [6]
> Что под этим подразумевается?
Безвозвратно, т.е.чтобы exe файл сам себя испортил
← →
KilkennyCat © (2006-08-10 16:45) [7]if Predefined_Condition then
MoveSomePartOfProgramCodeToRecycleWithoutRecovery(PartNumber);
← →
Плохиш © (2006-08-10 17:03) [8]
> UMU © (10.08.06 16:40) [6]
> Безвозвратно, т.е.чтобы exe файл сам себя испортил
Афиге... о, пардон, мы в начинающих. Ответ - никак из самой программы.
← →
UMU © (2006-08-10 17:30) [9]Из самой программы - я переборщил.
Как это можно сделать при помощи постороней программы?
← →
Jeer © (2006-08-10 17:41) [10]не получится.
Виндовс пошле, ну сам знаешь куда.
Потом юзеры догонят и донаправят.
← →
Gydvin © (2006-08-10 17:44) [11]Знать с какого по счету символа начинается кусок кода и знать его длину, в этом поможет - ollydbg.exe и calc.exe (инженерный вид), потом blockread (читаем в строку)
for x:=1 to длина строки do строка[x]:=#90
blockwrite (пишем строку)
← →
Gydvin © (2006-08-10 17:45) [12]соответственно пациент должен быть деактивирован
← →
UMU © (2006-08-10 17:49) [13]Gydvin, спасибо
← →
Gydvin © (2006-08-10 18:01) [14]перепутал не #90 а #144 и на последнем символе #195
← →
Gydvin © (2006-08-10 18:30) [15]читаем весь файл меняем символы, пишем файл
← →
Anatoly Podgoretsky © (2006-08-10 20:13) [16]Это диверсия.
← →
Gydvin © (2006-08-10 21:18) [17]Да пускай свои ехе-шники портит, чужие не так просто аккуратно почикать.
← →
!_SM_! (2006-08-10 21:52) [18]> [0] UMU © (10.08.06 16:16)
А мож просто шифровать код. Можно и вовремя выполнения проги. И ей же (этой прогой)
> при определенном условии
шифровать код.
← →
Gydvin © (2006-08-10 22:27) [19]
> А мож просто шифровать код. Можно и вовремя выполнения проги.
> И ей же (этой прогой)
Как?
> шифровать код.
Чем?
Один фиг при выполнение нужно расшифровывать, а там уже и дамп с памяти недолго снять.
ЗЫ. Притча о велосипедах ИМХО
← →
!_SM_! (2006-08-11 02:19) [20]> [19] Gydvin © (10.08.06 22:27)
Здесь на форуме давнооооо как то был пример, даже и не помню кто приводил... Там по нажатию одной кнопки (на форме их две) зашифровывался/расшифровывался код второй. Прикольный пример... У меня где то есть не помню где. Надо... поисчу..?
> Один фиг при выполнение нужно расшифровывать, а там уже
> и дамп с памяти недолго снять.
Или что тебе надо что-бы при определенных условиях было?
Удали Exeшник вооще...
← →
!_SM_! (2006-08-11 02:21) [21]> [19] Gydvin © (10.08.06 22:27)
Извеняюсь, Выше пост наверное автору надо переадресовать...
← →
Gydvin © (2006-08-11 06:50) [22]
> Здесь на форуме давнооооо как то был пример, даже и не помню
> кто приводил... Там по нажатию одной кнопки (на форме их
> две) зашифровывался/расшифровывался код второй. Прикольный
> пример... У меня где то есть не помню где. Надо... поисчу.
> .?
Уточнение. Зашифровывался так, что даже винда не понимает, как выполнять?
← →
UMU © (2006-08-11 15:25) [23]
> !_SM_! (11.08.06 02:19) [20]
> пример... У меня где то есть не помню где. Надо... поисчу.
> .?
Конечно надо. Буду благодарен.
← →
!_SM_! (2006-08-11 16:15) [24]> [22] Gydvin © (11.08.06 06:50)
> Уточнение. Зашифровывался так, что даже винда не понимает,
> как выполнять?
Винда, она много чего не понимает:)))
А зачем его выполнять если автор хочет его вообще удалить?
Вот нашел. Попробуй. Может этого будет достаточно при определенных услувиях?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure metka1;
//Начальная метка - нужна что бы находить потом в exe файле эти символы и знать
//откуда начинать шифровать
//Здесь метка представляет из себя десятичные числа от 0 до 256 через запятые
//Если метка 50,60,70,80,90 то это соответствует символам 2<FPZ
//Кстати, такого кол-во символов в метке может быть мало и лучше использовать больше
//Т.к если программа большая то такие последовательности могут встретиться не один раз
begin
asm
DB 50,60,70,80,90,30 //2<FPZ это метка начальная
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
ShowMessage("Код не зашифрован, работает нормально!"#13"Нажмите нижнию кнопку"#13"для шифровки кода кнопки "Message"");
end;
Procedure metka2;
//Конечная метка - нужна чтобы знать до куда нужно шифровать в файле и
//докуда расшифровывать в памяти
begin
asm
DB 68,68,67,45,61,55 //DDA-= это метка конечная
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
//Процедура Расшифрования(В даном примере и зашифрования)
var
ptrAddr: Pointer; {для Адреса процедуры вывода сообщения}
dwOldProtect: DWORD;
begin
ptrAddr := @TForm1.Button1Click;//Получаем адрес процедуры вывода сообщения
VirtualProtect(@TForm1.Button1Click, 2048, PAGE_READWRITE, @dwOldProtect);
//2048 это размер в байтах с которыми можно работать(по моему)
//Если процедура большая то нужно подбирать соответствующий размер
while ptrAddr <> @metka2 do //шифрование(слабое) выполняем пока не дойдем то конечной метки
begin
Byte(ptrAddr^) := Byte(ptrAddr^) xor $41;
//каждый байт в памяти ксорится с кодом 65"A"(к примеру)
//Используйте более надёжные алгоритмы шифрования
inc(Integer(ptrAddr));
end;
if Button2.Tag=0 then begin Button2.Tag:=1; Button2.Caption:="Расшифровать код кнопки "Message""; end
else begin
Button2.Tag:=0; Button2.Caption:="Зашифровать код кнопки "Message"";
end;
exit; //нужно так сделать что б компилятор включил эти процедуры
metka1;//в код,т.к Delphi не вставляет в результирующий код процедуры,
metka2;//которые никогда не используются
end;
//Такое шифрование взято для примера и не рекомендуется для использования серьёзной защиты
//Также рекомендуется использовать и проверочную контрольную сумму для проверки
//целостности кода программы.
//Теперь осталось только сделать отдельную программу которая искала бы
//в этом exe файле начальную и конечную метки и шифровало бы всё между ними
//
//Но для демонстрации можно посмотреть результат и сейчас
//Запустите программу и нажмите на кнопку 1 -Должно вывестись сообщение и звук.сигнал
//А если нажать на кнопку 2 - то прцедура нажатия на кнопку 1 зашифруется
//И если после этого нажать на кнопку 1 -то должно произойти что-то не предсказуемое
//т.к процедура зашифрованна и что-то нормального вы не увидите.
//Источник информации: CopyRight «Королевства Delphi»
//"Защита от несанкционированного использования программ, написанных на Delphi"
end.
← →
novill © (2006-08-11 17:14) [25]Может, в этих двух строчках стоит использовать @metka1 вместо @TForm1.Button1Click ?
ptrAddr := @TForm1.Button1Click;
VirtualProtect(@TForm1.Button1Click, 2048, PAGE_READWRITE, @dwOldProtect);
Иначе теряется смысл существования процедуры metka1.
← →
!_SM_! (2006-08-11 17:57) [26]> [25] novill © (11.08.06 17:14)
Может...надо попробовать.
Я не пробывал ничего менять, работает как есть.
Да и не надо мне это было, так ради интереса.
← →
UMU © (2006-08-12 19:09) [27]
> !_SM_! (11.08.06 16:15) [24]
Спасибо.
В понедельник опробую
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.03;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.038 c