C++ Гайд Создаём свой модуль и используем его функции в своей программе

Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
Всем доброго времени суток!
Приступим.

1. Создаём проект нашего модуля (dll) и функцию
C++:
#define DllExport   __declspec( dllexport )

//DllExport - экспортируем нашу функцию
//Точку входа в модуле прописывать не нужно!

DllExport bool Fun()
{
    /* тело нашей функции */
    int a = 55;
    if (a > 10)
        return true;
    return false
}

2. Добавляем в нашу программу импортирование этой функции
C++:
#define Load(dll)    LoadLibrary(dll)
#define Unload(dll) FreeLibrary(dll)
#define Fun(lib, namefun) GetProcAddress(lib, namefun)
   
bool MyModule(LPCSTR Module, LPCSTR Func) //Имя нашего модуля, имя функции
{
    int Error = GetLastError();

    typedef bool (*import_fun)(/*тут нужно указывать аргументы функции (по необходимости)*/); //прототип функции

    HINSTANCE hinstLib = Load(Module); //загружаем наш модуль

    if (!hinstLib) { // если загрузить модуль не удалось - выводим код ошибки
        cout << "Load Module \"" << Module << "\"\nError: " << Error << endl;
        system("pause");
    }

    import_fun MyFun = (import_fun)Fun(hinstLib, Func);  //указываем дескриптор модуля и имя функции

    if (Unload(hinstLib) == false) //выгружаем наш модуль и проверяем результат
    {
        cout << "Unload Module \"" << Module << xorstr_("\"\nError: ") << Error << endl;
        system("pause");
    }

    return MyFun; // возвращаем полученный результат функции
}

3. Используем!
C++:
void Fun()
{
    cout << MyModule("путь до вашего модуля (и имя)", "?Fun@@YA_NXZ") << endl;
    /*откуда появились новые символы?
    все просто, эти символы добавляет компилятор, в них содержится информация о функции, тип данных, аргументы и так далее.
    как получить полное название?
    закидываем модуль в ida и ищем в строках название нашей функции*/
}

int main()
{
    Fun();
    system("pause");
    return 0;
}
 
Забаненный
Статус
Оффлайн
Регистрация
3 Мар 2022
Сообщения
22
Реакции[?]
7
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем доброго времени суток!
Приступим.

1. Создаём проект нашего модуля (dll) и функцию
C++:
#define DllExport   __declspec( dllexport )

//DllExport - экспортируем нашу функцию
//Точку входа в модуле прописывать не нужно!

DllExport bool Fun()
{
    /* тело нашей функции */
    int a = 55;
    if (a > 10)
        return true;
    return false
}

2. Добавляем в нашу программу импортирование этой функции
C++:
#define Load(dll)    LoadLibrary(dll)
#define Unload(dll) FreeLibrary(dll)
#define Fun(lib, namefun) GetProcAddress(lib, namefun)
  
bool MyModule(LPCSTR Module, LPCSTR Func) //Имя нашего модуля, имя функции
{
    int Error = GetLastError();

    typedef bool (*import_fun)(/*тут нужно указывать аргументы функции (по необходимости)*/); //прототип функции

    HINSTANCE hinstLib = Load(Module); //загружаем наш модуль

    if (!hinstLib) { // если загрузить модуль не удалось - выводим код ошибки
        cout << "Load Module \"" << Module << "\"\nError: " << Error << endl;
        system("pause");
    }

    import_fun MyFun = (import_fun)Fun(hinstLib, Func);  //указываем дескриптор модуля и имя функции

    if (Unload(hinstLib) == false) //выгружаем наш модуль и проверяем результат
    {
        cout << "Unload Module \"" << Module << xorstr_("\"\nError: ") << Error << endl;
        system("pause");
    }

    return MyFun; // возвращаем полученный результат функции
}

3. Используем!
C++:
void Fun()
{
    cout << MyModule("путь до вашего модуля (и имя)", "?Fun@@YA_NXZ") << endl;
    /*откуда появились новые символы?
    все просто, эти символы добавляет компилятор, в них содержится информация о функции, тип данных, аргументы и так далее.
    как получить полное название?
    закидываем модуль в ida и ищем в строках название нашей функции*/
}

int main()
{
    Fun();
    system("pause");
    return 0;
}
как хукнуть експорт чужой дллки?
 
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
как хукнуть експорт чужой дллки?
Все тоже самое, загружай в прогу эту дллку, имя функции только не забудь изменить, ну и аргументы, тип данных там все такое.
Кстати, с выводом строки у меня были проблемы, строка получается битой, решение: выводить в консоль например (в самой функции модуля)

Защитится от этого можно так:
C++:
DllExport bool Fun(int code)
{
    if (code != 0001)
        exit(0);
    
    /* тело нашей функции */
    int a = 55;
    if (a > 10)
        return true;
    return false
}
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
3 Апр 2020
Сообщения
1,163
Реакции[?]
593
Поинты[?]
8K
а название фиксить экспорта не нужно по твоему, чтобы он был без рандомных символов
 
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
std::X$$V::Z::_Func_impl_no_alloc
Пользователь
Статус
Оффлайн
Регистрация
30 Мар 2019
Сообщения
389
Реакции[?]
103
Поинты[?]
1K
Всем доброго времени суток!
Приступим.

1. Создаём проект нашего модуля (dll) и функцию
C++:
#define DllExport   __declspec( dllexport )

//DllExport - экспортируем нашу функцию
//Точку входа в модуле прописывать не нужно!

DllExport bool Fun()
{
    /* тело нашей функции */
    int a = 55;
    if (a > 10)
        return true;
    return false
}

2. Добавляем в нашу программу импортирование этой функции
C++:
#define Load(dll)    LoadLibrary(dll)
#define Unload(dll) FreeLibrary(dll)
#define Fun(lib, namefun) GetProcAddress(lib, namefun)
  
bool MyModule(LPCSTR Module, LPCSTR Func) //Имя нашего модуля, имя функции
{
    int Error = GetLastError();

    typedef bool (*import_fun)(/*тут нужно указывать аргументы функции (по необходимости)*/); //прототип функции

    HINSTANCE hinstLib = Load(Module); //загружаем наш модуль

    if (!hinstLib) { // если загрузить модуль не удалось - выводим код ошибки
        cout << "Load Module \"" << Module << "\"\nError: " << Error << endl;
        system("pause");
    }

    import_fun MyFun = (import_fun)Fun(hinstLib, Func);  //указываем дескриптор модуля и имя функции

    if (Unload(hinstLib) == false) //выгружаем наш модуль и проверяем результат
    {
        cout << "Unload Module \"" << Module << xorstr_("\"\nError: ") << Error << endl;
        system("pause");
    }

    return MyFun; // возвращаем полученный результат функции
}

3. Используем!
C++:
void Fun()
{
    cout << MyModule("путь до вашего модуля (и имя)", "?Fun@@YA_NXZ") << endl;
    /*откуда появились новые символы?
    все просто, эти символы добавляет компилятор, в них содержится информация о функции, тип данных, аргументы и так далее.
    как получить полное название?
    закидываем модуль в ida и ищем в строках название нашей функции*/
}

int main()
{
    Fun();
    system("pause");
    return 0;
}
Ещё бы ты бустдлл использовать людей научил, цены бы тебе не было. А то твои кривокосые импорты через винапи выглядят как кусок кала
 
Сверху Снизу