Обучающее пособие по работе С чИт Энджин +)

Читаем-с обучаемсО :D
ИМХО Хайд нафик не нужен

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

(Пролог)
- Для начала запускаем СЕ, если он у вас все еще не запущен. Кликаем на пиму "открытия процессов" (мигающий компьютер слева-вверху) Когда откроется список запущенных приложений - выбираем процесс этого туториала (что-то по типу tutorial.exe) и нажимаем "ok". Если руки растут оттуда, откуда надо - окошко процессов исчезнет, а сверху в СЕ будет написано название выбранного процесса.

(Step 2)
- Итак. Открывать процессы мы уже научились. На текущий момент у нас по идее открыт этот самый туториал. Если нет - открываем. Внизу туториала наблюдательные читеры могут заметить надпись "Health: 100", пимпу "Hit me" (получить по башке) и неактивную пимпу "Next". Повторюсь - задача каждого этапа активировать эту пимпу, путем изменения значений (условия оговариваются в каждом этапе). Тру читера перед тем как рваться в бой сначала убедяться, что тип искомого значения 2 Bytes или 4 Bytes. Можно использовать и 1 Bytes, но у нас могут возникнуть проблемы, когда мы найдем адрес и захотим его изменить. 8 Bytes также могут работать если байты после адреса являются 0, но не будем исптывать судьбу =)
Singles, Doubles не работают вообще, т.к. хранят переменные другим способом.
Убедившись, что мы ищем "Exact Value" вписываем в поле для поиска значение хелсов и жамкаем на пимпу "First Scan". Спустя некоторое время (если ваш железный конь - ппц тормоз) поиск закончится и слева отобразятся найденные адреса. Если нашлось более одного адреса - не огорчаемся. Жамкаем себе по башке (для танкистов - кликаем на "Hit Me"), записываем новое значение заместо старого и давим на "Next Scan". Повторяем сие действие пока не останется один адрес.
Порадовавшись своим успехам дважды кликаем (далее "2клик") по этому адресу и Девид Блейн перемещает его в списочек внизу. 2клик по значению (или можно выделить и жамкнуть Ентер) и меняем его на 1000. Если бох не обделил вас прямыми руками, то пимпа "Next" станет активной (1000 и есть то самое искомое значение). С чувстом исполненного долга можно по ней жамкнуть.

З.Ы. Если бох вас все таки обделил руками - не стоит сразу огорчаться, можно нажать на пимпу "New Scan" и испытать удачу вновь.. А вот если после 100500-ой попытки вы так и не смогли осилить данный этап, то бох вас, видимо, обделил еще и мозгами. В таком случае рекомндую закрыть данный туториал и вырубить комп до лучших времен.

(Step 3)
- Сразу замечу, что по прошествии каждого этапа и тыкании пимпы некст на следующем этапе отобразиться пасс, при вводе которго в самом начале (окно для ввода пасса найдете сами) можно незамедлительно попасть на нужный вам этап туториала. Отображаются они в скобках, примерно такого вида (PW=*******). Писать пассы тут я не буду. Сообщения с пассами и просьбами их выложить мной так же будут удаляться - дабы нубы не ленились прокачивать свой моск. Вернемся к нашим баранам.
OK. Первый отсев нубов прошел. Вижу вы научились искать точные значения. Го дальше к знаниям.
В прошлом тесте мы знали какое значение будем искать. Тут же есть небольшой напряг в виде статусбара с полосочкой нашей жизни. Все что мы знаем, дак это то, что значения находятся в диапазоне от 0 до 500. И каждый раз когда мы бьем себе по башке, наша жизнь укорачивается, что в принципе вполне логично. Количество потерянных жизней каждый раз будет отображаться над статусбаром.
Как обычно у нас дофига возможностей найти интересующее нас значение, но тут будет объяснен самый нупский способ это сделать. "Unknown initial value" нас спасет. А также уменьшение переменной.
Т.к. мы не втыкаем скока у нас сейчас жизней, то выбираем тип сканирования "Unknown initial value", тип переменной 4 Bytes (чаще всего будут искаться переменные типа 4 Bytes) и жамкаем на "First Scan". Ждем. Если комп - тормоз - идем пить чай.
Когда поиск окончится - жахаем себе по башке (думаю уже все вкурсе что именно надо сделать). Кол-во снесенных жизней покажется на пару секунд и исчезнет, но эта информация нам вообще ни к чему.
Далее идем в СЕ, выбираем "Decreased Value" и давим на "Next Scan". Повотрям процесс, пока не получим несколько значений. Учитывая что значение находятся в диапазоне от 0 до 500 выбираем наиболее приглянувшееся нам, добавляем его (процесс добавления, начального и дальнейшего поиска был подробно описан, так что далее он описываться не будет) и меняем на 5000. Руки прямые -> переходим на следующий этап.

(Step 4)
- Хитрые программеры иногда используют тип "floating point" (плавающая точка; числа вида "5.12"), дабы запутать бедных нас. Но тручитера это не остановит, а наоборот добавить масла в огонь =)
Продвинутый читер пропалит надписи "Хелс" и "Аммо" внизу окошечка. Наша задача сводиться к тому, чтобы поиметь программу и обяснить ей что эти значения равны 5000 (или больше) каждое. Хелсы хранятся в виде 'floating point', а аммо в виде "double". Тип сканирования "Exact value" тут пашет, но можно поэксперементировать и с другими типами.

Бонус: Рекомендуется отключить "Fast Scan" для типа "double".

(Step 5)
- Иногда найденные нами значения меняются по непонятным причинам (Девид Блейн ), при рестарте игры или (верх наглости) во время самой игры. В таких случаях у нас есть 2 пути для нападения. В этом этапе будет оглашен один из них: "Code Finder".
Переменная, используемая в данном этапе будет храниться в разных местах при каждой загрузке этого туториала.
Находим адрес переменной (учитывая то, до какого этапа мы с вами дошли, будет полагаццо, что вы уже знаете как это делать). Найдя нужный нам адресок, можно тыкнуть по нему правой пимпой грызуна и выбрать "Find out what writes to this address". Появится окошко с пустым листом. Далее тыкаем на пимпу в туториале "Change value" и го обратно в СЕ. В том самом появившемся окошке будет адрес и ассемблерный код (не будем щас вдаваться в подробности что вообще все это значит). Выделяем его и тык на пимпу "Replace" и заменям ничего-не-делающим-кодом. Другими словами тупо стираем что увидели. Все эти манипуляции так же добавят адрес в "Advanced Option" и вы их сможете просмотреть, если у вас конечно стоит нужная галка в настройках.
Жамкаем на "Stop" в том окне, где первый раз увидели код ассемблера. Замечу, что окна СЕ имеют свойство ныкаться друг за дружку, поэтому если вы не увидели нужного вам окна - поперетаскивайте остальные - авось что и найдете.
Жамкаем на "Change Value" и если все было сделано прально - го на следующий этап.

(Step 6) Указатели (крышеснос для непривыкших людей)
- В прошлом тесте мы вкуривали в Code Finder. Но есть один небольшой минус. С его помощью довольно сложно поменять значение на то, которое хотим мы. Поэтому щас будем вкуривать в указатели. Внизу опытный читер пропалит две пимпы: "Change value" (поменять значение) и "Change pointer" (поменять указатель). Первая менять только значение, а вторая меняет значение И его месторасположение (!). На данном этапе знания ассемблера не особо пригодятся, но упростят понимание.

Находим переменную. Знакомыми движениями врубаем функцию "Find out what writes to this address". Меняем значение и видим "то, что писало по этому адресу". 2клик по этой шняжке (или можно выделить и нажать "More info") и новое окошечко покажет детальную информацию о том, что произоидет, когда выполнится эта инструкция. Если в ассемблерном коде ничего не будет между "[" и "]" (это только касательно строчки, выделенной красным), то юзаем другой адрес. Если все пучком, то мы уже недалеко от цели.
Го в главное окно СЕ и ищем 4 Bytes. В поле для поиска вбиваем то, что нам показало "More Info", только не забываем поставить галку "Hex".
После окончания поиска, если повезет то мы найдем один адрес. Если не повезет несколько сотен. Чаще всего искомый адрес - самый маленький, другими словами он где-то в начале списка. Добавляем адрес в список и объяснем СЕ, что это указатель. Делается это путем несложных манипуляций. 2клик по адресу только что добавленного значения, ставим галку (место куда ее можно поставить - одно единственное, так что не думаю, что вы ошибетесь). Наше окошко преображается предлагая ввести нам адрес указателя и оффсет. В адрес указателя вводим адрес найденного значения. Если все хорошо, то в надписи над окшоком адреса вместо знаков вопроса появится адрес переменной с нашим значением (это то, что мы первое нашли). Жамкаем ОК и адрес этой переменной приобретает вид: "Р->********", где заместо звезд адрес нашей первой переменной. Теперь меняем значение указателя на 5000 и замораживаем (ставим галку в столбце Frozen). В туториале жамкаем на "Change pointer" и если все сделали прально, пимпа некст станет активной.

Бонус 1: Если между [ и ] оказалось не просто значение, а что-то по типу EAX+EDX+00000038... Можно конечно в панике побегать по комнате с криками "Мы все умрем!!!" или "Ктулху зохавалЪ мой моск!!!", это кому что больше по душе. Но можно не сцать, а открыть виндовскую считалочку и провести там это сложение. Значение EAX или чего еще непонятного можно узнать в окне "More Information" внизу. Там написаны все значения регистров на момент выполнения команды. Так же не забываем, что проводить вычисления надо в хекс системе. Подробнее про эту муть можно почитать здесь. Численные смещения (в данном случае это 00000038) вводтся в поле оффсета

Бонус 2: Можно тупо заюзать поиск указателей на данный адрес =)

(Step 7) Инжектинг.
Вкратце - мы подсовываем процессу свой исполняемый код.
На данном этапе все, как в былые времена... Хелсы и жамкнуть себе по башке. При жамкании по башке хелсы будут уменьшаться сторого на 1. Наша задача состоит в том, чтобы прога увеличивала значение на 2 при каждом жамкании. В результате мы получим, что стандартный код уменьшает значение на 1, а наш код увеличивает его на 3 и в итоге значение увеличивается на 2. Так что не пугаццо =) Поехали:... Стоп. Знания ассемблера начинают приветствоваться %) Вроде все.

Ищем адрес и "то-что-в-него-пишет". Когда все это будет найдено жамкаем на "Show disassembler" и открываем окошко автоассемблера (бред полный, но я бы тоже не смог придумать названия лучше ) путем нажатия на ктрл+А или выбором менюшки Tools -> Auto Assemble. Далее Template -> Code Injection и вводим адрес кода, который понижает нам хелсы (по идее там уже будет нужный нам адрес, если не выделяли другие строки в дизассемблере). Все эти действия приведут к автоматической генерации простейшего инжектинга на асме.

Далее следуют замечания автора о том, что могут возникнуть ошибки при использовании данной функции если у нас стоит что-то начиная с 2000 винды и заканчивая СП2 для ХР (не включительно). Находим в появившемся коде таукю строчку:

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

Как некотрые уже догадались, всталять свой код надо сюда, а именно после этих каментов недоходя до originalcode.
Что вставлять? Каждому на его усмотрение, но я рекомендую самую юзабельную команду асма ADD. Вот пример:

ADD [ebx+0000030c],2

Регистр не учитывается. Данную команду можно интерпретировать так: сложить значение находящееся по адресу [ebx+0000030c] и 2. Результат записать в адрес [ebx+0000030c]. Квадратные скобки тут обязательны. Ясен пень что заместо [ebx+0000030c] каждый напишет свой адрес. Наблюдательные читера найдут небольшую несогласовку данной команды и условия прохождения данного этапа. Думаю на данном этапе нашего с вами развития многие поймут что тут именно надо написать. Как альтернативу могу предложить удеаление строки, уменьшающей ваши хелсы из раздела origincode. Мир от этого не рухнет, так что можно быть спокойным.

Бонус: Автор гайда упоминает о том, что часто играх данный инжект не работает. Это может происходить по разным причинам. Одна из них - происходит "прыжок" на то место памяти, где хранится наш внедренный код. Методы обхода: исправить прыжок или пихать наш код в другое место в памяти.

(Step 8) Мультиуровневые указатели. Слабонервных поршу удалиццо...
- Давным-давно, а именно на 6 этапе все было просто и понятно... Там использовался одноуровневый указатель, т.е. он сразу указывал на нужное нам значение. Тут автор гайда решил немного поизвращаться и сделал немного по другому. Указатели найденные вначале сего этапа будут указывать не на значение, а на адрес следующего указателя.. Юзается тут 4-хуровненый указатель, так что готовим вазелин =)

Ищем значение и "то-что-получает-доступ". Найденное значение будет указателем!..Продолжаем поиск пока нас не посетит мысль, что, наверное, пора заканчивать (скажу по секрету - пока не найдем адрес, значение которго отобразится зеленым цветом; тут-то нам и откроется страшная тайна сего явления - адреса, которые по мнению СЕ являются статическими будут подсвечены зеленым; что такое статический адрес я думаю вы поймете взглянув на ассемблерный код). Итак мы нашли путь из этих указателей. Если вы уверены в ваших действиях, то замораживаем все адреса, а значение переменной замораживаем на 5000. Жамкаем "Change value"... и если все ништяк -> некст.

Теперь если не все ништяк... =) Вариантов тут два. Либо вы заморозили не все адреса, либо накосячили с их поиском (нашли не то что надо). Вычислятеся это простым способом. Стат адрес (зеленый) всегда является первым указателем с конца. Соответственно в нем хранится адрес следующего указателя. Если вы нашли все правильно то можно восстановить цепочку, в итоге получив то значение переменной, которое на данный момент будет показывать туториал. Если фишка не сработала - косяк с поиском и надо делать все заново.

Бонус 1: Эта проблема (прохождение этапа) может быть также решена при помощи скрипта автоассемблера или поиска указателей (имеется ввиду ф-ия СЕ). Это со слов автора туториала.

Бонус 2: В некоторых ситуациях (к примеру как эта) будет целесообразным поменять настройки codefinder'а дабы он нам показывал значения регистров ДО выполнения самой команды. От себя: наблюдательные читера, владеющие англ. яз. смогли заметить надпись в окне More Information, предупреждающую, что значения регистров, которые показываются, являются значениями ПОСЛЕ выполнения команды. Дабы исправить сие недоаразумение поменяйте настройки на такие-то такие-то.

Бонус 3: Просматривая асм код можно подметить, что код, касающийся указателей, всегда в одном месте (ничего плохого ). Так будет не всегда, но значительно может упростить поиск указателя при возниконовнеии проблем с отладкой.

(Step 9) Инжект++. "И пришел он... И настал хаос!.."©
- Тут мы замутим то же самое что и на 7 этапе, тока чуток посложнее. Задача на этот раз - заменить код, уменьшающий наши хелсы на код, который будет выставлять значение 1000 если значение текущей секунды >= 30 и 2000 если оно меньще 30. Все это можно сделать при помощи некоего кода, умеющего обращаться к АПИ винды и узнавать текущее время. Дабы не выносить моск окончательно аффтар предлагает написать сишный скрипт.

Ищем значение хелсов и дуем в script engine (ctrl+alt+a в memory view или tools -> script engine)
Далее автор дает нам мегабонус в виде сишного скрипта (копировать который я не вижу смысла), ибо он не уверен, что мы вообще кода-то кодили на С ..

вместо строчки addresstochange в скрипте вставляем адрес значения, не забыв приписать 0x вначале, т.е. если адрес 0012345, то вписывать его надо как 0x0012345. Выбираем inject -> Inject into current process и нашему взору открется окно аа с кодом вызова нашего скрипта. Теперь как в 7 этапе дуем к коду, который уменьшает наши хелсы, выбираем autoassembler -> template -> code injection и пишем там процедуру вызова которую нам сгенерил этот самый СЕ. Аффтар напоминает, что при вызове нашего кода(скрипта, называйте как хотите) могут поменяться значения флагов, поэтому если мы хотим их сохранить, то сначала мы их сохраняем а потом возвращаем обратно. Так же рекомендуется убрать оригинальый код, ибо это может усложить задачу инжектинга. Тык на Execute, а затем на Hit Me и если все прошло удачно некст станет кликабельным и будет менять значения в соответсвии с нашим кодом.

Спасибо за внимание, думаю с этим солюшеном многое может стать понятней. Играйте, читерствуйте и не палитесь... Да прибудет с Вами Ктулху!

Слито с другого форума (c) Глюконатор