Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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. Как патчить процедуру в памяти." Отпадут.
А если время дороже - купи готовое решения, типа тех что предлагали выше.



Страницы: 1 2 3 вся ветка

Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.04 c
15-1195725467
@!!ex
2007-11-22 12:57
2007.12.23
программирование под Linux


1-1191332875
312kbps
2007-10-02 17:47
2007.12.23
Получить ссылку на OLE-сервер 1С зная его hWND ?


2-1196152756
Ростик
2007-11-27 11:39
2007.12.23
Как правильно записывать числа типа флоат


15-1195670824
sdaf
2007-11-21 21:47
2007.12.23
библиотека rxlib


15-1195682297
GanibalLector
2007-11-22 00:58
2007.12.23
Россия в ЕВРО2008





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский