Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прикрепить свой Dll к поцессу 
:(
    Опции темы
ZC1989
Дата 27.5.2007, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



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

Добавлено через 51 секунду
кстать, как на время работы процесса к нему прикрепить Dll я знаю...



--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Tectoder
Дата 27.5.2007, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



Поищи формат PE
PM   Вверх
ZC1989
Дата 27.5.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



Tectoder, РЕ  - это добавление своего кода в в ехе... а можно как-то по другому...просто процесс к которому надо подключиться это explorer.exe 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
W4FhLF
Дата 27.5.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Добавь в таблицу импорта explorer.exe свою DLL. Будет грузиться постоянно.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
ZC1989
Дата 27.5.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



W4FhLF, собсно вот ток что нашёл про таблицу РЕ...чувствую острых ощущений на весь день мне хватит...гыгы...а вот вопрос такой (пока начал читать ток теорию) добавить в таблицу надо по адресу определённому...значит надо открыть exe, потом найти это место памяти, прописать туда имя библиотеки (или полный путь)...так а explorer - то запущен...или так и надо?


Это сообщение отредактировал(а) ZC1989 - 27.5.2007, 09:32


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
W4FhLF
Дата 27.5.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 12
Всего: 121



Цитата(ZC1989 @  27.5.2007,  09:32 Найти цитируемый пост)
W4FhLF, собсно вот ток что нашёл про таблицу РЕ...чувствую острых ощущений на весь день мне хватит...гыгы...а вот вопрос такой (пока начал читать ток теорию) добавить в таблицу надо по адресу определённому...значит надо открыть exe, потом найти это место памяти, прописать туда имя библиотеки (или полный путь)...так а explorer - то запущен...или так и надо?


Если ты хочешь, чтобы при запуске системы только в explorer.exe оказывалась твоя dll, то тебе надо изменить таблицу импорта у файла на винте. Как ты это будешь делать - я не знаю, но способ рабочий)


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
ZC1989
Дата 27.5.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



W4FhLF, ну да, главное сделать возможным запуск с моей библиотечкой...  smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Tectoder
Дата 27.5.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



ZC1989, вообще, есть AppInitDll, правда она подгружается во все процессы... Но это проще чем "инфицирование" проводника
PM   Вверх
ZC1989
Дата 27.5.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



Tectoder, возьму на заметку..только мне хотелось что бы было это для одного, конкретного процесса...

Добавлено через 1 минуту и 47 секунд
да, и что это за функция такая, (на всякий случай спрошу..хехе...) где она лежит? и что именна делает



--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Tectoder
Дата 27.5.2007, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



http://browsersentinel.com/help/startup-modules.htm
Конкретно для эсклорера можно еще написать BHO(browser helper object). Тогда твоя dll будет внедрена ТОЛЬКО в проводник и программы, использующие ie
PM   Вверх
ZC1989
Дата 27.5.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



Вот почитал инфу и получается что бы explorer.exe загружал при старте мою библиотеку то надо прописать ключь по адресу 
HKEY_LOCAL_MACHINE \Software \Microsoft \Windows \CurrentVersion \ShellServiceObjectDelayLoad

Там есть уже некоторые ключи…и в них описаные подобные данные…
{7849596a-48ea-486e-8937-a2a3009f31a9}

Это я так понимаю номер уже залинкованной в винду ДЛЛки…..а как понормальному сделать что бы нужная мне ДЛЛка прилинковалась?



--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Tectoder
Дата 27.5.2007, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: 7
Всего: 8



ZC1989, это guid com-класса
Тебе, соответственно нужно сделать свою библиотеку COM-библиотекой и прописать там guid одного из своих классов. Реализовавывать там что либо не обязательно. Достаточно самому написать процедуру DllCanUnloadNow что бы она всегда возвращала 0
PM   Вверх
ZC1989
Дата 27.5.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



Tectoder, ех блин....лес дремучий.....ладно. подумаю...а нет примера не у кого как можно в ЕХЕ добавить свою библиотеку, понимаю так проще получится....чем с реестром работать (не пробовал ни разу)


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
ZC1989
Дата 28.5.2007, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



Вот нашёл следующий код из статьи Yinrong Huang-а…

Там типа добавляется некий код в файл…я откомпиллил прогу…но как с ней работать не пойму… патылся открыть с её помощью другой ехе – ничего…спотыкается на первой ошибке…

if ( argc != 7 )…

я думаю что можно приписать самому эти данные….но как? Я с параметрами int main(int argc, char* argv[]) туго соображаю…
Код

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define EMBEDME_REPLACE_OFST 0xFC
#define EMBEDME_JMP_OFST 0x105

char embedded[] =
        "\x60\x8b\xec\xeb\x29\x4c\x6f\x61\x64\x4c\x69\x62\x72\x61\x72\x79"
        "\x41\x00\x75\x73\x65\x72\x33\x32\x00\x4d\x65\x73\x73\x61\x67\x65"
        "\x42\x6f\x78\x41\x00\x48\x65\x6c\x6c\x6f\x21\x00\xeb\x05\xe8\xf9"
        "\xff\xff\xff\x5b\x8d\x7b\xd2\x57\xeb\x1f\xc1\xeb\x10\xc1\xe3\x10"
        "\x66\x81\x3b\x4d\x5a\x75\x0b\x8b\x4b\x3c\x66\x81\x3c\x0b\x50\x45"
        "\x74\x06\xc1\xeb\x10\x4b\x75\xe5\xc3\xe8\xdc\xff\xff\xff\x8b\x43"
        "\x3c\x40\x8b\x54\x03\x7f\x03\xd3\x8b\x42\x0c\x03\xc3\x8b\x08\x81"
        "\xc9\x20\x20\x20\x20\x81\xf9\x6b\x65\x72\x6e\x75\x11\x8b\x48\x04"
        "\x81\xc9\x20\x20\x20\x20\x81\xf9\x65\x6c\x33\x32\x74\x05\x83\xc2"
        "\x14\xeb\xd5\x8b\x42\x10\x8b\x1c\x03\xe8\x9c\xff\xff\xff\x33\xff"
        "\x8b\x4b\x3c\x8b\x74\x0b\x78\x03\xf3\x8b\x4e\x20\x03\xcb\x47\x8b"
        "\x11\x03\xd3\x81\x7a\x04\x72\x6f\x63\x41\x74\x05\x83\xc1\x04\x75"
        "\xed\x8b\x56\x24\x03\xd3\x0f\xb7\x3c\x7a\x2b\x7e\x10\x8b\x56\x1c"
        "\x8d\x14\xba\x8b\x14\x13\x03\xd3\x5f\x52\x53\x57\x87\xd3\x52\xff"
        "\xd3\x8d\x4f\x0d\x51\xff\xd0\x8d\x7f\x14\x57\x50\xff\xd3\x33\xc9"
        "\x51\x57\x8d\x57\x0c\x52\x51\xff\xd0\x8b\xe5\x61\x90\x90\x90\x90"
        "\x90\x90\x90\x90\xe9\xfb\xff\xff\xff";


void EmbedMe(unsigned char * pImage,
                    DWORD srcRva,
                    DWORD srcOfst,
                    DWORD targetRva,
                    DWORD targetOfst,
                    BOOL call)
{
    unsigned char * pTarget = pImage + targetOfst;
    unsigned char * pSrc = pImage + srcOfst;
    if ( call )
    {
        pSrc[0] = 0xE8; // call
        * (DWORD * ) (embedded+EMBEDME_JMP_OFST) = ( ( * (DWORD * ) (pSrc + 1) ) + srcRva + 5 - ( targetRva + EMBEDME_JMP_OFST + 4));
        * (DWORD * ) (pSrc + 1) = ( targetRva - (srcRva + 5) );
    }
    else
    {
        memcpy(embedded + EMBEDME_REPLACE_OFST, pSrc, 5 );
        pSrc[0] = 0xE9; // jmp
        * (DWORD * ) (pSrc + 1) = ( targetRva - (srcRva + 5) );
        * (DWORD * ) (embedded+EMBEDME_JMP_OFST) = ( srcRva + 5 - (targetRva + EMBEDME_JMP_OFST + 4 ) );
    }
    memcpy(pTarget, embedded, sizeof(embedded) );
}


int main(int argc, char* argv[])
{
    HANDLE fHandle;
    unsigned char * pImage;
    BOOL call = TRUE;
    DWORD srcRva, srcOfst, targetRva, targetOfst, fileLow, fileHigh;
    if ( argc != 7 )
    {
        printf("Please notice the following numbers in hex as well as RVA\n"
                "To embed the embedded as a callable\n"
                " embedme -c SrcRva FileOfst TargetRva TargetOfst filename\n"
                "To embed the embedded as a jumpable\n"
                " embedme -j SrcRva FileOfst TargetRva TargetOfst filename\n");

        printf("\n\n");
        system("PAUSE");

        return 1;
    }

    if ( strcmp(argv[1], "-c") != 0 )
        call = FALSE;

    sscanf(argv[2], "%x", &srcRva);
    sscanf(argv[3], "%x", &srcOfst);
    sscanf(argv[4], "%x", &targetRva);
    sscanf(argv[5], "%x", &targetOfst);

    fHandle = CreateFile(argv[6],
                                GENERIC_READ | GENERIC_WRITE,
                                0,
                                NULL,
                                OPEN_EXISTING,
                                0,
                                NULL );
    if ( fHandle == INVALID_HANDLE_VALUE )
    {
        printf("Failed to open file %s for error %d\n", argv[6], GetLastError() );

        printf("\n\n");
        system("PAUSE");

        return 2;
    }

    fileLow = GetFileSize(fHandle, & fileHigh);
    if ( fileHigh || ( fileLow == 0 ) )
    {
        printf("File is either too big or empty\n", argv[6]);
        CloseHandle(fHandle);

        printf("\n\n");
        system("PAUSE");

        return 3;
    }

    pImage = (unsigned char *) malloc(fileLow);
    if ( pImage == NULL )
    {
        printf("Run out of memory so early?\n");
        CloseHandle(fHandle);

        printf("\n\n");
        system("PAUSE");

        return 4;
    }

    if ( ReadFile(fHandle, pImage, fileLow, &fileHigh, NULL ) &&
        ( fileLow == fileHigh) )
    {
        SetFilePointer(fHandle, 0, NULL, FILE_BEGIN); // reset it for writing
        EmbedMe(pImage, srcRva, srcOfst, targetRva, targetOfst, call);
        if ( ! WriteFile(fHandle, pImage, fileLow, &fileHigh, NULL ) ||
        ( fileLow != fileHigh ) )
        {
            printf("Failed to write to file %s for error %d\n",
            argv[6], GetLastError() );
        }
    }
    else
    {
        printf("Failed to read from file %s for error %d\n",
        argv[6], GetLastError() );
    }
    CloseHandle(fHandle);

    printf("\n\n");
    system("PAUSE");

    return 0;
}

На что можно заменить int argc, char* argv[]?


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
ZC1989
Дата 29.5.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



ребят, подскажите плиzzzzzz smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
dumb
Дата 30.5.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



ZC1989, ищи по фразе "inject dll" и используй готовый код.
PM MAIL   Вверх
ZC1989
Дата 30.5.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



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


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
dumb
Дата 30.5.2007, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



Цитата(ZC1989 @  30.5.2007,  16:40 Найти цитируемый пост)
а мне надо на всегда 

выше вроде речь уже была про внедрение в explorer.exe? - вот и действуй.
PM MAIL   Вверх
ZC1989
Дата 30.5.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: 1
Всего: 1



dumb, я ваабще-то и привёл код нарытый в какой-то статье...одна проблема, я не знаю английского....и нормальные статьи по РЕ не для мя....а тот код порит ехе"шник....или это вообще не для того код? скажите пожалуйста


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.