Вопрос дота не находит ent_find_pattern

coder of the year
Участник
Статус
Оффлайн
Регистрация
13 Мар 2019
Сообщения
886
Реакции[?]
266
Поинты[?]
4K
решил немного посвятить себя в дотахакинг.

1667428418143.png

C++:
    ui ent_find_pat = (ui)FPat("client.dll", "48 83 EC 28 83 3A 02 7D 12 48 8D 0D ? ? ? ? 48 83 C4 28 48 FF 25 ? ? ? ? 48 89 5C 24 ? 48 8D 0D ? ? ? ? 48 89"/*"48 83 EC ? 83 3A 02 7D 12 48 8D 0D ? ? ? ? 48 83 C4 ? 48 FF 25 ? ? ? ? 48 89 5C ? ? 48 8D 0D ? ? ? ? 48 89 6C"*/);

    if (ent_find_pat != 0)
        ConsolePrint("[+] end_fint_pat %p.\n", ent_find_pat);
    else
        ConsolePrint("[-] end_fint_pat is NULL =(\n");

через иду все прекрасно находит
1667428477273.png

p.s: client.dll загружен, делал проверку через getmodulehandle


C++:
#define ui unsigned long long
ui FPat(const ui& start_address, const ui& end_address, const char* target_pattern) {
    const char* pattern = target_pattern;

    ui first_match = 0;

    for (ui position = start_address; position < end_address; position++) {
        if (!*pattern)
            return first_match;

        const unsigned char pattern_current = *reinterpret_cast<const unsigned char*>(pattern);
        const unsigned char memory_current = *reinterpret_cast<const unsigned char*>(position);

        if (pattern_current == '\?' || memory_current == getByte(pattern)) {
            if (!first_match)
                first_match = position;

            if (!pattern[2])
                return first_match;

            pattern += pattern_current != '\?' ? 3 : 2;
        }
        else {
            pattern = target_pattern;
            first_match = 0;
        }
    }

    return NULL;
}

ui FPat(const char* module, const char* target_pattern) {
    MODULEINFO module_info = { 0 };

    if (!GetModuleInformation(GetCurrentProcess(), GetModuleHandleA(module), &module_info, sizeof(MODULEINFO)))
        return NULL;

    const ui start_address = ui(module_info.lpBaseOfDll);
    const ui end_address = start_address + module_info.SizeOfImage;

    return FPat(start_address, end_address, target_pattern);
}
на GetModuleInformation в поиске паттерна ставил брик, проверку проходит

в чем заключается ошибка, мужички?
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
672
Реакции[?]
106
Поинты[?]
69K
ну у тебя паттерн не находит вот и всё, через дебаггер составь паттерн
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
если ты сидишь с дебагера и у тебя стоит софтвейр брейкпоинт(ф2) на каких-либо инструкциях посреди этого паттерна, то паттерн не будет находить. потому что софт брейкпоинт байтпатчит оригинальные инструкции на инструкцию int3(следовательно байты инструкций меняются и паттерн уже не найдешь) которая кидает исключение которое дебагер потом ловит и паузит прогу. если ищешь сиги - не забывай снимать бпшки с функций на которые у тебя есть сиги.
мб у тебя база в иде старая или сигу криво сделал?
доту обнови и базу в иде попробуй новую создай. или попробуй в дебагере сигу составь(он с двумя вопросиками кста токо сиги понимает. ида и так и так понимает. твой FPat токо одинарные вопросики понимает).
 
coder of the year
Участник
Статус
Оффлайн
Регистрация
13 Мар 2019
Сообщения
886
Реакции[?]
266
Поинты[?]
4K
если ты сидишь с дебагера и у тебя стоит софтвейр брейкпоинт(ф2) на каких-либо инструкциях посреди этого паттерна, то паттерн не будет находить. потому что софт брейкпоинт байтпатчит оригинальные инструкции на инструкцию int3(следовательно байты инструкций меняются и паттерн уже не найдешь) которая кидает исключение которое дебагер потом ловит и паузит прогу. если ищешь сиги - не забывай снимать бпшки с функций на которые у тебя есть сиги.
мб у тебя база в иде старая или сигу криво сделал?
доту обнови и базу в иде попробуй новую создай. или попробуй в дебагере сигу составь(он с двумя вопросиками кста токо сиги понимает. ида и так и так понимает. твой FPat токо одинарные вопросики понимает).
оке, спасибо вам братки , попробую
 
Сверху Снизу