-
Постов
1 635 -
Зарегистрирован
-
Посещение
-
Победитель дней
55
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент keng
-
Memoryrecord тут, как я понимаю, адрес памяти. Который, кстати, бесполезно искать aobscan'ом, ибо он ищет адрес инструкции (код), а не памяти (данные). Адреса памяти ищутся через указатели. Т.е. (пвесдокод): 0x12345678: mov eax,[ebx] И при этом ebx = 0x7654321. Вот адрес инструкции, работающей с памятью, найти можно по сигнатуре байт через aobscan. А заморозить можно адрес, с которым эта инструкция работает, т.е. 0x7654321.
-
Документация говорит, что: Sets the entry to frozen state. updownfreeze is optional. 0=freeze, 1=allow increase, 2=allow decrease Так что должно быть что-нибудь вроде: memoryrecord_freeze(memoryrecord, 0) Хотя и пишут, что второй аргумент не обязателен. Покажи весь код, заодно проверь, есть ли права на эту страницу памяти.
-
В дизайнере мышкой тыкать любой дурак сможет - а тут как раз и спрашивают про то, как это сделать программно.
-
Тогда надо идти вот [сюда], искать там по запросу "ComboBox Class" и смотреть методы, которые оно умеет.
-
[Раз] и [два]. Вроде оно.
-
Ну вообще, если "просто увидел что делают", но сам смысла этой фичи не понимаешь - лучше не делай, зря только голову забьёшь.
-
Я, кстати, именно по этой причине веду блог (и заодно в тетрадку записываю) - у меня от этого информация гораздо лучше в голове укладывается.
-
Што значит "как проверить"? Пишешь скрипт для этого адреса, если работает - значит адрес верный и команду ты нашёл нужную, если нет - значит нет. Ты же до этого скрипты писал (без aobscan) - вот то же самое. Самый обычный скрипт. Хотя, если ты задаёшь подобные вопросы - можешь ответить, зачем тебе использование aobscan в скрипте понадобилось?
-
В конструкторе формы: public Asm1() { InitializeComponent(); GetProcess("pointblank.exe"); //525927 //var address = 0x006903B0; //var offsets = new byte[] { 0xC, 0x14, 0x0, 0x18 }; //ReadBytes(address, offsets); FindSignature(); } У тебя вызывается GetProcess(), а затем - FindSignature(). По идее, достаточно вызывать GetProcess(), т.к. весь остальной функционал у тебя повешан в обработчик нажатия на кнопку: private void button1_Click(object sender, EventArgs e) Вот в его начало и ставь брейкпоинт, а затем на кнопку нажимай.
-
1. Проверяешь, что это верный адрес (пишешь скрипт). 2. Берёшь опкоды (89 86 64 07 и так далее) из отладчика, модифицируешь скрипт с использованием aobscan().
-
Я три лупы разбил, пока скриншот разглядывал, но: 1. В строчке if(handle != 0) переменная handle имеет тип IntPtr, который нельзя сравнивать с типом int, так что поменяй на handle != IntPtr.Zero. Как я уже предупреждал выше, я писал псевдокод, так что компилятор вообще не в курсе, что ты имеешь ввиду под словом "All" в вызове OpenProcess. Согласно [документации], первым её аргументом является тип прав, которые хочется получить. Те, что мы хотим получить - это PROCESS_ALL_ACCESS, которые в 16-ричной системе счисления записываются как 0x1F0FFF. Вот и получается: var handle = OpenProcess(0x1F0FFF, false, pID); Где pID - идентификатор процесса игры, который ты находишь ранее.
-
Это когда ты нашёл адрес памяти, жмёшь на нём ПКМ и говоришь "Find what writes to this address", выскакивает окошко отладчика - идёшь обратно в игру и значение адреса меняешь - а отладчик показывает инструкции, которые это самое значение поменяли. Вот у тебя там выскочила инструкция call блаблабла - это явно не то, потому что это вызов функции, а инструкции должны быть аля: inc eax dec eax mov eax,ebx mov [0x12345],eax fstp [eax+0x25] Такого вида, но никак не какие-нибудь call или ret. Попробуй подольше поизменять адрес - если, к примеру, ищешь патроны - смени оружие, поперезаряжайся и так далее. Если вылезает только эта инструкция - попробуй найти значение чего-нибудь ещё, например гранат или здоровья.
-
Аобскан аобсканом, но ему для поиска адреса нужна правильная инструкция. Попробуй другой тип значения поискать, или ещё поотлаживай уже найденный адрес.
-
Так тебе ведь уже в соседней теме подсказали, что это явно не та инструкция. Выход - искать другую, которая должна работать с адресом\регистром, а не вызывать какую-то другую функцию.
-
Привет! Примерно так: var myFoundAddress = FindSignature(); //Вызов возвратит тебе или -1 (если не нашёл), или адрес (если нашёл) if(myFoundAddress!=-1) { //Проверяем, что адрес найден var handle = OpenProcess(All, false, pID); //Получаем хендл процесса с правами на запись в память if(handle!=0) { //Проверяем, что хэндл получен WriteProcessMemory(handle, myFoundAddress, myValues, 0); //Пишем CloseHandle(handle); //Закрываем хэндл } } Псевдокод, но должно быть понятно. Для удобства можно чуть видоизменить метод сканирования - добавить в аргументы имя модуля и сигнатуру, типа того: public int FindSignature(string module, int[] signature)
-
Кнопочка Memory View открывает окно отладчика, верхняя часть которого состоит из дизассемблированных команд, а нижняя - из дампа памяти. Вот как раз в верхнем окне команды и записываются следующим образом: Адрес - Опкоды - Мнемоника Например: 0x123456 90 nop Как раз опкоды (представления команд в виде цифр, а не букв) и нужны для работы aobscan; Вот как это выглядит на примере OllyDbg: Выделенная строчка: 00A45025 |. 8945 FC MOV DWORD PTR SS:[LOCAL.1],EAX Адрес: 0х00A45025 Опкоды: 89 45 FC Мнемоника: MOV DWORD PTR SS:[LOCAL.1],EAX
-
Судя по всему, у тебя не хватает свободной оперативной памяти. Так как ты ищешь неизвестное значение, то первым же поиском СЕ берёт банально все адреса, какие есть в игре, а сохранить их пытается в оперативке - вот и пишет, что у тебя нет лишнего гигабайта. Так же возможно, что не хватает не оперативки, а свободного места на винчестере. Ни разу не сталкивался с подобной проблемой в СЕ - возможно, или в настройках что-то не то, или и правда места нет.
-
Так ведь трейнер по сути - тоже дополнение, изменяющие каким либо образом память и код игры. Вопрос в том, как именно его оформить - в виде отдельного .ехе, или в виде, скажем, .dll. По факту весь спект подобных программ представляет собой в той или иной степени модификации игры, сторонние. Какой именно функционал в них вложить - дело исключительно фантазии и степени кривизны рук. Я хочу сказать, что ежели игра сама по себе не знает, что такое консоль - её этому можно научить только одним способом - модификацией её кода. Я предложил только один из вариантов - вклиниться в процесс рисования, отрисовывать в нужный момент тестовое поле, перехватывать введённое и в зависимости от него производить какие-то дальнейшие действия. Это по сути тот же трейнер, но перехватываются не нажатия клавиш, а некоторый поток текста (команд). Суть одна и та же, а вывод при этом на экран - просто для лучшего понимания происходящего, визуализация, так сказать.
-
Ах, тьфу. Затупил.
-
Для начала я посоветую посмотреть, как это в СЕ реализовано. У меня идей особо нет, если навскидку - вряд ли можно таким макаром представить массив строчек, да ещё и выполнить. UPD: Нагуглил вот такой вид записи: asm("assembly code"); Т.е. как-то вот так, возможно, сработает: string myAsm [5] = { "mov %eax, $10", "mov %ebx, %eax" }; for(int i = 0; i <= strlen(myAsm); i++) { asm(myAsm[i]); } PS: Но вообще это больше на бред похоже, если заниматься таким в рантайме - инструкции должны ассемблироваться как минимум.