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

Вниз

Длинна процедуры   Найти похожие ветки 

 
SammIk ©   (2003-04-08 13:24) [0]

Доброго всего.
Мастера повогите решить задачку...
У меня есть какя-то процедура(функция)
как получить ее размер в баитах?


 
Севостьянов Игорь ©   (2003-04-08 13:45) [1]

По моему никак - но для чего данный изврат ?
Хотя может через диссассемблирование и пересчет байтов asm кода...
Опять же что значит процедура в байтах ?
Исходный код или исполняемый ?


 
MBo ©   (2003-04-08 15:48) [2]

>как получить ее размер в баитах?
А в самом деле так уж сильно нужно?

procedure a;
begin
...
end;

procedure b;
begin
...
end;

function procAsize:integer;
begin
Result:=Dword(@b)-Dword(@a);
end;


 
Jack128 ©   (2003-04-08 15:51) [3]

Рискну предположить, что можно так :

function myfunc(i : integer) : string;
begin
result := "my string";
end;

procedure Dummy;
begin
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Integer(@Dummy)-Integer(@MyFunc)));
end;


 
SammIk ©   (2003-04-09 19:16) [4]

Нужен данныи изврат для защиты приложения от взлома.
Функция на диске зашифрована, а если нужно ее исполнить
расшифровываем ее в памяти и выполняем, потом опять
шифруем)
вот и все для чего енто нужно.
---------
Да ведь в памяти и на диске, положение функции будет разным?
Как определить положение функции в фаиле на диске?


 
AlexRush ©   (2003-04-09 19:33) [5]

А что помешает перехватить твою ф-ю в памяти ?
(ответ - ничего SoftIce + VM Ware = наши лучшие друзья :)
По личному опыту могу сказать, что зашита прог таким способом - практически напрасная трата времени. Единственное, что может помочь - генерация БОЛЬШИХ кусков кода в памяти (по случайным адресам), которые выполняют в основном левую работу и местами (удаленными друг от друга) делают нужную работу.


 
SammIk ©   (2003-04-09 19:55) [6]


> AlexRush

Ты опал в этом напровлении?
Если да то, помоги ссылками, советоми или есче чем...


 
AlexRush ©   (2003-04-09 20:43) [7]

Из мирового и частного опыта:
**Все, что руками написано, руками и сломано будет.
Защита от дизасемблирования - генерация кода в рантайме. (например, твой способ).
Зашита от трассировки: на 100% - никак. Можно справится с API перехватом (просто) и отладчиками 3го кольца (неложно), но защитится от отладчика 0-го колька теоретически невозможно. Есть разные ухищрения,которые лишь затрудняют отладку и осмысливание кода.
** Если таких ухищрений будет много (и разных), время взлома и, соответственно, цена повысятся.
Идея состоит в том, чтобы замутить код настолько, что цена взлома программы существенно превысит стоимость самой проги.

Стандартные способы замуливания программы:
*зашита от API перехвана
*проверка на наличие долбагера 3го кольца
*проверка наличия брекпоинтов типа int 3 (0xCC) в начале важных функций
*поиск загруженного в память SoftIce"а всеми известными способами (я только один знаю - проверка наличия загруженных модулей его. не эффективно, но можно выиграть время)
*никогда не писать ф-и типа function IsHackerDebugingMe:boolean;
проще говоря - не использовать jz/jnz. Вместо этого следует использовать карты перехода(как MessageMap в MFC или VMT в CVL)
*весь важный код генерить днамически и размещать по рандомным адресам
*обеспечить при вызовах ф-й API Alloc* выделение памяти по более-мение радндомным адресам
*все проверочные коды размешать многократно в разных местах проги с некоторыми изменениями
*Использовать упаковщики
*создавать какие-либо обьекты системы, которые нельзя будет сдампить из памяти твоего процесса.
*и т.д. и т.п
пора домой....
:)
если что - спраштвай.


 
SammIk ©   (2003-04-09 21:07) [8]

Народ а вы уверенны что эти ф-ии

procedure a;
begin
...
end;

procedure b;
begin
...
end;

в памяти рядом будут?


 
jack128 ©   (2003-04-09 22:43) [9]

ну утверждений от Борлонла я не видел, но в нескольких конфах встеречал такую фразу, что функции расположенные рядом в исходниках, распологаются рядом в памяти при выполнении программы...


 
Palladin ©   (2003-04-09 23:10) [10]

а почему бы и нет...
компилятор однопроходный, из этого косвено может следовать что рядом они...
хотя...


 
Digitman ©   (2003-04-10 09:27) [11]


> SammIk


в Паскале - да, будут рядом.
Компилятор генерирует объектный код модуля в том порядке, в котором он просматривает его текст, т.е. сверху вниз, строчка за строчкой


 
AlexRush ©   (2003-04-10 12:33) [12]

Деиствительно, функции располагаются рядом, я проверял не раз.
Кто сомневается, может проверить:
//-----------------------------------
program TestFunctionsLocation;

procedure NAME_0;export;
begin

end;
procedure NAME_0_NO_EXPORT;assembler;
asm
nop;
nop;
nop;
nop;
nop;
end;

procedure NAME_1;export;
begin

end;
procedure NAME_2;export;
begin

end;

EXPORTS NAME_0,NAME_1,NAME_2;

begin

end.
//-----------------------------------
теперь откройте exe в IDA, WDASM и т.п. и сами убедитесь;


 
evvcom ©   (2003-04-10 14:39) [13]

To AlexRush: А что есть надежный способ защиты от API перехвата? Что-то сомневаюсь. Если есть, что сказать, предлагаю вынести это в отдельный топик на "WinAPI"
To SammIk: Чтобы "хорошо" защитить свою программу, надо знать какими приемами пользуется хакер. Для этого надо быть самому хакером или что более красиво "исследователем программ". Постоянно учиться, учиться и учиться. А простое шифрование функции я считаю безсмысленным. В дополнение к цитатам приведенным AlexRush могу добавить еще одну.
"Если программа может сама себя расшифровать, то это сможет сделать и хакер". Это относится, например, к возможности временного ознакомительного использования программы (Trial-период).
В принципе не совсем понятно от какого взлома ты пытаешься уберечь свою программу? Если это коммерческий продукт, и программа будет продана, надо определиться, каким образом будут раздаваться ключи, пароли или что еще легальным пользователям. Если там будет предложено ввести какой-нибудь серийник, и программа действительно будет ценной, то вполне возможно, что уже через час, другой в сети появится этот серийник или кряк. Так что прежде, чем тщетно пытаться защитить свою программу от взлома, попытайся научиться приемам хакеров.
А на данном этапе твоих знаний и опыта проще будет защитить, например, с помощью ASProtect. Как его кто-то назвал - "это редкостная дрянь".


 
SammIk ©   (2003-04-10 19:16) [14]


> evvcom

Для того чтобы стать "исследователем программ"
надо с чего-то начать.
Вот я и начал, с приемами кракеров немного знаком,
но как уже сказал надо с чегото начать.
И еще разве вам не кажется что это отличныи пример
работы с памятью?


 
SammIk ©   (2003-04-10 19:17) [15]


> evvcom

Да ктому же чтобы научиться чему - нибудь, надо
самому пробовать, а не пользовать чужое, верно?


 
evvcom ©   (2003-04-11 08:32) [16]

Дешевле учиться на чужих ошибках. Возьми какую-нибудь программку, требующую серийник или еще чего и попробуй ее сломать. Пока будешь ломать, начнешь понимать ошибки того программиста, который писал эту защиту. И так далее потихоньку...


 
SammIk ©   (2003-04-14 19:21) [17]

Мастера, при попытке писать по ентому адресу
вылетает ошибка доступа к памяти. как енто побороть?



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

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
1-76952
ruslanyd
2003-04-12 10:32
2003.04.24
преобразование Currency в строку .....


1-76903
Giemgo
2003-04-11 21:53
2003.04.24
Проблема с PChar


11-76868
Alexei Dragoner
2002-07-17 19:46
2003.04.24
TKOLForm.Paint, где ты?


3-76764
Minivan
2003-04-08 15:29
2003.04.24
Кодировка


7-77195
Feofan
2003-03-05 11:21
2003.04.24
Регистрация OCX и DLL программно