Доброго времени суток. На хабре в 14 году выкладывали Proxy DLL, статья осталась, а архив на ргхосте помер.
Может у кого остался в закромах? Заранее благодарен.
Может у кого остался в закромах? Заранее благодарен.
Да, интересно посмотреть на реализацию GDS32.dll, которая должна быть в архиве. Теоретически я все прекрасно прекрасно понимаю, просто интересуют некоторые моменты. Встречал на гитхабе разные варианты, но они были не особо оптимизированы. Раньше никогда не приходилось применять данный метод, но недавно уперся в одну софтину, где прокси была бы хорошим вариантом. В дальнейшем есс-но хочу написать под себя генератор с удобным функционаломПросто заготовку шаблона прокси либы нужно !?
Да было бы неплохо ... простых вариантов много, например ProxyDllGenВ дальнейшем есс-но хочу написать под себя генератор с удобным функционалом
Спасибо, находил данный проект, удивился, что он на лазарусе)простых вариантов много, например ProxyDllGen
Приглашение от НЛО - это учетка с открытой регистрации, без инвайта, если мне не изменяет память.тот кто пригласил его, НЛО кажется
А про моменты бы чуток поподробнеепросто интересуют некоторые моменты
Нечего секретного, интересно, как именно автор реализовал перехват запросов в GDS32А про моменты бы чуток поподробнее
TryAga1n, спасибо вам за интересный тред/топик. Благодаря ему открыл для себя новую технику. Так-то раньше я слышал про DLL hijacking, Proxy DLL и думал, во-первых, что это одно и то же, а во-вторых, считал, что это все связано с заражением чужих компьютеров и, вроде как, мне пока неинтересно. А тут почитал статью по вашей ссылке, потом другую подобную и пришел к выводу, что это как раз то, чего мне не хватало для полного счастья. ))На хабре в 14 году выкладывали Proxy DLL, статья осталась, а архив на ргхосте помер.
Приветствую, вот:Хотел спросить у форумчан, нет ли у кого какого-нибудь простенького примера реализации Proxy DLL на C/C++
typedef DWORD (WINAPI *CardWriteFile_t)(
IN LPCSTR lpszFileID,
IN VOID *pBuffer,
IN DWORD dwBufferSize
);
DLLMONITOR_API DWORD WINAPI CardWriteFile(
IN LPCSTR lpszFileID,
IN VOID *pBuffer,
IN DWORD dwBufferSize
)
{
Log(FUNCTION_NAME "\n");
DWORD lResult = OriginalDLL.CardWriteFile(lpszFileID, pBuffer, dwBufferSize);
return lResult;
}
struct CustomError {};
struct CustomProxy
{
HMODULE Handle_;
CustomProxy() {
Handle_ = LoadLibrary("original_.dll");
if (!Handle_) {
Log(_T(" ! Error: can't load original_.dll\n"));
throw CustomError();
}
#define GET_PROC(x) \
{ \
x = (x##_t) GetProcAddress(Handle_, _T(#x)); \
if (x == 0) { \
Log(_T(" ! Error: can't resolve " #x " function.\n")); \
throw CustomError(); \
} \
Log(_T(" ~ " #x " function resolved.\n")); \
}
GET_PROC(CardWriteFile);
#undef GET_PROC
}
public:
static CustomProxy& Instance()
{
static CustomProxy lInstance;
return lInstance;
}
virtual ~CustomProxy()
{
FreeLibrary(Handle_);
}
CardWriteFile_t CardWriteFile;
};
#define OriginalDLL CustomProxy::Instance()
#pragma comment(linker, "/export:SnmpSvcAddrIsIpx=original_.SnmpSvcAddrIsIpx")
Боже, каким ничтожеством я, видимо, выгляжу в глазах специалистов с большинства форумов подобных нашему. )) Если Rio считает, что у меня не хватает мозгов, даже на элементарный поиск по Гитхабу. )) Боюсь даже представить, что мне напишут в ответ на какой-нибудь следующий мой вопрос. Одно из двух: либо https://www.google.com, либо сделают вид, что, вообще, не заметили моего вопроса. )))
ничего подобногоЕсли Rio считает, что у меня не хватает мозгов, даже на элементарный поиск по Гитхабу. ))
Вот я вас тоже понять не могу, зачем выкладывать такой примитив? Дети в детском садике и то сложнее примеры разбирают. Могли бы в конце концов, побольше всяких множественных наследований классов применить у себя в коде, перегрузку и т.д. и т.п... Да и конструкции такого плана(см. ниже) могли бы очень сильно облагородить ваш код:Что-то не понял зачем такие сложности с ассемблером и т.д.
char *(*(**foo [8] [])())[];
int *(* foo())[15];
char *(*(* arr[N]) ()) () ;
Боюсь, что блеск наших двух интеллектов многоие форумчане могут просто не выдержать и ослепнуть, поэтому, я думаю, не стоит их подвергать такому риску. )) Пока, я думаю, одного вашего интеллекта будет вполне достаточно, а там посмотрим, если в дальнейшем вы остановитесь в своем развитии, то придеться потихоньку компенсировать недостатки вашего интеллекта моим, а куда деваться - не пропадать же сайту. )))Но ты можешь блеснуть интеллектом и выдать свой вариант.
Если есть вопросы по сути - задавай.
А вот за это предложение - огромное вам спасибо. Вижу, что вы действительно стараетесь мне помочь. Поначалу-то я решил, что вы просто решили тут всем показать какой вы крутой в области C/C++ программирования, но теперь вижу, что это, скорее всего, не так.Обсудим.
Каждый пишет свой код как хочет, нейтральность, это всё наше. Сразу пиши в личкуВот я вас тоже понять не могу, зачем выкладывать такой примитив? Дети в детском садике и то сложнее примеры разбирают.
https://www.codeproject.com/Articles/1179147/ProxiFy-Automatic-Proxy-DLL-GenerationХотел спросить у форумчан, нет ли у кого какого-нибудь простенького примера реализации Proxy DLL на C/C++, чтобы можно было быстренько скомпилировать и посмотреть/потестировать на практике как это работает? А то в статьях, которые мне попадались, файлы примеров либо удалены, либо слишком перегружены сложностью реализации, либо, вообще, отсутствуют. Так-то я, конечно, разберусь, поскольку теорию, вроде, уловил, но это же все время, а с готовыми примерами, все бы было намного быстрей и эффективней. Заранее спасибо.
The chapter ended with a practical demonstration that linked a very simple C++ library
through a proxy DLL written in C++ to a Delphi application. I looked into two different
ways of implementing a proxy DLL and into two ways of using this DLL in a Delphi
application.