![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить программный код [D7]
UMU © (2006-08-10 16:16:00)Помогите, пожайлуста, с таким вопросом:
Как программно, при определенном условии, можно удалить часть кода?
UMU (2006-08-12 19:09:00) [1]
> !_SM_! (11.08.06 16:15) [24]
Спасибо.
В понедельник опробую
!_SM_! (2006-08-11 17:57:00) [2]> [25] novill © (11.08.06 17:14)
Может...надо попробовать.
Я не пробывал ничего менять, работает как есть.
Да и не надо мне это было, так ради интереса.
novill (2006-08-11 17:14:00) [3]Может, в этих двух строчках стоит использовать @metka1 вместо @TForm1.Button1Click ?
ptrAddr := @TForm1.Button1Click;
VirtualProtect(@TForm1.Button1Click, 2048, PAGE_READWRITE, @dwOldProtect);
Иначе теряется смысл существования процедуры metka1.
!_SM_! (2006-08-11 16:15:00) [4]> [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.
UMU (2006-08-11 15:25:00) [5]
> !_SM_! (11.08.06 02:19) [20]
> пример... У меня где то есть не помню где. Надо... поисчу.
> .?
Конечно надо. Буду благодарен.
Gydvin (2006-08-11 06:50:00) [6]
> Здесь на форуме давнооооо как то был пример, даже и не помню
> кто приводил... Там по нажатию одной кнопки (на форме их
> две) зашифровывался/расшифровывался код второй. Прикольный
> пример... У меня где то есть не помню где. Надо... поисчу.
> .?
Уточнение. Зашифровывался так, что даже винда не понимает, как выполнять?
!_SM_! (2006-08-11 02:21:00) [7]> [19] Gydvin © (10.08.06 22:27)
Извеняюсь, Выше пост наверное автору надо переадресовать...
!_SM_! (2006-08-11 02:19:00) [8]> [19] Gydvin © (10.08.06 22:27)
Здесь на форуме давнооооо как то был пример, даже и не помню кто приводил... Там по нажатию одной кнопки (на форме их две) зашифровывался/расшифровывался код второй. Прикольный пример... У меня где то есть не помню где. Надо... поисчу..?
> Один фиг при выполнение нужно расшифровывать, а там уже
> и дамп с памяти недолго снять.
Или что тебе надо что-бы при определенных условиях было?
Удали Exeшник вооще...
Gydvin (2006-08-10 22:27:00) [9]
> А мож просто шифровать код. Можно и вовремя выполнения проги.
> И ей же (этой прогой)
Как?
> шифровать код.
Чем?
Один фиг при выполнение нужно расшифровывать, а там уже и дамп с памяти недолго снять.
ЗЫ. Притча о велосипедах ИМХО
!_SM_! (2006-08-10 21:52:00) [10]> [0] UMU © (10.08.06 16:16)
А мож просто шифровать код. Можно и вовремя выполнения проги. И ей же (этой прогой)
> при определенном условии
шифровать код.
Gydvin (2006-08-10 21:18:00) [11]Да пускай свои ехе-шники портит, чужие не так просто аккуратно почикать.
Anatoly Podgoretsky (2006-08-10 20:13:00) [12]Это диверсия.
Gydvin (2006-08-10 18:30:00) [13]читаем весь файл меняем символы, пишем файл
Gydvin (2006-08-10 18:01:00) [14]перепутал не #90 а #144 и на последнем символе #195
UMU (2006-08-10 17:49:00) [15]Gydvin, спасибо
Gydvin (2006-08-10 17:45:00) [16]соответственно пациент должен быть деактивирован
Gydvin (2006-08-10 17:44:00) [17]Знать с какого по счету символа начинается кусок кода и знать его длину, в этом поможет - ollydbg.exe и calc.exe (инженерный вид), потом blockread (читаем в строку)
for x:=1 to длина строки do строка[x]:=#90
blockwrite (пишем строку)
Jeer (2006-08-10 17:41:00) [18]не получится.
Виндовс пошле, ну сам знаешь куда.
Потом юзеры догонят и донаправят.
UMU (2006-08-10 17:30:00) [19]Из самой программы - я переборщил.
Как это можно сделать при помощи постороней программы?
Плохиш (2006-08-10 17:03:00) [20]
> UMU © (10.08.06 16:40) [6]
> Безвозвратно, т.е.чтобы exe файл сам себя испортил
Афиге... о, пардон, мы в начинающих. Ответ - никак из самой программы.