Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.03;
Скачать: CL | DM;

Вниз

Удалить программный код   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.028 c
2-1155372371
Steplerr
2006-08-12 12:46
2006.09.03
CheckBox ы в TreeView е


15-1155280871
GEN++
2006-08-11 11:21
2006.09.03
CRC16 для MODBUS с помощью таблицы


15-1155203846
ArtemESC
2006-08-10 13:57
2006.09.03
Все время хочу спросить и забываю...


2-1155722658
SamProf
2006-08-16 14:04
2006.09.03
Как создать MDI Child форму из DLL ки


4-1146964023
Владимир
2006-05-07 05:07
2006.09.03
Перевод монитора в режим stand-by: грябли