Вопрос Необработанное исключение исполнения, как исправить?

Начинающий
Статус
Оффлайн
Регистрация
27 Авг 2023
Сообщения
3
Реакции[?]
0
Поинты[?]
0
На 27 строчке Необработанное исключение по адресу 0x00007FFCEA495280 в FLY.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x00007FFCEA495280.
C++:
#include "memory.h"
#include "Includes.h"
#include "Class.h"
#define ui unsigned long long
auto mem = Memory("dota2.exe");
SignatureScanner SigS;
typedef ui(__fastcall* fNextEnt)(ui, ui);
fNextEnt NextEnt;
ui CGameEntSystem;

inline ui GetAbsoluteAddress(ui instruction_ptr, int offset, int size)
{
    return instruction_ptr + mem.RPM<int32_t>(instruction_ptr + offset) + size;
}
void main() {

    SigS.GetProcess("dota2.exe");

    const char* pat = "41 57 48 83 EC 40 83 BA ? ? ? ? ? 4C 8B FA 7D 14 48 8D 0D ? ? ? ? 48 83 C4 40 41 5F 48 FF 25 ? ? ? ? 48 89 5C 24 ? 48 8D 0D ? ? ? ? 48 89 7C 24 ? 4C 89 64 24 ? 45 33 E4 4C 89 6C 24 ? FF 15 ? ? ? ? 41 8B 87 ? ? ? ? BB ? ? ? ? 3B C3 7E 5A 8B FB 0F 1F 40 00 48 85 FF 78 11 3B D8 7D 0D 49 8B 87 ? ? ? ? 48 8B 14 F8 EB 07 48 8D 15 ? ? ? ? 48 8D 0D ? ? ? ? FF 15 ? ? ? ? 41 8B 87 ? ? ? ? FF C8 3B D8 74 0D 48 8D 0D ? ? ? ? FF 15 ? ? ? ? 41 8B 87 ? ? ? ? FF C3 48 FF C7 3B D8 7C AC 48 8D 0D ? ? ? ? FF 15 ? ? ? ? 48 8B 0D ? ? ? ? 33 D2 E8 ? ? ? ? 4C 8B E8 48 85 C0 0F 84 ? ? ? ?";
    module mod = SigS.GetModule("client.dll");

    ui ent_find_pat = mem.ScanEx(pat, (char*)mod.dwBase, mod.dwSize, SigS.TargetProcess);

    NextEnt = (fNextEnt)GetAbsoluteAddress(ent_find_pat + 0xCA, 1, 5);
    CGameEntSystem = mem.RPM<ui>(GetAbsoluteAddress(ent_find_pat + 0xC1, 3, 7));

    ui ent = NextEnt(CGameEntSystem, 0);
    while (ent) {
      


        if (mem.RPM<ui>(ent + 0x10))
        {
            if (mem.RPM<ui>(mem.RPM<ui>(ent + 0x10) + 0x18))
                cout << ("ent name \n", mem.RPM<ui>(mem.RPM<ui>(ent + 0x10) + 0x18));
            else if (mem.RPM<ui>(mem.RPM<ui>(ent + 0x10) + 0x20))
                cout << ("ent name \n", mem.RPM<ui>(mem.RPM<ui>(ent + 0x10) + 0x20));
        }
        mem.RPM<ui>(mem.RPM<ui>(ent + 0x10) + 0x60) == 0 ? ent = 0 : ent = mem.RPM<ui>(mem.RPM<ui>(mem.RPM<ui>((ent + 0x10) + 0x60)));

    }
    cout << ("injection completed successfuly at !\n", (ui)std::to_string(std::time(0)).c_str());
};
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
774
Реакции[?]
330
Поинты[?]
62K
0xC0000005 вылетает как правило либо если ты с инвалидного адреса считываешь(например нуллптр)
по одному указатели все свои проверяй и логай и ищи кривое говно среди них
ну и лучше вместо ui юзай указатели на модели
модель это грубо говоря этакий "фейковый" класс который описывает члены лежащие на определенных оффсетах/или всякие функции
C++:
class NormalClass
{
public:
    template<class T>
    auto& Member(std::ptrdiff_t offset) noexcept
    {
        return *reinterpret_cast<T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
    }
 
    template<class T>
    const auto& Member(std::ptrdiff_t offset) const noexcept
    {
        return *reinterpret_cast<const T*>(reinterpret_cast<std::uintptr_t>(this) + offset);
    }
};
(код в мембере можешь на свою рпм заменить естественно)
ну допустим пускай у тебя будет модель C_BaseEntity, у нее на 0x10 лежит указатель на модель CEntityIdentity, у нее на 0x18 и 0x20 лежат m_name и m_designerName
условно
C++:
class CEntityIdentity : public NormalClass
{
    const char* Name()
    {
        return Member<const char*>(0x18);
    }
    const char* DesignerName()
    {
        return Member<const char*>(0x20);
    }
};
class C_BaseEntity : public NormalClass
{
    CEntityIdentity* Identity()
    {
        return Member<CEntityIdentity*>(0x10);
    }
};
...
C_BaseEntity* ent = ...
if(ent != nullptr)
{
    CEntityIdentity* identity = ent->Identity();
    if(identity != nullptr)
    {
        const char* name = identity->Name();
        if(name != nullptr)
            log(name);
    }
}
ну и плюс я так и не понял у тебя экстернал это?
если да то хули ты функцию NextEnt вызываешь?) она же не в твоем адресном пространстве, это же не интернал
она внутри доты живет а не внутри твоего экстернал чита
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
660
Реакции[?]
104
Поинты[?]
67K
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
774
Реакции[?]
330
Поинты[?]
62K
хз, я не пытался получить то что возвращает оно
Пожалуйста, авторизуйтесь для просмотра ссылки.

и вообще я не совсем пойму зачем вызывать ему функцию если там есть на оффсете некст?
функция QWORD(инт64) возвращает, а ексит код это дворд. при касте из кворда в дворд остается лоу дворд, а хай дворд выбрасывается(допустим 0x000001642783F580 превратится в 0x2783F580 а 0x00000164 потеряется). кр4 хуйня эти ексит коды. мораль в том что ему либо интернал нужен если он хочет функции вызывать либо ребилдить их если он экстернал хочет
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
660
Реакции[?]
104
Поинты[?]
67K
функция QWORD(инт64) возвращает, а ексит код это дворд. при касте из кворда в дворд остается лоу дворд, а хай дворд выбрасывается(допустим 0x000001642783F580 превратится в 0x2783F580 а 0x00000164 потеряется). кр4 хуйня эти ексит коды. мораль в том что ему либо интернал нужен если он хочет функции вызывать либо ребилдить их если он экстернал хочет
я в блекбоне видел нормальный ремоут вызов функции даж в своем
Пожалуйста, авторизуйтесь для просмотра ссылки.
, ток хз что там внутри

upd
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
774
Реакции[?]
330
Поинты[?]
62K
я в блекбоне видел нормальный ремоут вызов функции даж в своем
Пожалуйста, авторизуйтесь для просмотра ссылки.
, ток хз что там внутри

upd
Пожалуйста, авторизуйтесь для просмотра ссылки.
оно просто инжектит шеллкод, это уже не совсем экстернал будет тогда)
 
Начинающий
Статус
Оффлайн
Регистрация
27 Авг 2023
Сообщения
3
Реакции[?]
0
Поинты[?]
0
я пытался использовать createremotethread и ремоут вызов функции и всегда вылетала необработанное исключение исполнения.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
774
Реакции[?]
330
Поинты[?]
62K
я пытался использовать createremotethread и ремоут вызов функции и всегда вылетала необработанное исключение исполнения.
что ты пытался вызывать, как вызывал? и есть дебагер который ловит исключения паузит и показывает тебе контекст.
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
660
Реакции[?]
104
Поинты[?]
67K
я пытался использовать createremotethread и ремоут вызов функции и всегда вылетала необработанное исключение исполнения.
ало нафига тебе ее вызывать то??? первый энтити просто берешь entitysystem + 0x210 и потом вайл(ентити) ентити = *(ентити+0x60)
только учти что ентити у которого ты берешь некст это идентити и чтобы тебе получить напри мер ману нужно *(*(ентити+0x10))+flmana и тд
 
Сверху Снизу