Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
4-77238
Sfagnum
2003-02-27 16:01
2003.04.24
LoadIcon


7-77210
Андрусь
2003-03-05 10:26
2003.04.24
выставить/отменить для окон перерисовку при перетаскивании


14-77164
alxn
2003-04-08 11:41
2003.04.24
Кто знает, куда пропал DelphiPlus?


3-76834
Boo
2003-04-05 22:13
2003.04.24
Проблемы печати DBGridEh (EhLib2.5)


1-76987
SynapseAlex
2003-04-11 19:13
2003.04.24
Как создать системную службу





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