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

Garik66

Помогаторы
  • Постов

    5 750
  • Зарегистрирован

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

    292

Сообщения, опубликованные Garik66

  1. Привет!

    Не совсем понял, что ты имеешь ввиду. Можешь поподробнее написать?

    Я думаю RockHamer имеет ввиду типа этого:

    [ENABLE]aobscan(AdresInGame4, d9xxxxxxxxxxxx83xxxxxxe8xxxxxxxx83xxxx83xxxx75xx85xx7dxx8bxxd9xxxxxx8bxxxxxxxxxxxxd9xxxxxx8bxxffxx6axxxx8bxxe8xxxxxxxx85xx74xx8dxxxxxxxxxxebxx33xx85xxxxxx74xx8dxxxxxxxxxxebxx33xxd9xxx xxxxx83xxxxd9xxxxxxd9xxxxxxd9xxxxxxxxe8xxxxxxxx83xxxxxxxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd9)alloc(newMem4, 64)label(returnHere4)registersymbol(AdresInGame4)newMem4://fstp dword ptr [edi+esi*4+00000324] // Просто нопим инструкцию и карма неjmp returnHere4                       // падает, хотя и сообщение появляется.                                      // Искать где появляются сообщенияAdresInGame4:                         // влом, да думаю и не нужно.jmp newMem4nopnopreturnHere4:[DISABLE]AdresInGame4:// Fallout3.exe+36E616fstp dword ptr [edi+esi*4+00000324]unregistersymbol(AdresInGame4)dealloc(newMem4)  
  2. Заметил, что не-которые статьи при первом прочтении - очень трудны к перевариванию, только спустя некоторое время, после получения опыта и доп. знаний, читаемая ранее статья становится понятной.

     

    Пока MasterGH. не всё из прочтённого понял.

     

    По 2. пункту недавно столкнулся с проблемой т.е. в игре Fallout 3 нашёл инструкцию, она отвечает за очень большое количество адресов.

    Если ставить просто бряк на неё то игра зависает и ни чего не даёт в ней сделать, а если поставить условный бряк, то БП не срабатывает,

    небольшое обсуждение, начиная с этого сообщения.. Посмотрите, если не трудно, может Вы, что подскажите. 

  3.  

    1. Интересует не определение, а способы работы со стеком, что и как мы можем из него узнать?

    2. Меня интересуют не Брекпойнты на адрес, а Брекпоинты на инструкции в Отладчике, ну и отсюда условные Брекпоинты.

    3. Реверс - снова интересует не определение, а именно процесс, как это делается, где-то видел статью MasterGH. но потом не смог её найти, конечно лучше бы видео с объяснениями.

    4. Видео Kenga посмотрю - спасибо.

     

    О, спасибо, эти вопросы тоже включу в цикл видеоуроков.

    Видео - очень буду ждать.

    Xipho, что-то пока не сложилось, но не одного Вашего видео не смотрел.

    У Вас на Тюбе, тоже есть канал (чтобы посмотреть можно было в одном месте)?

  4. Если кто, что читал (смотрел видео) на форуме, скиньте пожалуйста ссылку в эту тему.

     

    Какие вопросы интересуют:

    1. Что такое стек и с чем его едят? (На самом деле до сих пор в полной мере не представляю, что это такое).

    2. Брекпойнты и условные брекпойнты на инструкции.

    3. Реверс (как он делается? что мы можем получить из этого? ну и т.д.)

    4. Более подробное описание опций СЕ (ну например что такое структурный паук, для чего он?)

    5. Трейссер - ссылку на английскую статью в посте MasterGH.

    6. Ultimap - смотри сообщение MasterGH.

    7. Tiny Dumper - сообщение MasterGH.

     

    Пожалуйста, не предлагать воспользоваться поисковиков.

    Прежде чем выложить сюда вопросы, которые меня сейчас интересуют искал, перерыл кучу макулатуры, которая к сожалению есть на форуме.

    Всем кто поможет - заранее Большое спасибо!!!. 

  5. Не правильно. Сек


    Вот так.


    У тебя в структуре по смещению 498h значение было 4 байта или байт?


    если 4 байта, то cmp dword ptr [rbx+498],#1

     если байт, то cmp byte ptr [rbx+498],1

    [ENABLE]alloc(newmem,256,"metro.exe"+2C0A1A) label(returnhere)label(Originalcod)newmem: cmp byte ptr [rbx+498],1                                             jne Originalcod                                                  push [rbx+00000450]                                       pop [rbx+00000448] Originalcod:                                   mov eax,[rbx+00000448]jmp returnhere "metro.exe"+2C0A1A:jmp newmemnopreturnhere: [DISABLE]"metro.exe"+2C0A1A:mov eax,[rbx+00000448]dealloc(newmem)  
    • Плюс 1
  6. Вариант 3 самый правильный из 3, если фильтр нашёл верно, он по идее должен работать для всего вида оружия.

    Код чуть-чуть подправь:

    и ещё label и метку exit - можно убрать, они у тебя лишние.

    не ещё одна ошибка, лучше полностью код покажу:

    Перепиши как в последнем моём варианте.

     

     

    cmp byte ptr [rbx+498],1  // При использовании памяти (а не регистра) в коде лучше jne returnhere            // всегда указывать его размер                                    push [rbx+00000450]       // и 1 - она во всех системах - еденица, поэтому ставить # необязательно   pop [rbx+00000448]                                       mov eax,[rbx+00000448]jmp returnhere 
    [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048,"metro.exe"+2C0A1A) label(returnhere)label(exit) // не удалить, а изменить название, если изменишь не забудь изменить везде,             // где я проставил exitnewmem: //this is allocated memory, you have read,write,execute accesscmp byte ptr [rbx+498],1                                             jne exit            // здесь должен быть прыжок на оригинальные инструкции с последующим выходом                                        push [rbx+00000450]                                       pop [rbx+00000448] exit:               // метка оригинальных инструкций                         mov eax,[rbx+00000448]jmp returnhere  //exit:            // удалить обе//jmp returnhere   // строчки "metro.exe"+2C0A1A:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheat"metro.exe"+2C0A1A:mov eax,[rbx+00000448]//Alt: db 8B 83 48 04 00 00dealloc(newmem) 
  7. Конечно проще было бы записать видео, но во-первых – не умею, во-вторых у меня не такой тембр голоса как у Kenga, Codera и Bromvola (этим ребятам можно легко летсплеить прохождения игр), ну и в-третьих я косноязычен.
    Хотя может быть всё это – дело наживное (дело опыта).
    Прошу сильно не закидывать шапками – это моя первая попытка – написать полноценную статью. А описывать, то что делал, довольно трудным занятием оказалось.
     
    Начинал взлом именно с этой игрушки, в то время пользовался Артмани, в этой теме выложена таблица для Артмани. Нашёл практически всё.
    Совет для начинающих: 

    1. Ломайте старые игрушки – они проще.


    2. Ломайте игрушки, в которые играли и знаете нюансы игры, знание которых очень помогает при взломе.

    Из ненайденного в то время был «Туман войны», хотя сейчас вспоминаю и не понимаю, почему я не смог найти (скорее всего связано с тем, что Разработчики сгладили (округлили) контуры видимой области карты. С одной стороны и хорошо, что не нашёл тогда, а то зная свой характер, я бы попытался вручную вбить все адреса карты в таблицу.
     
    Ну что же… начнём:
     
    1.     Поиск адресов:
    Из того, что мне встречалось при подобных поисках (например «Карта-загадка» в тех же Героях) Нужно искать тип байт. Значения возможные
    -1, 0, 1 и FF (255).
    Для верности будем искать «Неизвестное».
    Для ускорения поиска будем использовать, предусмотренный Разработчиками  «отладочный режим», с помощью него будем открывать всю карту сразу. Как запустить его:
    Разработчики не порадовали нас разнообразием чит-кодов, однако и этого вполне достаточно:

    • 8675309 - полностью открывает карту
    • 32167 - дает текущему герою 5 черных драконов, если для них есть место
    • 911 - немедленный выигрыш
    • 1313 - немедленный проигрыш
    Коды просто набираются с клавиатуры, причем они работают и в мультиплейере. Правда, начиная с версии 1.3 противники читера получают предупреждение. Также слово Cheater появится и в таблице High Scores рядом с именем игрока. Столь небольшое количество кодов объясняется тем, что в версии для Win 95/98 разработчиками был предусмотрен "отладочный режим" игры. Для его включения необходимо запустить игру через Start - Run, с ярлычка (или из командной строки DOS), и указать путь к исполняемому файлу игры с ключом /NWC т.е. (...\Heroes2w /NWC). После того, как вы начнете игру, перейдите в оконный режим, нажав F4. В заголовке окна увидите опциюDebug. Пользуйтесь, но только для отладки - при использовании этого режима слово Cheater также появится в таблице High Scores рядом с вашим именем. Особенно осторожно пользуйтесь чит-кодами при прохождении кампаний. В некоторых случаях вы можете получить запись "Читер" в конечном результате, хотя вроде-бы и карта закрыта, и загружались правильно и т.п. Будьте бдительны!

    Запустим Героев, выберем пока самую маленькую карту и чтобы вражеских героев (героев-ботов) было хотя бы два.
    Ищем «неизвестное». Открываем с помощью «отладочного режима» карту – отсев «изменилось». Загружаем снова эту же игру, но не сейв игры (отличительная особенность Героев, что при загрузке игры адреса не меняются, при загрузке сейва могут не поменяться, но могут и измениться) – отсев «изменилось».
    На открытой карте пройдём героем, что-нить подберём – отсев «не изменилось».
     
    Метод отсева: изменилось/изменилось/не изменилось
    Значения в конце отсева в основном при загрузке равны 0, а при открытии карты – 1.
     
    Нахождение адресов произошло довольно быстро – мы получили очень большое к-во адресов идущих друг за другом и отличающихся в основном на 1.  
     
    Теперь давайте опять загрузим игру.
    Возьмём любой из адресов и правой кнопкой «Посмотреть регион памяти». Посмотрим на то, что мы нашли.
     
    Нашли мы довольно большую область памяти, в которой  значения в основном 0, где-то встречаются участки 80, если прокрутить увидим не-большую область с 1 и нечётными числами (типа 81), ещё выше (или ниже) – обнаружим 2 и 82, а если было два героя – то и 4 и 84.
     
    Объясню: мы нашли карту игры, где 0 – невидимая область никем,
    Если 80 – объект на карте (типа монстр, часовня, сундук, куст, замок, гора, ну и т.д.)
    Если число нечётное – это видимая область нашим игроком,
    Если 2 и 82 – область, видимая только 2 Ботом, 4 и 84 – 4 Ботом.
    Ну а если допустим 3 и 83 – то, думаю уже догадались, что 2 Бот  находится, где то рядом с Вашим героем и в области пересечения обзоров цифры будут 3 и 83.
     
    Прокрутим регион памяти в низ и сразу чётко видна последняя ячейка
    Карты, т.е. это 0 после которого идёт много разных цифр, давайте проверим запишем туда  01 (прямо в регионе памяти) , перейдём в игру, спустимся в правый нижний край карты и действительно ячейка открылась.
     
    Теперь давайте на всякий случай (чтобы не потерять результаты работы) сделаем некоторые шаги.  Добавим этот адрес в таблицу, вернём ему значение 0. поставим «Бряк на запись» и с помощью «отладочного режима» откроем карту, мы получим вот такую инструкцию: 


    Перейдём в «Отладчик», выделим там эту инструкцию, и создадим скрипт, в котором не будем изменять оригинальные инструкции:


    и сохраним скрипт в таблице.   Это временный скрипт и нужен он лишь для того, чтобы если что мы могли восстановить адреса. Пора уже сохранить на всякий случай и таблицу, а то как у нас часто делают соседи, вырубят в коридоре наш рубильник по ошибке и всё – работа потеряна.
     
    2.     Поиск указателей:
    Так как игрушка простая, решил воспользоваться «автоматическим поиском указателей». Поиск указателей занял меньше минуты (эх знал бы я раньше СЕ, а то я помню в Артмани, на поиск указателей я потратил двое суток). Перепишем наш адрес с указателем и назовём его допустим так: «Последняя ячейка  (для МАЛЕНЬКОЙ карты)». И опять сохраним таблицу. И того у нас есть первый адрес: [["Heroes2.exe"+001265DC]+ 50f].
    3.     Нахождение 1 ячейки карты. Я думаю это будет
    [["Heroes2.exe"+001265DC]+ 0]. Запишем адрес в таблицу, назовём
    его  «Первая ячейка карты» и проверим:
    поставим значение 1, перейдём в игру  и поднимемся в левый верхний угол карты – да ячейка открыта. Сохраним таблицу.
    4.     Проверка указателей:
    Выключим игру, снова включим, загрузим карту, поставим в оба адреса
    1 и проверим в игре (открыты ли ячейки). Открыты – поинтеры рабочие.
    5.     Расчёт размера карты и количества байт:
    Ну размеры карты можно было бы узнать и в интернете, но зачем, если у нас уже есть цифры 50f-0+1=510 . Или в десятичной 1296, возьмём
    квадратный корень – получим 36. Итого имеем Mалькую карту 36х36 и количество байт 1296.
    6.     Размер Средней карты, количество байт и «Последняя ячейка  (для СРЕДНЕЙ карты».
    Загрузим новую игру, выбрав Среднюю карту Первая ячейка совпадает (проверка описана ранее), а вот «Последняя ячейка  (для МАЛЕНЬКОЙ карты)» находится где-то посередине, спускаемся по региону памяти снова вниз и видим последнюю ячейку, добавляем адрес в таблицу, переписываем его с предыдущим поинтером (надеюсь смещение рассчитать сумеете) и называем его «Последняя ячейка  (для СРЕДНЕЙ карты)». Рассчитываем размер карты и кол-во байт аналогично 5. пункту, получаем 1440 /5184/72. Итого имеем Среднюю карту 72х72 и количество байт 5184.
    7.     Аналогично для Большой карты: 108х108 и 11664 (2D90).
    8.     Аналогично для Очень Большой карты: 144х144 и 20736 (5100).
    9.     Получение инструкции для скрипта:
    Загрузим снова Маленькую карту с несколькими Ботами (нужны будут для фильтра свой/чужой). Через известные уже нам адреса перейдём в регион памяти и поднимемся до значений с 1 и 81 выберем где-нибудь очень близко адрес со значением 0 и добавим его в таблицу (поинтеры ставить не нужно – это временный адрес). Поставим «Бряк на запись»
    и в игре походим  нашим героем, чтобы сработал бряк, получим вот такую инструкцию:


    выделим её и сделаем как и в предыдущем случае инъекцию без изменения оригинальных инструкций:


    А теперь ВНИМАНИЕ, это информация не только для новичков, с таким я сталкиваюсь впервые. Опишу на этом этапе, хотя я обнаружил это не сразу:
    Если активировать этот скрипт, который в игре вроде бы ничего не меняет, то игра вылетит.
    Долго не мог понять в чём дело, хотя очень подозрительно выглядит вот этот прыжок, который попал в код вместе с нашей инструкцией : jmp Heroes2.exe+5B897
     
    Как оказалось, если прокрутить в Отладчике чуть-чуть повыше нашей инструкции, то появятся стрелочки на этот прыжок из двух мест, т.е на этот прыжок ещё есть какие-то прыжки, а так как при активации кода этой инструкции jmp Heroes2.exe+5B897 уже не было в коде игры – игра вылетала.
     
    Ну ничего страшного (жаль только затраченного  времени на поиск ошибки), захватим инструкцию над нашей и сделаем уже из неё инъекцию.


    10.     Поиск нужных фильтров описывать не буду чаще всего я пользуюсь вторым способом из этого моего сообщения.
          11.     Итак первый скрипт: «Открываем маленькую карту», частично в нём  использован код Xipho из этой темы, ну и некоторые вещи нашёл читая про Ассемблер в интернете:


    Более подробные комментарии будут в конечном скрипте.
    Проверим скрипт – работает отлично.
    Но это только для Маленькой карты.
    12.Добавление в скрипт и других карт, конечно можно было бы просто
    Добавить переменную, вывести её в таблицу и пусть пользователь вручную забивает нужное количество байт. Это тоже хороший вариант.
    Но вспомню хорошую пословицу: «Нет худа, без добра»:
    Когда я искал ошибку, из-за чего вылетала игра в предыдущем скрипте в кометах в Отладчике я заметил кое-что знакомое (Кстати о кометах – помню при просмотре какого-то видео урока Kenga, услышал, как он не лестно отозвался о них, мол не понимаю для чего они нужны. У меня о кометах сложилось абсолютно противоположное мнение, очень часто пользуюсь этой информацией (например для отладки своего кода)).
    Так что это было за знакомое – в трёх инструкциях немного выше нашей значение равнялось (как раз размеру карты 36).
    Так что добавив одну из этих инструкций (при проверке она работала только с одним адресом) в наш код мы получаем конечный скрипт.
         13.Добавление Аобскана, описывать не буду, почему в конце, чтобы в скрипте всегда находилось минимальное кол-во характеристик, которые нужно проверять при ошибках.
    Итак скрипт: «Нам сверху видно всё»:


    Скрипт проверен на всех размерах карт, в обычной игре и кампании по несколько раз.    

    таблицу выложил здесь.
    На видео показана работа скрипта "Нам сверху видно всё", который убирает "Туман войны".
    Видео специально снято для Gamehacklab.ru
    Gamehacklab.ru и YouTube - хорошего просмотра.

    Heroes2.exe+5B857:mov [ecx+eax],dljmp Heroes2.exe+5B7D5    
    [ENABLE]alloc(newMem, 2048)label(returnHere)newMem:mov [ecx+eax],dljmp Heroes2.exe+5B7D5jmp returnHereHeroes2.exe+5B857:jmp newMemdb 90 90 90returnHere:[DISABLE]Heroes2.exe+5B857:mov [ecx+eax],dljmp Heroes2.exe+5B7D5dealloc(newMem) 
    Heroes2.exe+5B930:mov [edx+ecx],aljmp Heroes2.exe+5B897 
    [ENABLE]alloc(newMem, 2048)label(returnHere)newMem:mov [edx+ecx],aljmp Heroes2.exe+5B897jmp returnHereHeroes2.exe+5B930:jmp newMemdb 90 90 90returnHere:[DISABLE]Heroes2.exe+5B930:mov [edx+ecx],aljmp Heroes2.exe+5B897dealloc(newMem) 
    Heroes2.exe+5B92D:add edx,[ebp-10]mov [edx+ecx],al 
    [ENABLE]alloc(newMem, 2048)label(returnHere)label(Cikl)label(Flag)registersymbol(Flag)newMem:add edx,[ebp-10]mov [edx+ecx],alcmp byte ptr [Flag],1jne returnHerecmp ebx,00000260jne returnHerecmp ebp,000cfa30jne returnHerepush esi // сохраняем регистрыpush ecx // перед использованиемmov ecx,510lea esi,[["Heroes2.exe"+001265DC]+0] // загружаем первую ячейку картыCikl:cmp byte ptr [esi],0jne @Fadd byte ptr [esi],1 // делаем видимой ячейку карты@@:test byte ptr [esi],1jne @Fadd byte ptr [esi],1 // делаем видимой ячейку карты@@:dec ecx // Уменьшаем счетчик циклаinc esi // увеличиваем адрес-источникcmp ecx,0 // Достигли ли конца цикла?je @F // Если да, выходим из циклаjmp Cikl // Если нет - прыгаем на метку Cikl, то есть, переходим к следующей итерации цикла@@: // Безымянная метка для указания местоположения выхода из циклаpop ecxpop esimov byte ptr [Flag],0jmp returnHereFlag:db 1Heroes2.exe+5B92D:jmp newMemnopreturnHere:[DISABLE]Heroes2.exe+5B92D:add edx,[ebp-10]mov [edx+ecx],alunregistersymbol(Flag)dealloc(newMem) 
    [ENABLE]aobscan(Adres, 8bxxxxxxxxxx0fafxxxx8axxxx0axxxx8bxxxxxxxxxx0fafxxxx8bxxxxxxxxxx03xxxx88xxxxe9)aobscan(Adres1, 03xxxx88xxxxe9xxxxxxxxe9xxxxxxxxxx8b)alloc(newMem, 512)alloc(newMem1, 512)label(returnHere)label(returnHere1)label(Cikl)label(Small_Map)label(Average_Map)label(Big_Map)label(Very_Large_Map)label(K_voBt)registersymbol(K_voBt)label(Flag)registersymbol(Flag)registersymbol(Adres)registersymbol(Adres1)newMem:mov edx,[Heroes2.exe+F8B98]cmp edx,24 // Карта размером 36х36 Маленькаяje Small_Mapcmp edx,48 // Карта размером 72х72 Средняяje Average_Mapcmp edx,6c // Карта размером 108х108 Большаяje Big_Mapcmp edx,90 // Карта размером 144х144 Очень большаяje Very_Large_Mapjmp returnHereSmall_Map:mov dword ptr [K_voBt],510 // 1296 байтjmp returnHereAverage_Map:mov dword ptr [K_voBt],1440 // 5184 байтjmp returnHereBig_Map:mov dword ptr [K_voBt],2d90 // 11664 байтjmp returnHereVery_Large_Map:mov dword ptr [K_voBt],5100 // 20736 байтjmp returnHerenewMem1:add edx,[ebp-10]mov [edx+ecx],alcmp byte ptr [Flag],1 // условие - чтобы сработало только один раз.jne returnHere1cmp ebx,00000260 // условие - только работаем с адресами ячеек картыjne returnHere1cmp ebp,000cfa30 // условие свой/чужойjne returnHere1push esi // сохраняем регистрыpush ecx // перед использованиемmov ecx,[K_voBt] // загружаем какое количество (байт) ячеек на картеlea esi,[["Heroes2.exe"+001265DC]+0] // загружаем первую ячейку картыCikl:cmp byte ptr [esi],0 // условие только нулевые значения на картеjne @Fadd byte ptr [esi],1 // делаем видимой ячейку карты@@:test byte ptr [esi],1// условие только чётные значения на картеjne @Fadd byte ptr [esi],1 // делаем видимой ячейку карты@@:dec ecx // Уменьшаем счетчик циклаinc esi // увеличиваем адрес-источникcmp ecx,0 // Достигли ли конца цикла?je @F // Если да, выходим из циклаjmp Cikl // Если нет - прыгаем на метку Cikl, то есть, переходим к следующей итерации цикла@@: // Безымянная метка для указания местоположения выхода из циклаpop ecxpop esimov byte ptr [Flag],0jmp returnHere1K_voBt:dd 0Flag:db 1Adres:jmp newMemnopreturnHere:Adres1:jmp newMem1nopreturnHere1:[DISABLE]Adres:  // Heroes2.exe+5B90D:mov edx,[Heroes2.exe+F8B98]Adres1: // Heroes2.exe+5B92D:add edx,[ebp-10]mov [edx+ecx],alunregistersymbol(K_voBt)unregistersymbol(Flag)unregistersymbol(Adres)unregistersymbol(Adres1)dealloc(newMem)dealloc(newMem1) 
    • Плюс 5
  8. Эмм. Это вообще-то сравнение с единицой, причем тут четность?

    Это именно проверка условия чётности.

     

    Добавил в скрипт все размеры карт - супер - открывает карты любого размера. Проверил и  в Обычных играх и в Компаниях.

     

    Осталось добавить Аобскан.

  9. Что ж пробуй, удачи :)

    C# исполняется на виртуальной машине со своим ассемблером, поэтому даже если ты напишешь на нем код решающий твою задачу, воспользоваться им не сможешь)

    Код пишу на CE-шном ассемблере, до написания чего-нибудь на C# мне ещё очень и очень далеко. С# - начал изучать, чтобы поучиться делать трейнеры, а то я в генераторе трейнера назначения окон не знаю (перевода то нет, жаль что SER(G)ANT и там не перевёл).

    test byte ptr [esi],1je ...... // если чётноеjne...... // если нечётное

    буду пробовать этот вариант.

    Супер - сработало как часы - карта открылась полностью.

    Теперь осталось только добавить то, о чём писал Xipho в этом сообщении и можно выкладывать готовый скрипт.

  10. Да действительно, криво прочитал.

    Касательно твоего вопроса, могу дать совет.

    Напиши нужный тебе код на C++ (выполняющий задачу перебора байт и заполнения их по условию), скомпилируй программу в Release сборку и собственно говоря запусти отладку, поставь бряк на своем участке кода и скопируй дизассемблерный код да и все.

    Спасибо Coder за совет, я конечно начал изучать C# (выбрал его), но я только в самом, самом начале (и даже прошёл в Интуите курс для школьников правда хреновый курс мне не понравился, хотя и сдал на 4), но пока в программировании я 0 и тем более на C++.

     

    Код написанный мной работает, но открывает (так как нет условия проверки "Чётности"), только свободную от монстров, строений, кустов ну и т.д. карту (т.е. после активирования моего скрипта - Карта кусками открыта, кусками нет.)

     

    Кое что нашёл по условию чётности, т.е. для моего случая это примерно так:  

    test byte ptr [esi],1je ...... // если чётноеjne...... // если нечётное

    буду пробовать этот вариант.

  11. Элементарное решение -найди инструкцию, что работает с адресами тумана войны, и просто клади в адреса 1 (если нужно добавь пару условий).

    Coder, не думал что и ты не внимательно читаешь: инструкцию я нашёл и даже написал часть кода - всё описано в первом посте. 

  12. Хотел потом сказать, при выкладывании таблицы и скрипта.

     

    Нашёл адреса "Тумана войны" для Героев 2 (которые раньше (ещё на Артемоне) не смог). Вот для того чтобы сделать карту полностью видимой и делаю скрипт.

     

    Более эффективное средство... навряд ли. Там всё просто - нужно прибавить 1 ко всем байтам. Вручную участки карты открываются, значит можно сделать и программно.

     

    А в чём проблема с моим решением: неужели процесс прибавления 1 более затратный, чем копирование участка памяти, чем мы с Вами совсем недавно занимались.

  13. Опять не справился.(эх ведь говорил один умный человек: "...учиться, учиться и учиться...")
      
    Допустим у меня в игре есть участок памяти размером 1000 байт.
    Мне нужно к каждому байту этого участка равному 0 или чётному прибавить 1.
     
    Мастера помогите написать код. Заранее - СПАСИБО!!!

    Вот примерно что я написал:

    push esi             // Сохраняем регистрыpush ecx             // перед использованиемmov ecx,3e8          // 1000 байтlea esi,[adres]      // Загружаем адрес первого байтаCikl:                // метка "Цикл"cmp byte ptr [esi],0 // Сравниваем с 0jne @F               // Если не равно 0, то перепрыгиваем следующую инструкцию add byte ptr [esi],1 // +1@@:                  // Промежуточная безымянная меткаdec ecx              // Уменьшаем счетчик циклаinc esi              // Переходим к следующему байтуcmp ecx,0            // Достигли ли конца цикла?je @F                // Если да, выходим из циклаjmp Cikl             // Если нет - прыгаем на метку Cikl, то есть, переходим к следующей итерации цикла@@:                  // Безымянная метка для указания местоположения выхода из циклаpop ecx              // Восстанавливаем регистры pop esi              // после использования
  14. garik66 пробовал я найти адреса прицела, но там такая странная штука.

    В чем суть, значения адреса прицела от значений координат игрока отличаются на ± 5(float).И если ты допустим знаеш что расстояние от игрока к стене на 150 отличаеться от игрока, то прицел максимум что показывает так это 5. Это раз.

     А два искал я эти ID предметов. Но там тоже свои ньюансы. То-есть ты выбросил предмет и все адреса уже нет(он уже не валидный), это раз. А два, если ты нашел этот ID предмета, то он каждый раз изменяеться приперезапуске игры. Я такое 1 раз вижу.

    По ID - собственно именно об этом я писал в личку, что твои способы (из твоих замечательных видео) к сожалению к данной игре не подходят.

    Но попробую покопать дальше. Но это уже небольшой офтоп для данной темы.

     

    А по координатам прицела, чтож - "Будем искать" Ю.Никулин.

  15. В процессе взлома (и обучения взлому) я часто делаю ссылки (если читали мои статейки) на то чем часто пользуюсь на форуме. Решил сделать это в одном месте и по мере продолжения обучения, буду выкладывать сюда, что нужно почитать (посмотреть) на форуме  для облегчения понимания взлома.

     

    Начну здесь с этой статьи (само собой всё что здесь выкладываю - всё плюсую):

    Статья Akama Здесь.. Новички обязательно прочтите её - очень многое станет более понятным.


    Но начать нужно с прочтения именно этой статьи.


    По фильтрам:

    Начните с этого видео, тут не только про фильтры - очень полезное. 

    Прочтите эту статью.

    И ещё это сообщение.


    По поиску адресов отвечающих за ID предмета прекрасное видео: здесь. 


    По телепорту и Blink-телепорту : эта статья.


    Ещё сюда конечно нужно добавить ссылку на видео-уроки  Kenga 

    http://www.youtube.com/user/remizovm/playlists именно по ним начинал.

     

    А также на видео-уроки Codera http://www.youtube.com/user/coder1994/playlists.

  16.  

     

    Можно попробовать долгий и беспощадный метод 

    Беспощадный метод пока не сдаётся, не понятно, что делать кода остаётся около 400 адресов, которые уже нельзя отсеять. 

     

    Зато быстро нашёл адреса "ЗУМа" прицела. Благо здесь в конце - можно "заморозить" и прицел не будет приближать.

    Теперь когда нашёл адреса: (1 от 2 смещение 4h) эти адреса очень легко найти для этой игры, если кому нужно (например для написания ЗумХака) - без увеличения 1 адрес значение (float) 75, у 2 - (float) 55 ; при увеличении - отсев "Уменьшилось", нужно максимум два отсева.

     

    Для чего искал "ЗУМ", надеялся, что адреса прицела, нужные для БлинкТелепорта будут находиться, где-то в структуре. Но к сожалению чуда не случилось - нужных адресов там нет. Нашёл в структуре только адреса очень похожие на адреса координат ГГ, но они от прицела не меняются, меняются только от перемещения ГГ.

  17. Почитай ещё раз внимательно, дело в том что патроны - это не просто патроны в обойме, а и суммарные и, как я их назвал, незаряженные.

    Судя по Вашему коду Вы работали только с инструкцией отвечающий за адрес к-ва патронов  в обойме, но не учли изменения в общем кол-ве патронов, а за этот адрес уже отвечает другая инструкция. Но не буду здесь повторяться, ещё раз прочти внимательно, то что мною написано. Постарался довольно подробно там описать. 


     
    второй интересный момент что в игре если подобрать оружие вместимостью 30 патронов то оно дает(показывает) оружие с 30 патронами  (но по поиску через СЕ бьется как 29),  как только я жму reload то на экране отображается 31 патрон в обоиме, при этом по поиску он так же пробивается как 30, защита? может в этом дело?

    Вот как раз это и приводит к вылету. Если не использовать инструкцию работающую с общим кол-вом патронов. 

     

    У  Alexander D   скрипт работает именно с общим кол-вом патронов, но без патронов в обойме.  Alexander D пишет очень много трейнеров, с большим кол-вом опций и поэтому сильно не вылизывает скрипты, если нету в этом необходимости. Т.е. скрипт  Alexander D  это примерно мой первый скрипт, только с небольшой добавкой 

    Не в обойму, а в общее к-во патронов.

    newMem5:mov[eax+04],#999  // сюда добавлено общее кол-во патронов//sub [eax+04],esi mov ebx,esi        jmp returnHere5   
    • Плюс 1
×
×
  • Создать...

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

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