Форум: "Основная";
Текущий архив: 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