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

Вниз

Нестандартная работа с dll   Найти похожие ветки 

 
Frozzen   (2004-12-06 07:55) [0]

Здравствуйте господа!
Возможно ли реализовать такое: выделяем память, помещаем туда длл и или же отдельную фкнкцию, и вызываем ее.


 
Digitman ©   (2004-12-06 08:01) [1]

возможно


 
Frozzen   (2004-12-06 08:31) [2]

подскажите методы пожайлусто
или чего почитать


 
Digitman ©   (2004-12-06 08:35) [3]

hLib := LoadLibrary("mylib.dll"); //выделяем память и загружаем библиотеку
MyProc := GetProcAddress(hLib, "MyProc"); //получаем адрес эксп.процедуры MyProc()
MyProc(параметры); //вызываем эту процедуру


 
novice_man ©   (2004-12-06 08:37) [4]


hLib := LoadLibrary("mylib.dll"); //выделяем память и загружаем библиотеку

@MyProc := GetProcAddress(hLib, "MyProc"); //получаем адрес эксп.процедуры MyProc()
MyProc(параметры); //вызываем эту процедуру


 
Fay ©   (2004-12-06 08:39) [5]

2 novice_man ©   (06.12.04 08:37) [4]
В смысле?


 
Digitman ©   (2004-12-06 08:40) [6]


> novice_man ©   (06.12.04 08:37) [4]


"баран" вовсе не обязателен


 
novice_man ©   (2004-12-06 08:43) [7]

"баран" вовсе не обязателен
Точно :), но везде в литературе (которая попадала) в руки было так и не задовался вопросом ПОЧЕМУ?
Так вот ПОЧЕМУ?


 
Fay ©   (2004-12-06 08:47) [8]

>> но везде в литературе (которая попадала) в руки было
Left side cannot be assigned to


 
novice_man ©   (2004-12-06 08:51) [9]

Попробовал так и нормально, проглатил компилятор:

var
hLib: Cardinal;
ppp: procedure;
begin

ppp := GetProcAddress(hLib, "MyProc")

end;

Правда не проверял как сработает ;).


 
Fay ©   (2004-12-06 08:53) [10]

2 novice_man ©   (06.12.04 08:51) [9]
А теперь
@ppp := GetProcAddress(hLib, "MyProc")
?


 
Frozzen   (2004-12-06 08:54) [11]

А без LoadLibrary возможно
допустим длл-зашифрована


 
novice_man ©   (2004-12-06 08:55) [12]

Так я проверил оба варианта! Никакой разницы! Компилится нормально.


 
Fay ©   (2004-12-06 08:57) [13]

2 novice_man ©   (06.12.04 08:55) [12]
Sorry, я на Integer-е проверял 8). Видимо, Delphi просто разрешает такую фигню 8)


 
Digitman ©   (2004-12-06 08:59) [14]


> допустим длл-зашифрована


так расшифруй ! делов-то ..
а далее - [3]


 
novice_man ©   (2004-12-06 09:05) [15]

Frozzen   (06.12.04 08:54) [11]

А без LoadLibrary возможно
допустим длл-зашифрована


Что значит зашифрована?


 
Frozzen   (2004-12-06 09:05) [16]

исли ее в темп расшифровывать
то это уязвиме место


 
Frozzen   (2004-12-06 09:07) [17]

крипто алгоритмом зашифрована


 
Digitman ©   (2004-12-06 09:08) [18]


> Frozzen   (06.12.04 09:05) [16]


> уязвиме место


сделай это "место" "неуязвимым"

и вообще непонятно "чего тебе надобно, старче"


 
Fay ©   (2004-12-06 09:08) [19]

2 Frozzen   (06.12.04 07:55)
Сходите на wasm.ru. Довольно быстро поймёте, что не стоит изобретать этот велосипед - он не поедет.


 
Frozzen   (2004-12-06 09:15) [20]

В общем так
хочу ключевую функцию поместить в длл, зашифровать эту длл ее. допустим ключем ид-винчестера. Ну а затем расшифровать в память и выполнить.


 
novice_man ©   (2004-12-06 09:16) [21]

Удачи!


 
Digitman ©   (2004-12-06 09:18) [22]


> хочу ключевую функцию поместить в длл


зачем ? эту ДЛЛ будет использовать более чем одно приложение ?


 
novice_man ©   (2004-12-06 09:19) [23]

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

Вопрос: у Вас стоит лицензионная версия OS и Delphi? Если да то сколько это стоит?


 
Fay ©   (2004-12-06 09:37) [24]

Во какая страшная вещь пришла в голову 8)
var
 Lib, h : DWORD;
begin
 h := CreateFile("c:\lib.DLL", GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0);
 if h = INVALID_HANDLE_VALUE then RaiseLastOsError;
 Lib := LoadLibrary("c:\lib.dll");
 try
   if Lib = 0 then RaiseLastOsError;
   FreeLibrary(Lib);
 finally
   CloseHandle(h);
 end;


 
Frozzen   (2004-12-06 10:13) [25]

novice_man
Стоит задача придумать защиту

Digitman

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


 
Frozzen   (2004-12-06 10:19) [26]

Fay
не понял маневра


 
Digitman ©   (2004-12-06 10:21) [27]


> Стоит задача придумать защиту


защиту от ЧЕГО ?


> придется писать свой загрузчик


загрузчик ЧЕГО ?


 
Frozzen   (2004-12-06 10:27) [28]

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


 
Digitman ©   (2004-12-06 10:45) [29]


> придумать систему защиты от переноса приложения на другии
> машины


задача сводится как минимум к "придумыванию" собственной файловой системы, что ведет к "придумыванию" собственной операционной системы, поддерживающей "придуманную" файловую систему

только так можно исключить перенос приложения на другие машины


> как можно сильнее затруднить жизнь тому, кто будет ломать
> эту защиту


задача сводится к принятию мер по защите от использования несанкционированной копии приложения, а не "защите от переноса" !

наиболее эфф.защита от трассировки с целью "взлома" - это самомодифицирующийся код .. но, imho, при таком уровне познаний решение этой задачи тебе попросту не по зубам - здесь необходимо как "Отче наш" знать и систему команд ЦП, и программирование на ассемблере и в машкоде, и принципы/особенности внутренней организации ОС, и принципы работы ЦП в защищенном режиме ..


 
Frozzen   (2004-12-06 10:48) [30]

Про самомодифицирующийся код я знаю - это тяжеловато
а вот вариант с шифрование функции, по-моему можно попробовать,
я проделывал подобное с файлами ресурсов.


 
Frozzen   (2004-12-06 10:50) [31]

И файловую систему, которая была расположена в большом файле, я уже реализовывал.


 
Frozzen   (2004-12-06 10:50) [32]

была как бы модель файловой системы


 
DiamondShark ©   (2004-12-06 10:54) [33]


> а вот вариант с шифрование функции, по-моему можно попробовать,

Метод ничуть не более устойчивый, чем "расшифровать в ТЕМП".


 
Digitman ©   (2004-12-06 11:06) [34]


> Frozzen   (06.12.04 10:50) [31]
> файловую систему, которая была расположена в большом файле,
> я уже реализовывал.


и изобрел очередной велосипед


> была как бы модель файловой системы


ты просто некий свой контейнерный формат изобрел, а не "как бы модель"

а ФС как была у тебя FAT32 (или что там у тебя - NTFS, HPFS), так она и осталась, и ничто не мешает скопировать твой контейнер на другую машину и так или иначе использовать его там


> вариант с шифрование функции


что она у тебя должна шифровать/дешифровать-то ? твой суперсекретный исп.код ? так ведь эту ф-цию точно так же можно оттрассировать и  понять что и как она шифрует/дешифрует ! придется тебе писать шифровальщик ф-ции шифрования) ... а шифровальщик этот тоже можно оттрассировать, поэтому придется писать и шифровальщик шифровальщика) ... и так - до бесконечности) .. сказка про белого бычка .. или, если угодно, про барона Мюнхгаузена, вытаскивающего себя за волосы из болота)


 
Frozzen   (2004-12-06 11:06) [35]

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


 
Frozzen   (2004-12-06 11:07) [36]

крипто анализ это уже другая тема


 
Frozzen   (2004-12-06 11:09) [37]

про файловую систему-контейнер - это не было связано у меня с защитой


 
DiamondShark ©   (2004-12-06 11:10) [38]


> изменить эту функцию трудно, поскольку зашифрована

Зато никто не мешает найти точку, из которой вызывается эта функция и вставить туда заплатку.

Да и саму функцию несложно оттрасировать, потому что к моменту вызова она должна быть расшифрована. Ы?


 
Frozzen   (2004-12-06 11:11) [39]

и взлом алгоритма шифрования DES даже с известным алгоритмом - задача крайне не тривиальная


 
Frozzen   (2004-12-06 11:12) [40]

заплатка подразумевает вызов подобной функции?


 
Digitman ©   (2004-12-06 11:14) [41]


> Frozzen   (06.12.04 11:06) [35]


> допустим мы имеем зашифрованную функцию, которая выполняет
> какую-нибудь ключевую операцию и проверку на верность ид-машины.


чтобы использовать эту ф-цию у себя в программе тебе прежде всего нужно расшифровать маш.код этой ф-ции.

спрашивается, кто и что будет этим заниматься ? опять же какая-то ф-ция !

да и до этого дело вряд ли дойдет - при взломе твоей программы взломщик, зная что делает твоя "зашифрованная ф-ция" просто обойдет ее вызов и эмулирует ее успешную работу своим кодом ... после чего попросту пропатчит нужным образом исп.файлы или файлы данных твоей программы


 
DiamondShark ©   (2004-12-06 11:14) [42]


> заплатка подразумевает вызов подобной функции?

Зачем?
Ведь после вызова идёт оценка результата, так?
Ну так и обходим просто все проверки (вместе с вызовом) и всё.


 
Frozzen   (2004-12-06 11:21) [43]

нет не так
эта функция допустим считывает дынные и выполняет вычисление какое-нибуть


 
Frozzen   (2004-12-06 11:22) [44]

проверки нет


 
Digitman ©   (2004-12-06 11:29) [45]


> функция допустим считывает дынные и выполняет вычисление
> какое-нибуть


но ведь рез-т вычислений она куда-то сохраняет ?
да и если уж это ф-ция, значит, она возвращает некий рез-т. который где-то впоследствии анализируется ?


 
DiamondShark ©   (2004-12-06 11:33) [46]

Или хакаем декодер. Например, вместо извлечения машинно-зависимой информации подставляем константу.
Или вообще заменяем длл на точно такую же, но раскодированную (раскодированных код можно видеть в памяти).

Сразу же было сказано: такой метод не имеет смысла без защиты от отладчика.


 
Frozzen   (2004-12-06 11:34) [47]

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


 
DiamondShark ©   (2004-12-06 11:39) [48]

Зачем половину?
Только декодер. Запатчить то место, где собирается машинно-зависимая инфа.


 
Digitman ©   (2004-12-06 11:42) [49]


> Frozzen


твоя "зашифрованная ф-ция" хакером дешифруется, ее дешифр.тело разом записывается в свободную область какой-либо секции кода PE-файла, все вызовы "шифрованной ф-ции" перенаправляются на точку входа в ее дешифрованный образ, далее в дешифр.образе делаются миним.изменения, эмулирующие нормальный результат работы ф-ции .. и все ! и вся твоя защита - коту под хвост !


 
Frozzen   (2004-12-06 11:48) [50]

дешифровать он ее сможет имея компьютер на котором эта прога стоит или имея данные о этом компьютере


 
Frozzen   (2004-12-06 11:52) [51]

но с этим то он больше помучается, чем с обычной проверкой


 
DiamondShark ©   (2004-12-06 11:56) [52]


> Frozzen   (06.12.04 11:48) [50]
> дешифровать он ее сможет имея компьютер на котором эта прога
> стоит или имея данные о этом компьютере

А как по-твоему работают крякеры? Так и делают: есть одна рабочая легальная копия, которая на месте же и крячится.


 
Frozzen   (2004-12-06 11:57) [53]

все свелось к обсуждению целесообразности


 
Digitman ©   (2004-12-06 11:58) [54]


> Frozzen   (06.12.04 11:48) [50]


шифрованное тело этой ф-ции у тебя формируется в момент "привязки" программы к "легальному" компьютеру ? так ?


 
Frozzen   (2004-12-06 11:58) [55]

а как это сделать я так и не понял


 
Frozzen   (2004-12-06 11:59) [56]

нет его формирует "хозяин" программы


 
Digitman ©   (2004-12-06 12:02) [57]


> Frozzen   (06.12.04 11:58) [55]


что сделать-то ?

выделить память ? или что ?


 
Digitman ©   (2004-12-06 12:05) [58]


> его формирует "хозяин" программы


т.е. тот кто приобрел твое ПО легально ? и какими же средствами ?


 
Frozzen   (2004-12-06 12:06) [59]

выдилил, расшифровал, как потом выполнить вызов функции


 
Digitman ©   (2004-12-06 12:08) [60]


> Frozzen   (06.12.04 12:06) [59]



> как потом выполнить вызов функции


обычным образом


 
Frozzen   (2004-12-06 12:23) [61]

как так обычным
мне нужно будет подменить указатель на функцию? Или как


 
Digitman ©   (2004-12-06 14:46) [62]


> Frozzen   (06.12.04 12:23) [61]


я не знаю, что ты подразумеваешь под "указатель на функцию" и под его "подменой"


 
Frozzen   (2004-12-06 17:00) [63]

Я же спросил как мне это сделать???


 
Frozzen   (2004-12-06 17:04) [64]

Как так просто вызывай.
У меня буде область памяти, в которой будет лежать код функции.


 
Frozzen   (2004-12-06 17:11) [65]

Скорее придется делать так, шифровать не всю целиком длл, а только секцию кода. Подгружать ее обычным ЛоадЛибрари, а затем расшифровывать и перезаписывать секцию кода.



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

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

Наверх





Память: 0.6 MB
Время: 0.039 c
4-1099742073
_Delphin_
2004-11-06 14:54
2004.12.19
Как сделать панель задач?


14-1101633700
Шишкин Илья
2004-11-28 12:21
2004.12.19
Локальная сеть и с ней связанное


14-1101897095
Xaker
2004-12-01 13:31
2004.12.19
HookMonitor - или КОНЕЦ ВСЕМ Keylogger am !


14-1101560486
OneFragLeft
2004-11-27 16:01
2004.12.19
Пришла идея, что даже вылез из за стола (ужинал)


1-1102334901
FrankSinatra
2004-12-06 15:08
2004.12.19
RichEdit





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