Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизАдреса функций в памяти Найти похожие ветки
← →
FearG0 © (2007-09-27 04:53) [0]Интересует вот какой момент:
Допустим есть процедура:
procedure TForm1.Button1Click(Sender: TObject);
begin
SubProc1;
beep;
ShowMessage("Период использования программы истёк!");
SubProc2;
end;
Если я возьму адреса @SubProc1 и @SubProc2 то в памяти между ними будет находится код
beep;
ShowMessage("Период использования программы истёк!");
?
← →
Zeqfreed © (2007-09-27 05:29) [1]Понятия вызов функции и тело функции не тождественны.
← →
Сергей М. © (2007-09-27 08:05) [2]
> Если я возьму адреса @SubProc1 и @SubProc2 то в памяти между
> ними будет находится код
Нет.
← →
oxffff © (2007-09-27 14:27) [3]...
label X1,X2;
var blocksize:integer;
begin
asm
mov eax,offset x2;
sub eax,offset x1;
mov blocksize,eax;
end;
x1:SubProc1;
beep;
ShowMessage("Период использования программы истёк!");
x2:SubProc2;
showmessage(inttostr(blocksize));
end;
← →
FearG0 © (2007-09-27 15:41) [4]2 oxffff Спасибо за пример.
А вообще можно ли каким-то аналитическим способом узнать нахождение определенного участка кода в exe шнике? Без всяких меток.
← →
Сергей М. © (2007-09-27 15:43) [5]
> можно ли каким-то аналитическим способом узнать
Можно. Например. по сигнатурам.
← →
lpstrlpstr (2007-09-27 15:43) [6]аналитически по сигнатурам )
0хffff написал самое простое и верное решение
← →
FearG0 © (2007-09-27 15:44) [7]А поподробнее, что можно почитать на ту тему?
← →
Сергей М. © (2007-09-27 15:46) [8]
> FearG0 © (27.09.07 15:44) [7]
Ты б хоть обозначил конечную цель всей этой твоей затеи ..
← →
FearG0 © (2007-09-27 15:49) [9]Цель-защита программы.
В программе есть несколько критичных процедур, которые не хочется держать в exe шнике. Идея: затереть эти процедуры внешним воздействием прямо в exe. А в самой программе перед их выполнением обращаться на сервер, забирать оттуда код, перепрашивать процедуру в памяти и выполнять. После выполнения память опять затирать.
← →
Сергей М. © (2007-09-27 15:54) [10]
> FearG0 © (27.09.07 15:49) [9]
> Цель-защита программы
От чего ?
> в самой программе перед их выполнением обращаться на сервер,
> забирать оттуда код
И тем самым ты надеешься ввести потенциального взломщика в заблуждение ?
Наивный)
← →
FearG0 © (2007-09-27 15:59) [11]Защита от взлома.
Дело не в том чтобы ввести в заблуждение.
У меня есть пару процедур которые производят расчеты, без которых смысл программы теряется.
Скомпилированный код я вытащу и сохраню, а в программе затру.
Далее при прохождении кода, программа будет обращаться на сервер, передавать информацию о ключе активации программы и о железе, на сервере сервис будет смотреть на сколько это достоверно, и если все ок отправлять код процедуры в зашифрованном виде программе. Программа расшифрует, перепрошьет свою память и выполнит некогда затертый участок.
← →
homm © (2007-09-27 16:01) [12]> [10] Сергей М. © (27.09.07 15:54)
> От чего ?
От фашистов :)
> И тем самым ты надеешься ввести потенциального взломщика
> в заблуждение ?
Тем самым, кстати, можно вырубить намерть любую возможность кряка незаристрированному на сервере юзеру. Так что идея не столь плоха.
← →
Сергей М. © (2007-09-27 16:06) [13]
> программа будет обращаться на сервер, передавать информацию
> о ключе активации программы и о железе, на сервере сервис
> будет смотреть на сколько это достоверно, и если все ок
> отправлять код процедуры в зашифрованном виде программе.
> Программа расшифрует, перепрошьет свою память и выполнит
> некогда затертый участок
Что стоит взломщику оттрассировать всю эту беду и выяснить оригинальный (т.е. "вырезанный" тобой) код ?
Т.е. процедуру "расчетов" ты защитил, а процедуру "защиты процедуры "расчетов" защитит Аллах ?
← →
Сергей М. © (2007-09-27 16:08) [14]
> homm © (27.09.07 16:01) [12]
> можно вырубить намерть любую возможность кряка незаристрированному
> на сервере юзеру
Да взломщику нахрен не нужно быть зарегистрированным юзером этого хитрозадого сервера - он просто оттассирует всю эту "беду", выяснит оригинальный код, вернет его на место в exe и выкинет "беду", чтобы отныне ей не пахло)
← →
FearG0 © (2007-09-27 16:10) [15]1. При наличие дебаггеров просо вываливаться программе
2. После получения кода с сервера запускать поток, который если прога уж очень долго выполняет этот критичный код будет ее вырубать
3. Внутри кода несколько блоков которые будут проверять целостность программы, путем подсчета CRC и в случае ее патча вываливаться
4. еще что-нить придумаю
Я не сомневаюсь что любую программу можно сломать. Главное сделать так чтобы большинству крякеров стало делать это очень впадлу.
← →
FearG0 © (2007-09-27 16:12) [16]5. Следить за обращениями к моему серверу и если их нет опять же вываливаться
← →
homm © (2007-09-27 16:14) [17]> [13] Сергей М. © (27.09.07 16:06)
> Что стоит взломщику оттрассировать всю эту беду?
Ровно одну стоимость программы :)
← →
Anatoly Podgoretsky © (2007-09-27 16:15) [18]> FearG0 (27.09.2007 16:10:15) [15]
Сомневаюсь, что твое чудо сможет работать, особенно на Висте
← →
Сергей М. © (2007-09-27 16:16) [19]
> 1. При наличие дебаггеров просо вываливаться программе
Ни один сколь-либо серьезный взломщик не позволит твоей программе обнаружить, что она исполняется под отладчиком)
> 2. После получения кода с сервера
.. взломщик уже его знает, поэтому дальнейшие твои потуги со всякими потоками и прочей лабудой попросту смешны
> 3. Внутри кода несколько блоков которые будут проверять
> целостность программы, путем подсчета CRC и в случае ее
> патча вываливаться
Уповать на эти "блоки" такое же заблуждение, как и затея с "бедой"
> не сомневаюсь что любую программу можно сломать
И правильно не сомневаешься)
> Главное сделать так чтобы большинству крякеров стало делать
> это очень впадлу
Анекдот про неуловимого Джо тебе напомнить ?)
← →
Сергей М. © (2007-09-27 16:19) [20]
> 4. еще что-нить придумаю
>
С этого пункта и начни.
Если твоя программа чего-то действительно стоит, обратить к профессионалам по защите и не изобретай детские велосипеды.
Профессионалы защищают программы аппаратными ключами или с помощью хитрозадых манипуляций с кодом в режиме ядра.
← →
FearG0 © (2007-09-27 16:22) [21]
> Анекдот про неуловимого Джо тебе напомнить ?)
Нет не надо.
Смысл не в том что программу взломают, а смысл в том что защита должна быть. И желательно посложнее.
Все мои идеи далеко не новы. Да они обходятся, но блин не выпускать же программу с надежой на donate? Тем более я уже это проходил.
Давайте вместе придумаем что-нибудь оригинальное, что было бы не слишком геморное для нас кодеров и наоборот для крякеров.
В конце концов я выпускаю программу под определенную аудиторию, это не фотошоп и не виндовс, который ринутся ломать пол планеты.
Итак. Идеи есть?
← →
FearG0 © (2007-09-27 16:27) [22]
> аппаратными ключами
Не подходит так как гемор для покупателей. Тогда они купят продукты конкурентов.
> хитрозадых манипуляций с кодом в режиме ядра
По моему это уже очень сложно реализуемо начиная с ВинХП
← →
Сергей М. © (2007-09-27 16:35) [23]
> защита должна быть
Защита от ЧЕГО ?
От несанкционированного использования программы в целом ?
От несанкционированного использования твоих собственных оригинальных алгоритмов, реализованных в коде программы?
← →
Сергей М. © (2007-09-27 16:38) [24]
> > хитрозадых манипуляций с кодом в режиме ядра
>
> По моему это уже очень сложно реализуемо начиная с ВинХП
Погугли-ка, не скажем, по теме "Themida"..
← →
Сергей М. © (2007-09-27 16:39) [25]
> не скажем
ну скажем
← →
FearG0 © (2007-09-27 16:39) [26]К сожалению, и от того и от другого.
Но важнее первое. Если в сети или на каких-то узкоспециальных форумах появится кейген или патч на прогу, мало того что я потеряю свои честно заработанные, так еще и куча ламеров с этой прогой много нехороших вещей натворят.
← →
Сергей М. © (2007-09-27 16:44) [27]
> FearG0 © (27.09.07 16:39) [26]
А тот самый твой "сервер", фигурирующий в "беде", достаточно надежен в плане взлома и несанкц.доступа ?
Ну дык вынеси ты свои "суперпуперсекретные" алгоритмы на сторону сервера - в чем проблема-то ?)
← →
Anatoly Podgoretsky © (2007-09-27 16:45) [28]> FearG0 (27.09.2007 16:39:26) [26]
Тогда лучше сразу сдавайся правоохранительным органам.
← →
Сергей М. © (2007-09-27 16:47) [29]
> Anatoly Podgoretsky © (27.09.07 16:45) [28]
Толя, не пугай парня)
Мне кажется, он пока еще адекватен)
← →
Anatoly Podgoretsky © (2007-09-27 16:49) [30]> Сергей М. (27.09.2007 16:47:29) [29]
Ну так это же он пожаловался.
Но я не пойму, раз работа ведется с сервером, то почему ему не поручить эту работу и взламывать будет нечего, кроме сервера, а это уже особый и совсем другой случай. У него же просто благоприятные условия для защиты, идеальные, именно те о которых только мечтает Микрософт.
← →
Сергей М. © (2007-09-27 16:50) [31]
> Идеи есть?
Для малохольных взломщиков, если угодно, есть еще идея реализации тобой самомодифицирующегося кода. Но вряд ли ты ее потянешь)
← →
Сергей М. © (2007-09-27 16:52) [32]
> Anatoly Podgoretsky © (27.09.07 16:49) [30]
> раз работа ведется с сервером, то почему ему не поручить
> эту работу
дык - так точно, сэр !
В этих условиях сервер - первый и последний бастион)
← →
FearG0 © (2007-09-27 17:01) [33]
> Но вряд ли ты ее потянешь
Сто пудов не потяну. Но на будущее не плохо было бы ознакомиться.
На сервер вынести не могу потому что код ресурсоемкий, и если хотя бы 50 человек одновременно потребуют от сервера решения своей задачи, то он накроется медным тазом.
За Themida и WinLicence спасибо, очень интересные программы судя по нытью во многих форумах как взломать, возможно стоит приобрести лицензию. Но вот проблема, чем большим крякерам такая защита сломала жизнь тем больше ее будут пытаться сломать.
Ваши мысли сколько потребуется времени чтобы сломать программу с защитой от Themida?
← →
Сергей М. © (2007-09-27 17:03) [34]
> сколько потребуется времени чтобы сломать программу с защитой
> от Themida?
Если китайцы будут продолжать ломать - ну пару лет максимум)
← →
Сергей М. © (2007-09-27 17:10) [35]
> FearG0 © (27.09.07 17:01) [33]
А вот с AES-128 (aka Rijndael), реализованным в современных аппаратных ключах, скажем, от Алладина, дело обстоит явно посложней Темиды.
Так что выбирай, куда вложить деньги, если оно того стоит.
← →
FearG0 © (2007-09-27 17:10) [36]Отлично. Мне это подходит. Эхх вот бы они еще WebMoney принимали вообще сказка бы была.
Как думаете стоит ли сочетать Themida со своей защитой или понадеяться только на нее. И вообще кто-нибудь имел опыт работы с ней? К Делфи она вообще прикручивается?
← →
FearG0 © (2007-09-27 17:47) [37]Однако не так хороша Themida как показалась сначала
hxxp://cracklab.ru/f/index.php?action=vthread&forum=1&topic=8643&page=3
← →
Anatoly Podgoretsky © (2007-09-27 18:31) [38]> FearG0 (27.09.2007 17:10:36) [36]
Надеяться надо в первую очередь на голову, навесная защита всего лишь инструмент.
← →
FearG0 © (2007-09-27 18:32) [39]Решено остановиться на Themida так как аналоги все в 2-3 раза дороже, и есть надежда что пока появится распаковщик новой версии, я уже выпущу новый релиз запакованный как-то похитрее.
Но одной защитой все таки не обойтись и поэтому вернемся к нашим баранам.
1. Как определить что участок кода в exe соответствует именно моей процедуре в сорце.
2. Как патчить процедуру в памяти.
У кого есть какая информация поделитесь.
Для размышлений предлагается старая статейка от DDA
procedure metka1;
//Начальная метка - нужна что бы находить потом в exe файле эти символы и знать
//откуда начинать шифровать
//Здесь метка представляет из себя десятичные числа от 0 до 256 через запятые
//Если метка 50,60,70,80,90 то это соответствует символам 2<FPZ
//Кстати, такого кол-во символов в метке может быть мало и лучше использовать больше
//Т.к если программа большая то такие последовательности могут встретиться не один раз
begin
asm
DB 50,60,70,80,90 //2<FPZ это метка начальная
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
beep;
ShowMessage("Период использования программы истёк!");
end;
procedure metka2;
//Конечная метка - нужна чтобы знать до куда нужно шифровать в файле и
//докуда расшифровывать в памяти
begin
asm
DB 68,68,67,45,61 //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;
exit; //нужно так сделать что б компилятор включил эти процедуры
metka1; //в код,т.к Delphi не вставляет в результирующий код процедуры,
metka2; //которые никогда не используются
end;
← →
vpbar © (2007-09-27 19:09) [40]
> FearG0 © (27.09.07 16:10) [15]
> 1. При наличие дебаггеров просо вываливаться программе
> 2. После получения кода с сервера запускать поток, который
> если прога уж очень долго выполняет этот критичный код будет
> ее вырубать
> 3. Внутри кода несколько блоков которые будут проверять
> целостность программы, путем подсчета CRC и в случае ее
> патча вываливаться
> 4. еще что-нить придумаю
Если ты это реализовал, то тогда непонятно в чем проблема с сабжем, после того как сумел обмануть дебагеры - сабж это чепуха.
Если еще не реализовал, тогда бегом на WASM .ru читать до просветления. А потом можно на http://www.cracklab.ru/ посмотреть на противника :) хотя они там щас сонные. И тогда вопросы типа
"1. Как определить что участок кода в exe соответствует именно моей процедуре в сорце.
2. Как патчить процедуру в памяти." Отпадут.
А если время дороже - купи готовое решения, типа тех что предлагали выше.
← →
FearG0 © (2007-09-27 19:33) [41]Читать теорию это все конечно хорошо и ознакомиться можно.
Но -
1. сроки поджимают
2. Тонны мануалов никогда не заменят 1-2 примера
3. Если кто сталкивался подскажите хороший источник где такая тема уже поднималась, обсуждалась и реализовывалась. В гугл посылать не надо, уже почитываю что там есть.
← →
vpbar © (2007-09-27 20:32) [42]>>FearG0 © (27.09.07 19:33) [41]
1. сроки поджимают
- купите готовое решение
2. Тонны мануалов никогда не заменят 1-2 примера
- 1-2 примера никогда не заменят теорию
3. Если кто сталкивался подскажите хороший источник где такая тема уже поднималась, обсуждалась и реализовывалась. В гугл посылать не надо, уже почитываю что там есть.
- я сталкивался. Источник посоветовал.
← →
vpbar © (2007-09-27 20:45) [43]Но если кратко.
1. Как определить что участок кода в exe соответствует именно моей процедуре в сорце.
определяем адрес процедуры и длину (можно просканить до первого ret)
если адрес кода входит в этот диапазон - то это та процедура
2. Как патчить процедуру в памяти.
для начала ставим возможность записи для секции кода, запрещаем винде всякие ругательства типа DEP потом пишем по нужному адресу.
В делфе можно привести адрес к PChar и писать туда.
← →
FearG0 © (2007-09-27 21:33) [44]
> 1. Как определить что участок кода в exe соответствует именно
> моей процедуре в сорце. определяем адрес процедуры и длину
> (можно просканить до первого ret)
Можно алгоритм или кусок кода если не тяжело?
← →
oxffff © (2007-09-27 22:00) [45]
> FearG0 © (27.09.07 21:33) [44]
>
> > 1. Как определить что участок кода в exe соответствует
> именно
> > моей процедуре в сорце. определяем адрес процедуры и длину
>
> > (можно просканить до первого ret)
>
> Можно алгоритм или кусок кода если не тяжело?
Даже, если выдрать этот кусок. Просто вставить в другую программу не получится в подавляющем большинстве случаев .
Больше ничего не скажу. :)
P.S. Чтение мне не раз помогало. А вам?
← →
FearG0 © (2007-09-27 22:04) [46]Ну дайте мне алгоритм хотя бы.
← →
FearG0 © (2007-09-27 22:08) [47]
> Больше ничего не скажу. :)
Форт Боярд блин
← →
oxffff © (2007-09-27 22:09) [48]
> FearG0 © (27.09.07 22:08) [47]
>
> > Больше ничего не скажу. :)
>
> Форт Боярд блин
Да я такой. :)
← →
oxffff © (2007-09-27 22:11) [49]
> FearG0 © (27.09.07 22:04) [46]
> Ну дайте мне алгоритм хотя бы.
Какой?
Я разве непонятно написал? в [45].
← →
oxffff © (2007-09-27 22:13) [50]
> FearG0 © (27.09.07 22:04) [46]
> Ну дайте мне алгоритм хотя бы.
Ответь мне, почему код выдранный из другой программы не будет работать?
← →
vpbar © (2007-09-27 22:20) [51]не нашел. пришлось писать. может и не красиво, но работает.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ButtonCall: TButton;
ButtonPath: TButton;
procedure ButtonPathClick(Sender: TObject);
procedure ButtonCallClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
type TProc = function(): integer;
var codeBuffer:String;
{$R *.dfm}
function XakThis: integer;
begin
result := 1000;
end;
procedure TForm1.ButtonPathClick(Sender: TObject);
var FirstByteOfCode, EndByteOfCode: PChar;
SizeOfProc: Integer;
MarkerCount: Byte;
const OpCod_Ret = $C3;
begin
//XakThis;
FirstByteOfCode := @XakThis;
EndByteOfCode := FirstByteOfCode;
MarkerCount := 0;
while Byte(EndByteOfCode^) <> OpCod_Ret do
inc(EndByteOfCode);
//это не будет работать если в коде процедуры есть байт $C3
//для точного вычисления надо делать минидизассемблер с расчетом длины инструкций
//но проще ставить более менее уникальный маркер в конце процедуры
//или определять размер процедуры из map файла.
SizeOfProc := integer(EndByteOfCode) - integer(FirstByteOfCode);
//b8d0070000
//патчим процедуру надо разрешить запись в секцию
inc(FirstByteOfCode);
FirstByteOfCode^:=#$d0;
inc(FirstByteOfCode);
FirstByteOfCode^:=#$07;
inc(FirstByteOfCode);
FirstByteOfCode^:=#$00;
inc(FirstByteOfCode);
FirstByteOfCode^:=#$00;
end;
procedure TForm1.ButtonCallClick(Sender: TObject);
var proc: TProc;
begin
Caption := inttostr(XakThis);
end;
end.
← →
FearG0 © (2007-09-27 22:20) [52]
> Ответь мне, почему код выдранный из другой программы не
> будет работать?
Я понял. Это квест такой. Отвечаешь на вопросы, а тебе за это код дают и разные бонусы)))
Можно подсказку?
1. В памяти процедуры и функции имеют такой же размер как в exe
2. В памяти они располагаются так же как в exe?
← →
vpbar © (2007-09-27 22:21) [53]да. предугадывая вопрос. Для правки секций я пользовался CFF Explorer - рекомендую.
← →
FearG0 © (2007-09-27 22:27) [54]2 vpbar
Огромное спасибо за код и рекомендацию - пошел разбираться.
← →
vpbar © (2007-09-27 22:31) [55]1. В памяти процедуры и функции имеют такой же размер как в exe
размер - да
2. В памяти они располагаются так же как в exe?
нет
ЗЫ Пожалста. Но не понимая что вы делаете, результата добьетесь не скоро. Ибо будут ошибки на пустом месте. В частности если в приведенном примере написать не FirstByteOfCode^:=#$00; а FirstByteOfCode:=#$00; знаете что будет? Если да то хорошо - удачи в отладке. Если нет, то читайте классиков.
← →
FearG0 © (2007-09-27 22:36) [56]С указателями знаком. спс за предупреждение)
Добавил в ваш кодVirtualProtect(@XakThis, 2048, PAGE_READWRITE, @dwOldProtect);
перед пропатчиванием. Иначе ошибка была. Догадываюсь что VirtualProtect я использую косячно. Копаю дальше.
← →
oxffff © (2007-09-27 22:37) [57]
> FearG0 © (27.09.07 22:20) [52]
>
> > Ответь мне, почему код выдранный из другой программы не
>
> > будет работать?
>
> Я понял. Это квест такой. Отвечаешь на вопросы, а тебе за
> это код дают и разные бонусы)))
> Можно подсказку?
> 1. В памяти процедуры и функции имеют такой же размер как
> в exe
> 2. В памяти они располагаются так же как в exe?
Небольшой пример
procedure TMainForm.Button1Click(Sender: TObject);
begin
showmessage("");
showmessage("");
end;
Посмотри внимательно на asm код и ты увидишь, что он разный.
первый вызов showmessage("");
33 С0 xor eax, eax
E8 2B F0 F6 FF call showmessage
второй вызов showmessage("");
33 С0 xor eax, eax
E8 24 F0 F6 FF call showmessage
Как видишь отличается вызовы одного и того же.
Если ты пойдешь еще дальше и сделаешь 2B-24=7.
7 байт - 2 байта на xor и 5 байт на call
Компилятор ставляет относительный call вызов.
Но если вызов будет absolute или indirect то легче не станет.
Вообщем reloc и relink тебе в помощь.
Либо специальная техника написания. Вкраце исключить любые привязки к программе включая relative, absolute или indirect обращение.
← →
oxffff © (2007-09-27 22:46) [58]
> Либо специальная техника написания. Вкраце исключить любые
> привязки к программе включая relative, absolute или indirect
> обращение.
Фактически тебе нужно написать автономный exploit.
← →
vpbar © (2007-09-27 22:49) [59]FearG0 © (27.09.07 22:36) [56]
С указателями знаком. спс за предупреждение)
Добавил в ваш код
VirtualProtect(@XakThis, 2048, PAGE_READWRITE, @dwOldProtect);
перед пропатчиванием. Иначе ошибка была. Догадываюсь что VirtualProtect я использую косячно. Копаю дальше.
Вообщем можно и так. Я в этом случае ставил атрибут записи для секции с помощью CFF Explorer. Зачем лишний вызов и светить VirtualProtect. Хотя вообщем, что в лоб что по лбу.
ЗЫ
Удивляете вы меня. С VirtualProtect знакомы, а такой, извиняюсь, ламерский вопрос задали. Фрагментарные у вас знания, видимо.
На это разрешите откланяться как минимум до послезавтра. Успехов. А wasm почитайте, там много чего интересного.
← →
vpbar © (2007-09-27 22:52) [60]oxffff © (27.09.07 22:46) [58]
на самом деле для его задачи писать перемещаемый код не обязательно, достаточно скопировать код нужной процедуры. Ведь он будет писаться на то же место. Если не на тоже - тогда да - это сложнее.
← →
oxffff © (2007-09-27 22:54) [61]Inject в другую программу вопрос достаточно проработанный, тем более, что "псевдо жертва" сама предусмотривает это. Не так ли?
Вопрос написания injectable кода - это действительно интересная тема. Хотя и тоже достаточно проработаная.
← →
oxffff © (2007-09-27 22:59) [62]
> vpbar © (27.09.07 22:52) [60]
> oxffff © (27.09.07 22:46) [58]
> на самом деле для его задачи писать перемещаемый код не
> обязательно, достаточно скопировать код нужной процедуры.
> Ведь он будет писаться на то же место. Если не на тоже
> - тогда да - это сложнее.
>Ведь он будет писаться на то же место.
Да если и пишеться, по тому же адресу.
Компоновщик может разместит showmessage жертвы по другому адресу.
И увы. Относителное смещение call вызова будет "не туда".
← →
oxffff © (2007-09-27 22:59) [63]пишеться=пишется
← →
FearG0 © (2007-09-27 23:46) [64]
> И увы. Относителное смещение call вызова будет "не туда".
Да уже встретился с таким явлением.
Насчет фрагментированности знаний это точно. Только несколько часов изучаю эту тему. Пришел у выводу что надо ботать асму.
← →
FearG0 © (2007-09-28 03:41) [65]Вопрос такой.
Допустим я поставлю в начале процедуры метку
asm
DB 50,60,70,80,90
end;
Затем просканировав программу отыщу ее местоположение в exe, то есть начальный байт.
Затем я стираю из сорца метку и вновь компилирую. Будет ли старый адрес метки указывать на начало процедуры. Если да то всегда ли?
И вообще будет ли метка стоять в самом начале процедуры?
← →
Сергей М. © (2007-09-28 08:41) [66]
> будет ли метка стоять в самом начале процедуры?
Смотря что за процедура.
← →
FearG0 © (2007-09-28 16:02) [67]Можно поподробнее, какая процедура должна быть чтобы искомое утверждение было верно?
← →
vpbar © (2007-09-29 17:42) [68]>>FearG0 © (28.09.07 03:41) [65]
Ну, во-первых, в этом случае метка почти всегда будет не в начале процедуры, ибо в начале стек готовится. Пройдись в отладчике увидишь.
Во вторых, если изменить исходник и перекопилировать прогу, то бинарный файл тоже изменится и если адрес процедуры не изменится, то я посчитал бы это вызением.
← →
vpbar © (2007-09-29 17:46) [69]>>oxffff © (27.09.07 22:59) [62]
Истину глаголишь, но я имел ввиду следующее. Копируем машинный-код процедуры (например,на сервер как в сабже). Затираем процедуру (например, $C3C3C3C3C3C3C3C3.... :) )
И ели записывам эту же процедуру (с сервера) назад на то же место, то работать оно будет.
← →
vpbar © (2007-09-29 17:50) [70]FearG0 © (27.09.07 15:59) [11]
Защита от взлома.
Дело не в том чтобы ввести в заблуждение.
У меня есть пару процедур которые производят расчеты, без которых смысл программы теряется.
Скомпилированный код я вытащу и сохраню, а в программе затру.
Далее при прохождении кода, программа будет обращаться на сервер, передавать информацию о ключе активации программы и о железе, на сервере сервис будет смотреть на сколько это достоверно, и если все ок отправлять код процедуры в зашифрованном виде программе. Программа расшифрует, перепрошьет свою память и выполнит некогда затертый участок.
А вообще если не заморачиваться, то ломается это просто.
После того как прога расшифрует и перепрошьет делаем дамп и весь код у нас на руках. Далее прошиваем программу сами этим котом. Ломаем проверки целостности, если они есть и готово. Скрещиваем пальцы и надеемся что ничего кроме не изменилось.
← →
oxffff © (2007-09-29 18:13) [71]
> vpbar © (29.09.07 17:46) [69]
> >>oxffff © (27.09.07 22:59) [62]
> Истину глаголишь, но я имел ввиду следующее. Копируем машинный-
> код процедуры (например,на сервер как в сабже). Затираем
> процедуру (например, $C3C3C3C3C3C3C3C3.... :) )
> И ели записывам эту же процедуру (с сервера) назад на то
> же место, то работать оно будет.
А в чем тогда состоит защита? :)
← →
vpbar © (2007-09-29 18:18) [72]Ни в чем см [70], почти, только в том что для получения кода надо пару лишних телодвижений.
← →
oxffff © (2007-09-29 18:20) [73]
> vpbar © (29.09.07 18:18) [72]
> Ни в чем см [70], почти, только в том что для получения
> кода надо пару лишних телодвижений.
И я о том же. Cмотри последние два знака [71], а именно :)
← →
oxffff © (2007-09-29 18:22) [74]to vpbar.
Загляни сюда. Это полезней. :)
http://excastle.com/blog/archive/2007/09/28/49839.aspx
← →
vpbar © (2007-09-29 18:44) [75]>>oxffff © (29.09.07 18:22) [74]
Хм. Спасибо, действительно интересно. Чтото мне инфа в руки идет, я как раз хочу компилятор для своего языка писать (уже года два хочу :) да все некогда), а тут то один пример, до другой.
← →
FearG0 © (2007-09-29 19:36) [76]Всем спасибо за информацию, вроде разобрался что к чему. Понял тему, знаю куда копать и что усовершенствовывать.
← →
vpbar © (2007-09-29 19:44) [77]успехов. CrackMe сделай :)
← →
FearG0 © (2007-09-29 20:09) [78]Обязательно как только релиз будет.
← →
Dmitry S (2007-09-30 18:05) [79]А почему нельзя загрузить недостающее в виде dll?
← →
TStas © (2007-10-01 21:15) [80]А почему тогда нельзя dllю на сервер положить и грузить её явно и без заморочек?
← →
TStas © (2007-10-01 21:16) [81]Ой, это до меня посоветовали:)
← →
Riply © (2007-10-02 01:49) [82]А можно так ?
type
TMyProcType = packed record
Sign: TGUID;
MyProc: procedure(Param: DWord);
end;
procedure MyProcReal(Param: DWord);
begin
end;
const
MyProcType: TMyProcType = (...);
А дальше нам остается только найти MyProcType.Sign.
?
← →
TStas © (2007-10-02 22:06) [83]А зачем?
← →
TStas © (2007-10-03 16:25) [84]Вот извращения, подобные этим, даже, если они случайно работают, приводят к неуловимым глюкам, когда программа то работает, то не работает, а отладчик ничего не находит или, что еще хуже, когда глюк вообще не удается воспроизвести, то есть, в одних и тех же условия его обычно нет, но иногда он есть. Отладить подобную программу невозможно в принципе.
← →
vpbar © (2007-10-03 16:43) [85]>>TStas © (03.10.07 16:25) [84]
Все возможно. А любая защита - это извращение.
← →
Leonid Troyanovsky © (2007-10-03 17:44) [86]
> vpbar © (03.10.07 16:43) [85]
> А любая защита - это извращение.
Воистину так.
Один умный человек как-то заметил, что
программисты продают не байты, а услуги.
--
Regards, LVT.
Страницы: 1 2 3 вся ветка
Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.71 MB
Время: 0.042 c