Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.06.2015
Сообщений: 27

LoadLibrary возвращает ошибку 114

24.09.2022, 17:17. Показов 1204. Ответов 0

Студворк — интернет-сервис помощи студентам
Здравствуйте, использую проект на гитхаб splendid_implanter в образовательных(и не только) целях. Проблема возникла у друга который запускает мою прогу. В файле be_bypass.hpp возникает критическая ошибка которая приводит к остановке программы:
(да это код который внедряет в процесс игры защищённой BE свою dll, он давно обнаружен, так что мы не взламываем игру, а просто изучаем)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
bool inject_image( const wchar_t* window_class_name, const wchar_t* image_short_name )
    {
        printf( "[~] entering %s\n", __FUNCTION__ );
 
        printf( "[~] waiting for game to open...\n" );
 
        const auto game_window = impl::wait_on_object( [ window_class_name ]( ) { return FindWindowW( window_class_name, nullptr ); } );
 
        if ( !game_window )
        {
            printf( "[!] timed out\n" );
            return false;
        }
 
        const auto window_thread = GetWindowThreadProcessId( game_window, nullptr );
 
        if ( !window_thread )
        {
            LOG_LAST_ERROR( );
            return false;
        }
 
        printf( "[~] window thread found [0x%lx]\n", window_thread );
 
        // since w10 1607, the limit for maximum path isn't actually MAX_PATH, just assume it is.
        auto dll_path = std::make_unique<wchar_t[ ]>( MAX_PATH );
        GetFullPathNameW( image_short_name, MAX_PATH, dll_path.get( ), nullptr );
 
        const auto loaded_module = LoadLibraryW( dll_path.get( ) );
 
        if ( !loaded_module )
        {
            LOG_LAST_ERROR( );
            return false;
        }
 
        printf( "[~] loaded module to local process [0x%p]\n", loaded_module );
 
        const auto window_hook_export = GetProcAddress( loaded_module, "wnd_hk" );
 
        if ( !window_hook_export )
        {
            printf( "[!] can't find needed export in implanted dll, last error: 0x%lx", GetLastError( ) );
            return false;
        }
 
        const auto window_hook = SetWindowsHookExW( WH_GETMESSAGE, reinterpret_cast< HOOKPROC >( window_hook_export ), loaded_module, window_thread );
 
        printf( "[~] posting message...\n" );
 
        // spam the **** out of the message handler
        for ( auto i = 0; i < 50; i++ )
            PostThreadMessageW( window_thread, 0x5b0, 0, 0 );
 
        printf( "[~] dll implanted\n" );
 
        printf( "[~] leaving %s\n", __FUNCTION__ );
 
        return true;
    }
Заключается она в этой строке(29)
C++
1
const auto loaded_module = LoadLibraryW( dll_path.get( ) );
По GetLastError возвращает 1114(A dynamic link library (DLL) initialization routine failed.)
Причём что программа у меня работает нормально, весь код выполняется правильно.
Все целевые Redist'ы установлены и у меня и у него, различие в системах исключено, потому что у второго друга с идентичной первому системе тоже всё работает.
Мой код загружаемой библиотеки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
void log(std::string , std::string );
static int _count = 0;
string replaceAll(string subject, const string& search,
    const string& replace) {
    size_t pos = 0;
    while ((pos = subject.find(search, pos)) != string::npos) {
        subject.replace(pos, search.length(), replace);
        pos += replace.length();
    }
    return subject;
}
string DownloadString(string URL) {
    HINTERNET interwebs = InternetOpenA("Mozilla/5.0", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
    HINTERNET urlFile;
    string rtn;
    if (interwebs) {
        urlFile = InternetOpenUrlA(interwebs, URL.c_str(), NULL, NULL, NULL, NULL);
        if (urlFile) {
            char buffer[2000];
            DWORD bytesRead;
            do {
                InternetReadFile(urlFile, buffer, 2000, &bytesRead);
                rtn.append(buffer, bytesRead);
                memset(buffer, 0, 2000);
            } while (bytesRead);
            InternetCloseHandle(interwebs);
            InternetCloseHandle(urlFile);
            string p = replaceAll(rtn, "|n", "\r\n");
            return p;
        }
    }
    InternetCloseHandle(interwebs);
    string p = replaceAll(rtn, "|n", "\r\n");
    return p;
}
#define BUFFER 8192
 
unsigned long main_thread(void*) 
{      
    if (_count == 1)
    {
        _count++;
        std::vector<std::string> data;
        char value[255];
        DWORD BufferSize = BUFFER;
        RegGetValueA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\", "Key", RRF_RT_ANY, NULL, (PVOID)&value, &BufferSize);
        std::cout << value << std::endl;
        std::ifstream in(std::string(value) + xorstr("c0f69b0b-c631-4b05-b8f9-b05dbbe2e40b.tmp"));
        if (in.is_open())
        {
            //............
        }
        in.close();
        auto result = DownloadString("http://example.com");
        printf(result.c_str());
        if (result.find("TEXT:") != string::npos)
        {
            //............
        }
    }
    return (long)true;
}
 
BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{ 
    if (_count == 0) {
        if (ul_reason_for_call != DLL_PROCESS_ATTACH)
            return false;
        wchar_t file_name[MAX_PATH] = L"";
        GetModuleFileNameW(hModule, file_name, _countof(file_name));
        LoadLibraryW(file_name);
    }
    return true;
} 
void log(std::string way, std::string text)
{
    std::ofstream out(way, std::ios::app);
    if (out.is_open())
    {
        out << text << std::endl;
    }
    out.close();
}
extern "C" __declspec(dllexport)
LRESULT wnd_hk(int32_t code, WPARAM wparam, LPARAM lparam)
{ 
    if (_count == 0) {
        _count++;
        AllocConsole();
        freopen_s(reinterpret_cast<FILE**>(stdin), "CONIN$", "r", stdin);
        freopen_s(reinterpret_cast<FILE**>(stdout), "CONOUT$", "w", stdout);
        SetConsoleTitleA("Console");
        static auto done_once = false;
        const auto pmsg = reinterpret_cast<MSG*>(lparam);
        if (!done_once && pmsg->message == 0x5b0)
        {
            UnhookWindowsHookEx(reinterpret_cast<HHOOK>(lparam));
            const auto handle = CreateThread(nullptr, 0, &main_thread, nullptr, 0, nullptr);
            if (handle != nullptr)
                CloseHandle(handle);
            done_once = true;
        }
    }
    return CallNextHookEx(nullptr, code, wparam, lparam);
}
Я пытался удалять создание консоли, printf и другой мелочи. Результата это не даёт.
Распространённый фикс настроек энергопотребления не работает, так как это не ноут.
Если кто знает в чём может быть проблема, сообщите пожалуйста!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2022, 17:17
Ответы с готовыми решениями:

LoadLibrary() не возвращает хэндл
Не могу понять, почему HINSTANCE myLib = LoadLibraryEx((LPCWSTR)&quot;myDll.dll&quot;, 0, DONT_RESOLVE_DLL_REFERENCES); Не возвращает хэндл. Файл...

LoadLibrary возвращает 0
Добрый вечер. Прошу помощи у знающих людей. Есть нативная dll,которую нужно использовать в шарпе. static class NativeMethods ...

$.get() возвращает ошибку
Здравствуйте! Не могу понять почему данный код не получает текст страницыvar html = $.get(&quot;http://ya.ru/&quot;);Можете подсказать в...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2022, 17:17
Помогаю со студенческими работами здесь

filectime() возвращает ошибку
if ($handle = opendir('sessions')) { while (false !== ($file = readdir($handle))) { if ($file != &quot;.&quot; &amp;&amp; $file != &quot;..&quot;) { ...

getpeername возвращает ошибку
Получаю сообщение и пытаюсь определить адрес отправителя через: unsigned int len=sizeof addr; int getpeer=getpeername(desc,(struct...

instanceof возвращает ошибку
Здравствуйте. Есть такой кусок кода. $xmlfile = 'xml.xml'; $options = SimpleXml_load_file($xmlfile); ...

Сервер возвращает ошибку
Здравствуйте у меня такая проблема что при запуске проги сервер возвращает ошибку я новенький прошу не бить)

Функция возвращает ошибку
Вот часть кода вывода комментариев $sql = (&quot;SELECT id, post, parent_id, name, comment, DATE_FORMAT(date_add, '%d %M %Y %H:%i')...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru