-
Постов
65 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Merlin
-
-
-
3 часа назад, mrPTyshnik сказал:
Ты был очень близок к разгадке.
Благодарю! То, что нужно было, доступно, понятно, по существу!
Тему я думаю можно закрывать.
-
10 часов назад, partoftheworlD сказал:
Установи бряк на функции которые используют сокет, тогда найдёшь откуда качается файл, и найдёшь проверку "целостности"
Хорошая идея, буду пробовать!
10 часов назад, partoftheworlD сказал:Так же можешь просто подменять модуль на его копию, как это сделать есть на форуме.
Буду признателен, если кинете мне ссылку, через поиск найти не удалось
-
Всем доброго времени!
Пытаюсь обойти санкции на кол-во открытых окон в игре Path of Exile (PoE):
Взять можно тут:
Скрытый текстПосмотрев множество различных материалов команды GameHackLab, пытаюсь осваивать Assembler и С++.
В качестве первого и основного инструмента реверсинга был(а) выбрана Odbg201.
Информация об exe-файле:
Текст ошибки(санкции) при запуске 3-его окна:
Сам обход ограничений, не оказался проблемой, благодаря видео широкого сообщества с просторов интернет'а, достаточно было:
1. Найти текст из окна с ошибкой.
2. Заменить условие:
Но, как показала практика, разработчики сделали в exe-шнике проверку на целостность файлов, в том числе библиотек, если изменённый файл сохранить, то в момент запуска он будет обратно заменен на оригинальный файл, соответственно, всё редактирование кода, -не зачёт!
Подскажите, пожалуйста, какой адрес процедуры надо вызвать, что бы запустить exe минуя проверку целостности?
-
1 час назад, elvis66666 сказал:
чуть короче
Спасибо за совет, но такой способ не подходит, т.к. на выходе получается уже другой тип данных, char превращается в string, а нужно, что бы итог оставался в char, т.к. дальше планируется использовать функцию send, которая требует именно char:
Скрытый текстint send( _In_ SOCKET s, _In_ const char *buf, _In_ int len, _In_ int flags );
Пример Xipho вполне подходит, только необходимо добавить -1 к переменным размера, что бы между соединяемыми данными не вклеивался нулевой байт (41:00:42)
int partSize = sizeof(part) * sizeof(part[0])-1; int sessionKeySize = sizeof(session_key) * sizeof(session_key[0])-1;
- 1
-
2 часа назад, Xipho сказал:
Как-то так...
Спасибо! Помогло, то, что надо!
-
Всем привет!
Вторые сутки не удаётся на C++ соединить (склеить) два массива char значений (part+session_key) в один char массив (result).
Где-то пробел в понимании
Код:
Скрытый текст#include <iostream> #include <Windows.h> #include <conio.h> using namespace std; int main() { char part[215] = "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41"; char session_key[17] = "\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42\x42"; char result[216] = { NULL }; strcat_s(result, 216, part); strcat_s(result, 232, session_key); for (int i = 0; i < (sizeof(result)-1); i++) { printf("%02x", result[i]); if (i < (sizeof(result) - 2)) { printf("%s",":"); } } while (1) { } }
Ожидаемый результат (part+session_key):
Скрытый текст41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:42:42:42:42:42:42:42:42:42:42:42:42:42:42:42:42
А выходит:
Скрытый текст41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:41:42
Подскажите, пожалуйста, как правильно объединить массивы без потери значений?
-
Мой вопрос тоже решился. Нужно было установить Debug привилегии у текущего процесса:
Скрытый текстvoid EnableDebugPrivilege(bool fEnable) { if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) { TOKEN_PRIVILEGES tp; tp.PrivilegeCount = 1; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid); tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0; AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL); CloseHandle(hToken); } }
-
WoW.exe всегда запускается с правами администратора, иначе его запустить просто нельзя, скомпилированный Trainer.exe (даже при запуске с правами администратора) не может получить доступ к WoW.exe, доступ работает почему-то только при запуске из Visual Studio). Соответственно функция GetModuleBaseAddress тоже не возвращает результат без запущенной студии.
Скрытый текстDWORD ProcessManager::GetModuleBaseAddress(DWORD ProcID, TCHAR* ModuleName) { DWORD_PTR ModuleBaseAddress = 0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, ProcID); if (hSnapshot != INVALID_HANDLE_VALUE) { MODULEENTRY32 ModuleEntry32; ModuleEntry32.dwSize = sizeof(MODULEENTRY32); if (Module32First(hSnapshot, &ModuleEntry32)) { do { if (_tcsicmp(ModuleEntry32.szModule, ModuleName) == 0) { ModuleBaseAddress = (DWORD)ModuleEntry32.modBaseAddr; break; } } while (Module32Next(hSnapshot, &ModuleEntry32)); } CloseHandle(hSnapshot); } return ModuleBaseAddress; }
-
Решил в эту тему запостить: подскажите, пожалуйста, почему при запуске проекта через Visual студию память целевого процесса читается и поля формы трейнера заполняются значениями из целевого процесса (работает ReadMemory), а при запуске файла, скомпилированного из проекта exe'шника, с правами администратора не читается (т.е. нет никаких ошибок, просто все поля формы трейнера пустые)?
-
Действительно, замучился писать на питоне, перешёл на C++, написал подмену координат и столкнулся с этим:
В 28.07.2016в11:50, partoftheworlD сказал:Без функции подтверждения, тебя будет откидывать назад когда изменяешь значения координат к примеру
Подскажите, пожалуйста, способ, как можно отловить функцию подтверждения?
-
Нашёл ещё способ, как получить адрес из адреса указателя, под катом, вдруг кому пригодится:
Скрытый текстint value = 0; HANDLE phandle; DWORD address = 0x0040E300; //BaseAddress + Offset = PointAddress phandle = OpenProcess(PROCESS_VM_READ, 0, m_PID); if (phandle) { ReadProcessMemory(phandle, (void*)address, &value, sizeof(value), 0); wsprintf(text, L"%X", value); MessageBox(hWnd, text, L"INFO", MB_OK | MB_ICONINFORMATION); }
-
Ещё подскажите, пожалуйста, ставить плюсы к репутации стажёрам запрещено? У меня данный функционал не активен.
-
partoftheworlD, спасибо! Удалось получить BaseAddres, дальше пытаюсь получить нужный адрес из адреса указателя:
Для этого использую функцию из уроков Xipho:
Скрытый текстBOOL ProcessManager::ReadMemory(DWORD64 addr, LPVOID buffer, int sz) { BOOL res = false; SIZE_T bytesRead = 0; HANDLE hProc = OpenProcess(PROCESS_VM_READ | PROCESS_VM_OPERATION, FALSE, m_PID); if (hProc) { res = ReadProcessMemory(hProc, (LPVOID)addr, buffer, sz, &bytesRead); if (!res) { int err = GetLastError(); } CloseHandle(hProc); res = true; } return res; } ... case WM_RBUTTONUP: { pm.ReadMemory(0x00419BA5, &outta, 4); wsprintf(text, L"0x%X", outta); MessageBox(hWnd, text, L"INFO", MB_OK | MB_ICONINFORMATION); } break;
Функция замечательно работает при чтении значений из конечных адресов, но при попытке прочитать нужный адрес из адреса указателя возвращает пустое значение. Подскажите, пожалуйста, как доработать функцию ReadMemory или что я делаю не так?
-
В уроках у Xipho есть функция FindProcessByName:
Скрытый текстBOOL ProcessManager::FindProcessByName(LPCTSTR ProcessName) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if (hSnapshot == INVALID_HANDLE_VALUE) return FALSE; PROCESSENTRY32 pe = { 0 }; pe.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hSnapshot, &pe)) { while (Process32Next(hSnapshot, &pe)) { if (!lstrcmp(pe.szExeFile, ProcessName)) { m_PID = pe.th32ProcessID; break; } } } CloseHandle(hSnapshot); return TRUE; }
Подскажите, пожалуйста, как из данной функции можно получить\вытащить значение DWORD m_PID для функции:
wsprintf(text, L"%u", m_PID);
-
1 час назад, Garik66 сказал:
Повторю и в этом сообщении посмотри это видео.
Благодарю! Не поленился, посмотрел.
-
В 19.06.2016в11:26, Xipho сказал:
Запилил в редактор кнопку ютуба. Думаю, разберетесь ))
Здравствуйте!
Если возможно, добавьте, пожалуйста, ещё кнопку спойлер'а.
Я как новичок, хоть и читал правила, но ещё не был близко знаком с данным тегом, поэтому принял тег код за тег спойлер и нарвался на предупреждение от модератора.
-
Правила я внимательно читал, ещё перечитывал несколько раз после предупреждения.
Что такое тег спойлера и что его надо было использовать вместе с тегом код дошло только сейчас
До этого в понимании было, что тег код = тег спойлер. Простите, это один из моих первых форумов, где я что-то написал.
-
В каком пункте правил форума можно ознакомиться с явным описанием использования тега SPOILER?
25 минуты назад, NullAlex сказал:Вот тут непонятно. С какого момента отсутствует возможность отправлять сообщения? Никто этой возможности не отключал, как можно заметить
Надпись под кнопкой "Я согласен с этим предупреждением" гласит:
"Вы должны согласиться с предупреждением, прежде чем сможете публиковать что-либо"
-
Как новичок форума столкнулся с "вселенской несправедливостью"!
Разместил публикацию "Трейнер на Python", которая была проверена модератором.
Через полсуток прилетело предупреждение от модератора:
Объясните, пожалуйста, логику единственной кнопки "Я согласен с этим предупреждением"?
А если не согласен и есть вопросы к модератору (где именно проигнорированы теги BB?), куда их задавать, если с этого момента отсутствует возможность отправлять сообщения?
-
Доброго времени суток!
На днях внимательно прочитал ЛУРК и решил не теряя времени заполнить не прожитые минуты своей жизни чем-то интересным на базе чего-то знакомого, собственно, поэтому и выбрал питон (знаю, что правильно будет "пайтон", но больше мне почему-то нравится, -питон). Скажу честно, по-мимо природной лени, на данный форум меня привлекли труды замечательного автора GameHackLab[RU] (здоровья ему!) . Свои силы в программировании решил опробовать на пиратских серверах WoW 1.12.1 (http://www.kronos-wow.com/), т.к. грабить награбленное -двойное удовольствие :)) Вообщем, решил написать свой трейнер на Python, ибо античит система "Warden" безжалостно уничтожает все известные читы (блокирует аккаунт), в том числе, БАН настигает сразу при попытке использовать SpeedHack в Cheat Engine 6.5.1. Бабло и шмот в первую очередь не интересуют, т.к. именно ради их достижения и есть охота побегать, поиграть. Задача для профи -минималистичная, задача для новичка -амбициозная! :))
Подскажите, пожалуйста, как перехватить адреса, оффсеты, опкоды для использования:
1. SpeeHack
2. Teleport
3. Invisible mode (без лимита по времени)
Для хуков и инжектов использую модуль PyDBG, пока что удалось получить только имя героя:
Скрытый текстfrom pydbg import * from pydbg.defines import * import utils import sys import struct import win32api import re import ctypes dbg = pydbg() found_program = False #valid_str = "Something to write" def handler_breakpoint(dbg): data = dbg.read_process_memory(relative_address,14) print "%s" % data # print "%s" % data.encode("hex") # wdata = ctypes.create_string_buffer(valid_str) # dbg.write(address, wdata, len(valid_str)) return DBG_CONTINUE for (pid, name) in dbg.enumerate_processes(): if name.lower() == "wow.exe": found_program = True hooks = utils.hook_container() dbg.attach(pid) print "Attaching with PID: %d" % pid for modules in dbg.enumerate_modules(): if str(modules)[2:6] == "WoW.": base_address = int((re.split(r', ', str(modules))[1])[0:-2]) print "Base address: 0x%08x" % base_address relative_address = base_address + 8551816 print "Relative address: 0x%08x" % relative_address dbg.set_callback(EXCEPTION_BREAKPOINT,handler_breakpoint) if found_program: print "-------------------------------" dbg.run() else: print "Error: Couldn't find process." sys.exit(-1)
Получить список всех handles процесса на C++
in Высокоуровневое программирование
Опубликовано
Если я правильно понял, список всех хэндлов в системе можно получить через функцию NtQuerySystemInformation, оттуда уже выбрать хэндлы нужного процесса.
Пытался воспользоваться примером отсюда, но в студии возникли ошибки, которые я не смог побороть, что бы запустить: