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

Xipho

Администраторы
  • Постов

    4 022
  • Зарегистрирован

  • Победитель дней

    42

Весь контент Xipho

  1. У нас на форуме есть видео по анализу структур. Когда ты нашел, как писали выше, адрес своего здоровья и здоровья хотя бы пары врагов - через СЕ можешь воспользоваться функцией Dissect Data/Structures, и добавить туда все адреса. Потом надо сидеть и анализировать структуру в поиске такого значения, которое 1. Отличается у твоего игрока и одинаково у врагов 2. При перезапуске игры не изменяется. А дальше - дело техники: пишешь фильтр на проверку этого значения. Вот и все. Более подробно ты сможешь посмотреть все это в видео от keng или Coder. Поищи по форуму, их у нас полно.
  2. HWND hwnd = CreateWindowEx (0, L"InjectedDLLWindowClass", pString, WS_EX_PALETTEWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 480, hWnd, hMenu,hModule, NULL ); В этой строке добавить (|) или убрать (~) необходимый стиль после первоначального WS_EX_PALETTEWINDOW. И да, необходимо погуглить Window Styles, чтобы попасть на MSDN, где, собственно, перечисляются все допустимые стили для окон, и объясняется, какой из них что значит.
  3. Если нужно в каждой итерации выполнения инструкции прибавлять сотню, тогда все элементарно - mov [edx+000000A8],eax add [edx+000000A8],64 Но, я так подозреваю, что это нужно делать единожды по нажатию хоткея. Тогда поможет примерно следующее: 1. Берем и сохраняем адрес адрес в какую-либо переменную (сойдет и метка в скриптах), к примеру, так: push eax // Сохраняем регистр, чтобы его восстановить после нужных манипуляций, иначе может быть вылет из игры lea eax,[edx+000000A8] // Загружаем в регистр эффективный адрес прыжка mov [jump_address],eax // Записываем в нашу переменную этот адрес pop eax // восстанавливаем регистр В скрипте, разумеется, нужно объявить нашу переменную примерно так: label(jump_address) registersymbol(jump_address) Далее, вручную создать адрес в таблице, которому присвоить нашу переменную jump_address И назначить на этот адрес хоткей, по нажатию на который будет делаться прибавление 100 к этому адресу. Разумеется, активирующий скрипт (там, где в нашу переменную записывается необходимый адрес) нужно включать первым, иначе ничего не получится.
  4. 1. Я уже в какой-то из тем писал, что такие инструкции чаще всего встречаются при переборе элементов массива. Но это, конечно, не факт, что в данном случае оно так. 2. По правилам математики, умножение обладает более высоким приоритетом, следовательно, в данном случае в ecx лежит "база", а ebp*8 - это смещение. То есть, получается, что в ecx - адрес первого элемента массива, в ebp - индекс текущего элемента массива, а 8 - это размер одного элемента массива. 3. Что нужно сделать? Нужно отследить состояние регистра ebp в момент выполнения и затем умножить его содержимое на 8. Тогда и получится "база" (ecx) + смещение (ebp*8). Надеюсь, понятно объяснил.
  5. И конечно же, как всегда, не выполняйте ничего связанного с хуком по событию onOpenProcess. Это слишком рано (если работает через ручной запуск однострочной команды, тогда попробуйте "одноразовый" таймер, так как он сработает ПОСЛЕ инициализации процесса, а не ДО.) Примерно такой перевод. Да, "одноразовый" в данном случае - это таймер, который сработает всего один раз.
  6. У нас 100 гигов на портале, так что 26 мегов - это мелочь, правда же, да? )))) ЗЫ. На досуге начал углубленно осваивать "решетки". Посмотрим, что из этого выйдет ) И да, грядет глобальное обновление нашего портала (как только выдастся свободное время).
  7. Скорее Address = $01E42498; ибо приставка 0х - это прерогатива плюсов, но не дельфей )))
  8. eax*8 - это сигнал к тому, что в данной инструкции идет перебор элементов массива. Со всеми вытекающими, разумеется. Поможет анализ кода и исследование регистров.
  9. Влад, расскажи, для каких целей тебе это нужно, и, возможно, найдется путь проще и легче, чем тот, что привел Кодер.
  10. Кодер, действительно, я стал замечать, что чем больше ты обретаешь знаний, тем нетерпимее становишься в тем, чей уровень знаний меньше твоего. Так нельзя. Представь, что было бы, если бы я к тебе так относился, когда ты задавал вопросы? Так что завязывай с подобными наездами. Ребята делают то, что умеют, и делятся знаниями, и это хорошо. ICEBURG, ты молодец, продолжай заниматься изысканиями и изучением всего и вся ) Описанный тобой метод слишком примитивно описан, поэтому и было вызвано недоумение у Кодера. На самом деле, областей применения твоего метода немало, и хорошо, что ты с нами им поделился. Да, для нас этот метод, конечно же, не нов, но вот для менее искушенных в программировании людей он окажется весьма полезен ))
  11. За старания плюс, но применений подобного способа не так уж много. Разве что описывать, скажем, класс работы с памятью в dll, а в решетках создавать псевдокласс, методы которого будут сплошь забирать методы класса из сишной dll.
  12. Успешно взломал - расскажи тут, как это сделал. Возможно, у кого-то еще возникнет такая проблема и твое решение кому-то пригодится. Что за привычка у многих - «проблему решил, тему закройте»?
  13. Тогда действуй, как тебе выше советовали - считывай из этого адреса строку и преобразуй ее к нужному виду.
  14. ты показал теоретический код, который ты нарыл на просторах инета. Ты покажи, как ты этот код адаптировал под СВОИ нужды, и что за игру ты ковыряешь. Тогда, возможно, получишь более конкретную помощь.
  15. Дружок, дерзить прекрати, и гормоны свои успокой. Это раз. Прежде чем что-то голословно утверждать - трижды подумай. Это два. Про три и четыре я даже говорить ничего не стану, если кому из нашей команды будет интересно, скажут за меня, ибо я не привык хвастаться. На этом оффтоп закончим.
  16. А ничего, что в указанном куске кода чтение идет не из процесса, а из какого-то теоретического модуля? Может, стоит подумать над кодом, прежде чем пытаться на его основе делать свой чит?
  17. Так, давно я предов не выдавал, видимо. Закончили взаимные подколы и постим ровно по теме. Еще что-то подобное - буду списывать рейтинг по 20 пунктов или выдам по преду. Напоминаю - три преда, и будет вечный бан.
  18. 1. Тебе нужен скрипт, который в адрес, используемый в указанной инструкции, будет писать нужное тебе здоровье (в твоем случае это eax+14) 2. Поскольку в этой игре здоровье постепенно с прохождением игры увеличивается (я про максимум), тебе нужно каждый раз писать не определенное число, а искать этот самый максимум. Для этого нужно посмотреть структуру игрока, и где-то недалеко от адреса здоровья будет адрес текущего максимума. Стало быть, тебе нужно будет писать скрипт, который сначала считает из ячейки с максимумом это значение, а затем запишет его по адресу здоровья. Как-то так.
  19. Андрей, я выше описал способ проще - проверка дополнительных переменных )
  20. Просьба также в теме указывать всех тестеров, чьи баг-репорты послужили улучшению приложения. В последствии им будут выданы награды.
  21. Наш ресурс и существует для того, чтобы помогать )) Обращайся еще, только, на будущее, старайся формулировать задачу чуть яснее, ок?
  22. Немного оффтопа: Roxor, настоятельно рекомендую стараться писать по-русски более грамотно. Пока на этом все. ЗЫ. Если сообщение написано красным цветом, да еще и админом, на него следует обратить особое внимание.
  23. [ENABLE] aobscan(address0, D9 46 78 8B 86) alloc(newMem, 2048) label(returnHere) registersymbol(address0) label(1hit) label(god) label(godflag) label(1hitflag) label(exit) registersymbol(godflag) registersymbol(1hitflag) newMem: cmp [esi+84],0 je god jmp 1hit god: cmp byte ptr [godflag],1 jne exit mov [esi+78],(float)100 jmp exit 1hit: cmp byte ptr [1hitflag],1 jne exit mov [esi+78],(float)1 exit: fld dword ptr [esi+78] mov eax,[esi+000000AC] jmp returnHere godflag: db 00 1hitflag: db 00 address0: jmp newMem db 90 90 90 90 returnHere: [DISABLE] address0: fld dword ptr [esi+78] mov eax,[esi+000000AC] dealloc(newMem) unregistersymbol(godflag) unregistersymbol(1hitflag) unregistersymbol(address0) Затем в самой таблице добавляешь два адреса, в которых прямо пишешь названия меток (для этого и делается регистрация символов godflag и 1hitflag). Затем по внесению 1 в любой из этих адресов будет сигнализировать скрипту о том, что нужно выполнить свою часть. Скрипт должен быть активирован заранее, разумеется. И да, байтовая сигнатура слишком мала для поиска. Может найтись много вхождений. Надо взять кусок побольше, хотя бы байт 20
  24. Если я не ошибаюсь, речь идет о последовательном поиске двух и более вхождений одинаковых цепочек байт. Но ведь ничто не мешает сделать этот обход дважды. По крайней мере, когда пишешь собственный движок, обычно при нахождении первой сигнатуры поиск останавливается, но в собственном движке никто не мешает искать совпадения сколько угодно раз, заносить их, скажем, в массив, и затем также последовательно патчить.
×
×
  • Создать...

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

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