Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.035 c
15-1154860777
PZ
2006-08-06 14:39
2006.09.03
День железнодорожника


2-1155633400
kiwooo
2006-08-15 13:16
2006.09.03
HexToStr


1-1153459612
KygECHuK
2006-07-21 09:26
2006.09.03
Как получить иконку ?


15-1155113314
DelphiLexx
2006-08-09 12:48
2006.09.03
Нужен русский Help к RxLib


15-1155009545
vidiv
2006-08-08 07:59
2006.09.03
решение системы неравенств





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский