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

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

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

    129

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

  1. Пока статьи нет, но будет общая информация о PS2 архитектуре. Часть 1. Общая информация о PS2, которая необходима для создания читов и для общих знаний. Эта игровая приставка 1999 года. Что нам нужно знать и может пригодиться 1) Микропроцессор «Emotion Engine» построенный на MIPS R5900, комбинации CPU и DSP имеет: 64 - разрядные регистры главного CPU ; 128 -разрядные регистры сопроцессора «Emotion Engine» для обработки чисел с плавающей запятой; Судя по всему шина адресации 64 бита 2) Графический процессор «Graphics Synthesizer» имеет: Видеопамять: встроенная 4 МБ DRAM с пропускной способностью 48 ГБ/с. Помимо этого, 32 МБ из основной памяти может быть выделено под видеопамять. Шина обмена с памятью: 2560-разрядная — 1024 на запись, 1024 на чтение, 512 на чтение/запись; 3) 32 МБ ОЗУ с пропускной способностью 3,2 ГБ/с. 4) Жесткий диск 5) Отдельный процессор ввода/вывода. Дополнительную информацию и в более оформленном виде можно найти: здесь про приставку, здесь про CPU. Я пока не видел отладчик для MIPS R5900 в действии, но сначала стоит узнать о MIPS R5900. Пока я точно знаю, что IDA умеет отлаживать MIPS R5900 и Ps2dis, но IDA не умеет ассемблировать инструкции как это делают полноценные отладчики. Итак о MIPS R5900. Ссылка1, справочник, ссылка 2, ссылка 3 (MIPS32 4, 2004 года). К сожалению документацию именно по MIPS R5900 я не нашёл. По Ps2dis: статья (правда она так написана, что её поймет человек с опытом) А вот видео, про хотя бы даст представление как работать с Ps2dis (надо много терпения чтобы этот тутор просмотреть полностью и понять его):
  2. Эта ошибка о том, что трейнер защищён. Если автор трейнера поставил (случайно или не случайно) эту опцию, то открыть трейнер в CE теоритически не возможно. В исходниках CE можно посмотреть, что именно это за защита.
  3. 1) Для твоих двух юнитов: - Скопируй вверх пять инструкции и вниз десять относительно StrongholdLegends.exe+3E82D9. Приведи значения регистров на сработанном бряке. 2) Для двух юнитов - врагов: - Скопируй вверх пять инструкции и вниз десять относительно StrongholdLegends.exe+3E82D9. Приведи значения регистров на сработанном бряке. Итого получиться 4 листинга, приведи их здесь. 3) Поставь бряк на адрес здоровья твоего одного юнита "на доступ" и приведи здесь все сработавшие инструкции: - когда ничего не происходит (зайди в игру подожди немного и выйди, никто не кому не должен наносить урона); - когда ты отнимаешь здоровье у врага; - когда враг отнимает здоровье у твоего юнита. 4) Поставь бряк на адрес здоровья врага "на доступ" и приведи здесь все сработавшие инструкции: - когда ничего не происходит (зайди в игру подожди немного и выйди, никто не кому не должен наносить урона); - когда ты отнимаешь здоровье у врага; - когда враг отнимает здоровье у твоего юнита. Итого получиться 4 листинга + 6 листингов. Можешь их написать здесь, а можешь сам проанализировать. Тебе нужно найти зацепку: либо найти инструкции которые работают только с твоими юнитами или только с врагами, либо найти аналогично регистры, либо сравнивать структуры, либо искать цепочку указателей на структуры от глубокого уровня вверх. Ставить на "уровни бряки" и по тойже схеме что выше анализировать листинги. Может быть это всё покажется сложным, но если игр 20 таким образом обманешь, то всё уже делаешь на автоматизме....
  4. class A { int x; protected: void *y; public: A (int _x) : x (_x), y (0) { } virtual int GetX (void) const { return x; } virtual void SetX (int _x) { x = _x; } }; class B1: public A { public: B1 (void) : A (1) { } int GetX (void) const { return 1; } }; class B2: public A { public: B2 (void) : A (2) { } int GetX (void) const { return 2; } }; Теперь можно сделать так: A *x = new A (3); B1 *y = new B1 (); * (void **) x = * (void **) y; // сама привязка printf ("%d\n", x->GetX ()); // выведет 1 Мне не понятен смысл описания: Вообще-то похожим способом объявляются вызовы базовых классов, но здесь не определены базовые классы для class A, а просто описаны: int x;, void *y;. Тогда почему, возможно вызывать эти элементы как базовые классы?
  5. Объявляются благодарности. live_4_ever - за активное участие, (повышен уровень). M4K - за активное участие (повышен уровень). SER[G]ANT - за участие (не сильно, но +2 повышен уровень за создание темы про указатели) Пока на этом всё.
  6. Я могу только пока прокомментировать. Скорее всего на играх этой платформы PS2 есть "аналогичные" указатели как у PC игр. Также есть указатели на структуры в которых находятся указатели на другие структуры и так далее (глубина указателей уже зависит от кода разработчиков). Выход тут один. Использовать отладчик PS2 и искать указатели по аналогии как искали в PC играх. После установления цепочки указателей "внутри рома в контексте платформы PS2" можно если это нужно искать нулевой адрес. Хотя я думаю, что там нет "нулевого адреса" чтобы к нему можно было привязать весь указатель "ныряющий внуть из Windows платформы в PS2 платформу". Этот нулевой адрес будет адресом, на который тоже должен быть указатель.... Это я так сужу потому что обратил внимание на множество блоков памяти со скриншота. Пока больше ничем помочь не могу. p.s. Я вам обоим добавил по одному баллу уровня ("репутации") за ведение и интерес к этой теме, т.к. у нас на форуме активность низкая.
  7. Создано два форума по читам в эмуляторных играх (по вопросам и по статьям), которые можно найти на главной странице форума.
  8. Спасибо, ссылку я посмотрел. Это статья для начинающих. M4K, если будет время и желание скачай игру по статье и проверь новый скрипт на CE на постоянное здоровье для первого игрока на разных эмуляторах - хотя бы на трёх, чтобы можно было убедиться, что этот скрипт работает независимо от эмулятора. [ENABLE] aobscan(addres1,F6 B8 A9 20 8d 06 20 b5 b8 38 e9 01 4a 4a 4a) aobscan(addres2,02 04 00 02 04 00 02 04 00 02 04 00 02 04 00 02 04) addres1: db 4c 0b cb ea addres2: db F6 B8 8D 16 CB A9 00 85 B8 AD 16 CB 4C FB C1 02 04 [DISABLE] aobscan(addres1, 4c 0b cb ea 8d 06 20 b5 b8 38 e9 01 4a 4a 4a) aobscan(addres2, F6 B8 8D 16 CB A9 00 85 B8 AD 16 CB 4C FB C1 02 04) addres1: db F6 B8 A9 20 addres2: db 02 04 00 02 04 00 02 04 00 02 04 00 02 04 00 02 04 Раньше я писал аналогичный скрипт сохраняя регистр А в стек, а стек оказался действительно полным и поэтому в него нельзя было просто так сохранить временные данные. Вместо сохранения в стек я использовал адрес в codecave находящийся ниже тела инъекции нового условия.... Здоровье первого героя не будет уменьшаться, здоровье второго героя будет уменьшаться, но этого не будет видно. Если бить по врагу, то в конце-концов он быстро умрёт. Пока я не понял почему здоровья врага видимо не уменьшается, скорее из-за меняющихся флагов в регистре флагов. Я сделал для себя вывод, что по началу привыкнуть к ассемблеру под "этот" процессор сложно, нужно упорство. А потом всё легче и легче и уже что-то делаешь на автомате: ищешь адрес, ставишь бряки, ищешь codecave, пишешь условие на ассемблере, прыжок на кодкейв, прыжок обратно, копируешь байты, проверяешь сигнатуры, пишешь скрипт на CE и чит для рома готов и он теоретически не зависит от типа эмулятора. В CE при запуске скрипта нужно поставить настройки памяти, как это было указано в первом посте. Пока в этой теме от меня никакой информации больше не будет Кому интересно, могут повторить что я делал и задать вопросы, пока я помню, что и как я делал.
  9. Кратко о функциональных выражениях в C#. Встретил я вот такой "условный" вариант и мне он понравился: new [] { this.button1, this.button2, ... this.button7 } .ToList().ForEach(p => p.Click += button_Click); void button_Click(object sender, EventArgs e) { var btn = (Button) sender; } А вот мой пример насколько может быть запутанных функциональное выражение. Запутанное в том смысле если к нему ещё не успел привыкнуть (не рекомендуется писать dSMultiLauncher, лучше DSMultiLauncher, но мне лень исправлять здесь): Вариант 1 var files = from v in dSMultiLauncher.Files where (v.GroupID==Position) select v.Puth; foreach (var Puth in files) { int imageIndex = iconListManager.AddFileIcon(Puth); conList_ListView.Items.Add(Puth, imageIndex); } Вариант 2 (from v in dSMultiLauncher.Files where (v.GroupID == Position) select v.Puth).ToList().ForEach(Puth =>{ int imageIndex = iconListManager.AddFileIcon(Puth); iconList_ListView.Items.Add(Puth, imageIndex);}); Не могу определить что лучше для меня, т.к. я привыка. к функциольным выражениям Целая функция будет выглядеть так: void FillGroupsAndIcons() { // Выбрать группу на которую установлен указатель в таблице int Position = groupBindingSource.Position; DSMultiLauncher.GroupRow gr = dSMultiLauncher.Group[Position]; // Найти файлы по текущей группе и // заполнить иконками писок (from v in dSMultiLauncher.Files where (v.GroupID == gr.ID) select v.Puth).ToList().ForEach(Puth =>{ int imageIndex = iconListManager.AddFileIcon(Puth); iconList_ListView.Items.Add(Puth, imageIndex);}); } Однако из предыдущего поста, где был пример из MSDN, там foreach решили поставить вместо того чтобы писать длинное функциональное выражение. Короче, для большинства проще расписывать с foreach, да и скорость выполнения быстрее (где-то я об этом читал). Но с функциональными выражениями пишешь код словно составляешь длинное предложение, прикольно ))) Этот код я использую в реальном приложении, которое я пишу. Я пишу его для того чтобы разобраться как работать с сериализацией и десериализацией в базах данных, с автоманическим генерированием схемы базы данных и т.п..... Здесь приложение Windows Forms, но сериализация аналогична и в ASP.NET и SiliverLigth и т.п.. Например, можно будет на сервере генерировать разметку отправляемую клиенту. Она например будет нужна для записной книжки перетаскиваемых ссылок на различные медиафайлы... и этот список будет запоминаться на сервере... )
  10. Когда я был маленьким я помню у меня был компьютер на котором тормозил Doom =) Потом он сломался, другой комп почему-то не покупали. Родители не видели в нём пользы, считали его просто игровой приставкой что ли. В 2003-2004 годах (10-11 класс) я не знал как пользоваться почтой. Я плохо знал компьютер на уровне пользователя. В 2004 году у меня только появился Интернет (в 2001 появился компьютер c Windows Millenium). Тогда я был человеком из Каменного века. Иногда у меня в школе в 10-м классе, в компьютеном классе уже во всю играли в "какую-то" контру... Пользы от компьютера я видел мало, разве что только в игры резаться. В 2003 году у меня было несколько моих дисков игрового журнала на которых был только MTC и скупая игроманская документация о том как MTC пользоваться. В игре Legacy of Kain: Defiance (эту игру мне дал знакомый) меня просто прижал самый главный бос (в конце игры). Я его почему-то никак не мог пройти. И тогда я после удачных попыток сделал постоянное здоровье. Использовал MTC (Magic Trainer Creator) поиск неизвестного значения. Legacy of Kain: Defiance PC Дата выхода: 16 декабрь 2003 Минимум: CPU 700 MHz, 128 Mb, 32 Mb Video Рекомендуем: CPU 1.3 GHz, 256 Mb, 64 Mb Video Это вроде была моя первая игра где я с умом использовал сканер памяти MTC после упорных попыток и чтения документации. До этого я тоже что-то делал или пытался, но интереса у меня особого это не вызывало - слишком было сложно. Потом там же где-то в 2003-2004 годах я узнал об Артмани и читал её справку с невиданной жадностью и не всё понимал. Потом узнал про то что сильно недооценивал Cheat Engine и ещё с большим интересом узнавал как им пользоваться. Потом набил руку с Olly Debagger и с IDA. Потом узнал как писать программы на Дельфи и C++ работающие API Windows и мне это помогло понять механизмы которые происходят в играх. Трейнеров я делал очень мало не знаю почему. Наверно, потому что мне хватало получать удовольствие от скриптов Cheat Engine. Хотя получить славу от создания трейнеров, тоже не плохо. Как-нибудь доделаю TrainerMax...
  11. Это я случайно поставил или не обратил внимание )
  12. 1. Образец надо будет изменить - у CE другой синтаксис скриптов (об этом я писал на форуме) 2. "О том куда вставлять скрипты" - здесь. 3. =1"]Используем поиск по форуму.
  13. 1. Надо писать скрипты под Cheat Engine. 2. Поменять местами: movss xmm0,[edi+000005c4] mov dword ptr [edi+000005c4],0x46140000
  14. Согласен с Xipho поищи на форуме. Почитай статьи. Если увижу старания, то я помогу.
  15. Здравствуйте, krocki. TSearch старая программа и показывает инструкции не правильно. Используйте Cheat Engine (эта программа сложная не спорю, но иначе есть ещё сложнее MHS, OllyDBG). Найдите адрес, поставьте на него брейкпоинт на доступ и приведите вновь Ваши инструкции.
  16. Если вы что-то будите писать, то можете писать про любые другие платформы, эмуляторы и отладчике. В этом постей 2 части по созданию читов в игре M4K. Игра: M4K. Дебагер: fceux-2.1.4a-win32 Исходник этого эмулятора и различная документация: fceu2.1.4a.rar Сайт этого отладчка:ссылка Часть1.Отключение таймера с помощью отладки. Сразу скажу, что я не нашёл хорошего способа в Artmoney, в потому что в ней жёстко привязывается "название эмулятора - адрес в эмуляторе". Мне это не понравилось. Сразу покажу к чему мы придём. С помощью этой галочки мы с можем отключать и включать таймер теоритически на любом эмуляторе. Здесь русифицированная версия Cheat Engine, но на оригинальной версии скрипты тоже должны работать. Ну а теперь, о том как это было сделано.
  17. Цель данной темы понять как работает Windows OS (от устройств до программ пользовательского уровня)... Итак пока вот две стати: 1) Цикл статей «Драйверы режима ядра» 2) Статья про API hooking revealed (ENG): Скрин из статьи: 3) На следующем рисунке показаны основные внутренние компоненты операционной системы Windows (подробнее в MSDN) Многих тонкостей нет, например тогокак попасть в ring 0 из ring 3 (статьи про это дело в интернете)... Также в ring 0 нельзя выполнять операции WInAPI, но зато можно пользоваться VxD - сервисами...
  18. Здесь выкладываются проекты по системному программированию на С#. Т.е. программирование всего, что связано с процессами, потоками, хуками, драйверами, работа с памятью и т.п. всё-то что характерно для Windows операционных систем. У С# есть много проблем с WinAPI и решаются они маршалингом, вот его-то и можно найти в этой теме. Ниже нет таковых трейнеров, здесь механизм создания модов, который можно будет применить в геймхакинге. Файлы по игре Grand Theft Auto 4 (Скачайте ещё SlimDX SDK, который потребуется при компиляции) Grand Theft Auto 4.rar Вот что можно сделать: Болле подробно читайте темы: 1) Автор:HazardX [bETA] GTAIV .Net ScriptHook 2) Автор: aru [GTAIV|REL|SRC] C++ Script Hook 3) Там же почитайте темы Alexander Blade по тому что он мутил с asi лоадером, и почитайте про обходы Windows - LIVE Файлы по игре Mass Effect 2 Подробноестей не понмю (поищите в интернете) Mass Effect 2.rar
  19. CheatEngine56src.rar SVN (на теущий момнет там валяется 5.6.1 и 6.0) Скомпилированный вариант CE 5.6.1 (установщик, включает справку) CheatEngine561.rar Также у нас есть тема по модернизации CE RUS (возможно вы там найдете что-то для себя, русскую версию, темы модернизации и т.п.) CE обычно обновляется в Новый год или после него. Те кто не хотят ждать могут компилировать вариант из SVN. Update: Рекомендую использовать Delphi 7. Точную версию не помню
  20. Здесь выкладываются проекты по системному программированию на С++. Т.е. программирование всего, что связано с процессами, потоками, хуками, драйверами, работа с памятью и т.п. всё-то что характерно для Windows операционных систем. Известный MHS от L.Spiro Очень много примеров для различных задач находится в этом проекте. Просто рай для изучения С++. Ссылки с нашего форума: MHS (исходники) Stars.rar Kerner драйвер(исходники) StockReport2008.rar MHS6.1.rar (скомпилированный вариант) MHS6.1.rar Справка по MHS MHS Help.rar Установка хуков (wtlui.sln) SVN (на текущей момент ревизия 39, Visual Studio 2010), Исхдоник (с примером tracedll) wtlui.rar Пример (пример установки хука на запись в память):
  21. Хочу обратить внимание на пример из MSDN по удобной работе с LINQ запросами. Представьте, что у нас есть список студентов (который можно удобно импортировать из различных баз данных, в том числе и xml...). Этот список в стиле C# описывается вот так: new Student {First="Svetlana", Last="Omelchenko", ID=111, Scores= new List<int> {97, 72, 81, 60}}, new Student {First="Claire", Last="O'Donnell", ID=112, Scores= new List<int> {75, 84, 91, 39}}, new Student {First="Sven", Last="Mortensen", ID=113, Scores= new List<int> {99, 89, 91, 95}}, new Student {First="Cesar", Last="Garcia", ID=114, Scores= new List<int> {72, 81, 65, 84}}, new Student {First="Debra", Last="Garcia", ID=115, Scores= new List<int> {97, 89, 85, 82}} Наша задача вывести два списка студентов с низким средним баллом и высоким Человек не знающий LINQ пошёл "ай да наяривать циклы" чтобы вывести результат. А вот элегантное решение с LINQ: var booleanGroupQuery = from student in students group student by student.Scores.Average() >= 80; //pass or fail! Ну и вот весь код
  22. Нет. Он определил: _Player: dd 0 но не там где надо (я сразу не увидел) .
  23. Нет, он её объявил и определил. Если он скобки сделал квадратными, то возможно должно было бы всё работать.
  24. Ты ещё забыл попросить сделать трейнер ) Не. У нас на форуме есть множество примеров как писать скрипты по ним можно научиться. Если что-то не компилируется,то упрощай скрипт так чтобы компилировался, а затем добавляй по строчке своего кода и увидишь ошибку.
×
×
  • Создать...

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

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