Перейти к содержанию

Лидеры


Популярный контент

Показан контент с высокой репутацией 02/10/19 во всех областях

  1. 2 балла
    Знание модификатора переменной на этапе реверса поможет найти проблемы в коде или новый функционал для читов. Для примера, если программист не указал модификатор переменной, то компилятор решит использоваться signed по стандарту, это может привести к проблемам, например к целочисленному переполнению, если в коде, не будет соответствующей проверки. Для начала посмотрим на таблицу, чтобы понять в чем разница. Как вы видите, разница в диапазонах. А теперь посмотрим на примере одного и того же кода на c++, различие в инструкциях signed и unsigned модификаторов. Signed | Unsigned push rbp | push rbp mov rbp,rsp | mov rbp,rsp mov DWORD PTR [rbp-0x4],edi | mov DWORD PTR [rbp-0x4],edi cmp DWORD PTR [rbp-0x4],0x62 | cmp DWORD PTR [rbp-0x4],0x62 jg 4004cc <test_signed(int)+0x1a> | ja 4004c9 <test_signed(unsigned int)+0x17> mov eax,DWORD PTR [rbp-0x4] | mov eax,DWORD PTR [rbp-0x4] lea edx,[rax+0x32] | add eax,0x19 mov eax,DWORD PTR [rbp-0x4] | add eax,eax add eax,edx | jmp 4004c9 <test_signed(unsigned int)+0x17> jmp 4004cc <test_signed(int)+0x1a> | pop rbp pop rbp | ret ret | Первое это конечно же условные прыжки: jg, jge, jl, jle = прыжки основанные на signed сравнении (Они проверяют SF флаг) ja, jae, jb, jbe = прыжки основанные на unsigned сравнении (Они проверяют CF флаг) Второе инструкции( на примере умножения и деления) imul + idiv = signed mul + div = unsigned Это примеры для самых основных команд, которые встречаются чаще всего, хотите больше? Добро пожаловать в документацию . На практике это дает возможность, делать отрицательное/огромное значение, там где не должно их быть. И в случае невнимательности программистов, что-то пойдет не так, но будет весело.
  2. 2 балла
  3. 1 балл
    Однажды я уже рассказывал как обойти проверку целостности руками, но это долго, нудно, да и кому вообще надо?! Для начала необходимые утилиты: x64dbg, CrySearch/CE, любой компилятор. Нашли адрес отвечающий за патроны, ставим на него бряк на запись, выходи на пишущую инструкцию, ставим бряк на доступ размером 1 байт в памяти на эту инструкцию и ждем срабатывания. После срабатывания в заголовке x64dbg будет написан ID потока. Переходим во вкладку "Потоки", здесь нам необходим только адрес начала: Теперь переходим к автоматизации, вся суть этого обхода в получении всех потоков и сравнении адреса начала, т.е если адрес начала равен 0x7FF730E2449D, то убиваем поток. Вот и весь обход. if (reinterpret_cast<DWORD64>(thread->Win32StartAddress) == (reinterpret_cast<DWORD64>(mainModule) + 0x4490)) { HANDLE hThread = OpenThread(THREAD_TERMINATE, FALSE, threadId); TerminateThread(hThread, 1); CloseHandle(hThread); } 0x4490 это относительный виртуальный адрес адреса начала потока.
  4. 1 балл

    Версия 1.0

    97 раз скачали

    F1 health F2 money F3 ammo F4 no reload F5 perfect aim F6 no recoil F7 rapid fire F8 hyper fire F9 no heat level
×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.