Текущий архив: 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.49 MB
Время: 0.007 c