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

Вниз

Нестандартная работа с 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;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.03 c
4-1099933195
nookie84
2004-11-08 19:59
2004.12.19
как происходит выключение компа?


3-1101113787
31512
2004-11-22 11:56
2004.12.19
TDBComboBox - баг или так задумано?


14-1101897987
DelphiN!
2004-12-01 13:46
2004.12.19
Номера цветов в HTML и в Делфи


3-1100872886
Wolffgang
2004-11-19 17:01
2004.12.19
fkCalculated = -1, потом 2


1-1102308959
Frozzen
2004-12-06 07:55
2004.12.19
Нестандартная работа с dll