Xipho Опубликовано 10 декабря, 2009 Поделиться Опубликовано 10 декабря, 2009 Здесь обсуждаем статью с сайта "F.E.A.R., обход расположения кода в модулях" Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 22 марта, 2010 Поделиться Опубликовано 22 марта, 2010 Xipho Спасибо. Правда только сейчас почитал, но кое что новое узнал, спс. Ссылка на комментарий Поделиться на другие сайты Поделиться
Chucky Опубликовано 26 мая, 2011 Поделиться Опубликовано 26 мая, 2011 А как эти функции реализовать на ассемблере? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 мая, 2011 Поделиться Опубликовано 26 мая, 2011 Задавать скорее всего нужно более конкретные вопросы чтобы за тебя не писали код, а могли просто поправить или направить на решение Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 31 мая, 2011 Поделиться Опубликовано 31 мая, 2011 Статья хорошая правда рекомендуется более опытным. Много чего узнали.Ниже скрипт сделал Без перезарядки все оружие, работает на любое оружие которое подбирает гГерой. После перезагрузки игры или компьютера скрипт работает, выполняет команду.Чит -код будет работать постоянно? Кто ломал игру? (Без перезарядки). Показать контент [ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:mov ecx,[eax+edx*4]noporiginalcode:mov [eax+edx*4],ecxmov edx,[GetBuildNumber+71974]exit:jmp returnhere"Gam7290.tmp"+BCF89:jmp newmemnopnopnopnopreturnhere:[DISABLE]"Gam7290.tmp"+BCF89:mov [eax+edx*4],ecxmov edx,[GetBuildNumber+71974]dealloc(newmem)//Alt: db 89 0C 90 8B 15 C4 CA 1A 10[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:mov [esi+00000098],064originalcode:dec [esi+00000098]exit:jmp returnhere"Gam7290.tmp"+2A073:jmp newmemnopreturnhere:[DISABLE]"Gam7290.tmp"+2A073:dec [esi+00000098]dealloc(newmem)//Alt: db FF 8E 98 00 00 00Правда надо включить два скрипта чтобы получить Без перезарядки в CE. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 31 мая, 2011 Поделиться Опубликовано 31 мая, 2011 Точно прокомментировать не могу, т.к. статью уже плохо помню. Помниться мне, что "Gam7290.tmp" может быть с другими цифрами, то же самое что с другим именем. Поэтому скрипт у кого-то работать не будет -- ОбновленоТочно, цифры там могут меняться... Xipho перебирал все модули занятые процессом игры через Module32First и Module32Next, и по смещению RealNameOffset сравнивал имена модулей. Если модуль оказывался с нужным именем, то берётся базовый адрес модуля и от него уже пляшем. Показать контент var readbuf:array[0..13] of byte; modEntry:MODULEENTRY32; modSnap:THandle; gHandle:THandle; insAddress:Cardinal; numRead:Cardinal; i:integer; str:string; begin Result:=0; modSnap:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE,ProcessID); modEntry.dwSize:=SizeOf(modEntry); If Module32First(modSnap,modEntry) then begin While Module32Next(modSnap,modEntry) do begin gHandle:=OpenProcess(PROCESS_VM_READ or PROCESS_VM_OPERATION,false,ProcessID); insAddress:=Cardinal(modEntry.modBaseAddr)+RealNameOffset; ReadProcessMemory(gHandle,ptr(insAddress),@readbuf,14,NumRead); CloseHandle(gHandle); str:=''; For i:=0 to SizeOf(readbuf)-1 do begin str:=str+Chr(readbuf[i]); end; If str=ModuleName then begin Result:=Cardinal(modEntry.modBaseAddr); end; end; end; CloseHandle(modSnap); end;function TForm1.GetBaseAddress(ProcessID: Cardinal; ModuleName: string; RealNameOffset:integer): Cardinal;Кстати не сказал бы, что весь код очень сложный =) Главное идея, а сам код уже можно написать просто полазив по Интернету и различным справочникам ) Кстати на CE можно было бы искать уникальную сигнатуру кода и уже от неё плясать. Я думаю это даже практичнее. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 мая, 2011 Автор Поделиться Опубликовано 31 мая, 2011 В планах у меня переписать эту статью. MasterGH, как-то я тебе скидывал исходник с использованием структур PE для определения реального имени модуля игры. Думаю, в обновленной версии статьи использую этот прием. В этом случае и поиск уникальных сигнатур не понадобится. Впрочем, учитывая наличие aobscan в CE, актуальность поиска реального имени модуля становится под вопросом.ЗЫ. Где ж найти время, чтобы реализовать все ближайшие планы?.. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 июня, 2011 Поделиться Опубликовано 1 июня, 2011 Лучше сделать по такому шаблону Показать контент processName = "iw3sp.exe"function ByteScan(signature) local results = AOBScan(signature, "+X-C-W") if (results == nil) then messageDialog("Ошибка. Не найден адрес внедрения.\n\rТрейнер будет закрыт!",1, 2) closeCE() return end local address = stringlist_getString(results, 0) return addressendfunction Initialize()--1 Убрать отдачу на руку local workAddres = ByteScan("e8xxxxxxxx8bxxxxxx83xxxx33xx80xxxxxx75xx8bxxxxxxf7") local workTemplateAsmText = [[->>address:db 90 90 90 90 90]] workTemplateAsmText = string.gsub(workTemplateAsmText, "->>address", workAddres) autoAssemble(workTemplateAsmText)--2 Устойчивый прицел при стрельбе--3 Устойчивый прицел при беге --Устойчивый прицел при беге local workAddres1 = ByteScan("d9xxd9xxxxd9xxxxd9xxxxxxxxxxdexxdfxxf6xxxx75xxd9xxxxxxxxxxd9") workAddres1 = string.format("%x", ("0x"..workAddres1) + 8) -- Устойчивый прицел при стрельбе local workAddres2 = ByteScan("d9xxxxxxxxxx75xxd9xxxxxxxxxxd8xxxxxxd8xxdfxxf6xxxx7axxd9") workTemplateAsmText = [[alloc(newmem1,2048)label(newmem2)label(returnhere1)label(originalcode1)label(returnhere2)label(originalcode2)newmem1: fstp st fldzoriginalcode1: fstp dword ptr [ebx+00000624] jmp returnhere1newmem2: fstp st fldzoriginalcode2: fst dword ptr [ecx+00000624] jmp returnhere2->>address1: jmp newmem1 nopreturnhere1:->>address2: jmp newmem2 nopreturnhere2:]] workTemplateAsmText = string.gsub(workTemplateAsmText, "->>address2", workAddres1) workTemplateAsmText = string.gsub(workTemplateAsmText, "->>address1", workAddres2) autoAssemble(workTemplateAsmText)--4 Бесконечные боеприпасы без перезарядки -- в будущем--5 Бесконечное здоровье -- в будущем-- Звуковой сигнал об успешности внедрения читов beep()endaalist = getAutoAttachList()stringlist_add(aalist,processName);function onOpenProcess(processid) if (attach) then return end attach = true openProcess(processid) Initialize() form_show(UDF1)endfunction FormClose(sender) closeCE() return caHideendhideAllCEWindows() Почему я пишу об этом варианте. Потому что этот вариант кода на LUA Engine CE 6.1 RC2 быстрый и должен подходить в случае даже F.E.A.R. И данный скрипт это только протокол действий или сценарий для исполняемой части. Для геймхакера удобно работать со сценариями изменяя их в будущем. Исполнительная часть сценариев должна быть отдельно (как программа Cheat Engine). Писать такой самописный трейнер с разделением на исполнительную и сценарийную части заёмет много времени взависимости от поддерживаемых функций (LUA, ассемблера, дизассемблера...) ...В противном случае придёться писать трейнеры ТОЧНО для каждой версии игры для каждого нового патча. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 июня, 2011 Автор Поделиться Опубликовано 1 июня, 2011 Вовсе нет. Если реализовать в трейнере поиск сигнатуры, как реализовано в СЕ - трейнер будет работоспособен под любой версией игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 июня, 2011 Поделиться Опубликовано 1 июня, 2011 Поиск сигнатуры это лишь малая толика того что надо. Требуется поиск сигнатуры, дизассемблер и ассемблер. А также функции дизассемблирующие инструкцию которая была найдена по сиганатуре. Анализирование этой инструкции с созданием инъекции кода по правилу постоянного значения. Это нужно потому что, может быть такоеmov eax, [ecx + 14]mov eax, [edx + 18]Сигнатура будет валидная по байту инструкции MOV и рядом стоящим инструкциям. А вот регистры другие и смещения в структуре другие. Придётся тебе в свой трейнер ещё вставлять в будущем всё что я написал и тратить на это время. Можно сейчас уже реализовывать "интеллектуальное" внедрение на LUA, а уже потом в будущем делать свой трейнер с описанными функциями.Бывают редкие случаи, когда код игры так модернизируют, что сигнатура никак не может быть валидной - игра с Червяками (SER[G]ANT писал об этом). В этом случае нужно написать сканер валидных сигнатур по действиям в отладчике с двумя запущенными играми разных версий... но до этого ещё далеко, т.к. мне сейчас не до этого. Ссылка на комментарий Поделиться на другие сайты Поделиться
Chucky Опубликовано 1 июня, 2011 Поделиться Опубликовано 1 июня, 2011 Возможно ли перевести исходник из этой статьи на ассемблер? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 июня, 2011 Поделиться Опубликовано 1 июня, 2011 Возможно. Дальше что будешь делать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Chucky Опубликовано 1 июня, 2011 Поделиться Опубликовано 1 июня, 2011 Сделаю трейнер для Suffering и выложу.. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 июня, 2011 Поделиться Опубликовано 2 июня, 2011 Спасибо за ответ.Знаешь, просто не понятно, что тебе мешало написать программу на ассемблере по Дельфи коду. Ведь это проблема осталась и никуда не делась... Зато ты для себя выяснил главное, что можно на MASM написать программу написанную на Дельфи. И задать этот вопрос поисковику кстати тоже можно было Ссылка на комментарий Поделиться на другие сайты Поделиться
ZOCKIR Опубликовано 2 июня, 2011 Поделиться Опубликовано 2 июня, 2011 Мда дела посложнее. Monolith Productions молодцы. А с F.E.A.R. 2: PROJECT ORIGIN тоже такие проблемы основной файл игры подгружает в свое адресное пространство dll-ку с движком игры? Ссылка на комментарий Поделиться на другие сайты Поделиться
Yuriko33 Опубликовано 8 декабря, 2014 Поделиться Опубликовано 8 декабря, 2014 В 10.12.2009 в 21:46, Xipho сказал: Здесь обсуждаем статью с сайта "F.E.A.R., обход расположения кода в модулях"Что-то не проходит по ссылке, на сколько я помню, там был выложен исходник?Как и где его можно скачать?Спасибо! Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 8 декабря, 2014 Автор Поделиться Опубликовано 8 декабря, 2014 На данный момент основная часть сайта находится на реставрации, и часть статей недоступна. Ссылка на комментарий Поделиться на другие сайты Поделиться
Yuriko33 Опубликовано 14 декабря, 2014 Поделиться Опубликовано 14 декабря, 2014 В 10.12.2009 в 21:46, Xipho сказал: Здесь обсуждаем статью с сайта "F.E.A.R., обход расположения кода в модулях" Кому не трудно, дайте пожалуйста ссылку, чтобы можно было скачать исходник... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 декабря, 2014 Автор Поделиться Опубликовано 14 декабря, 2014 Исходника нет. Да и неактуален уже описанный в данной статье метод. На смену ему пришёл метод поиска инструкции по сигнатуре (aobscan). Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 25 февраля, 2015 Поделиться Опубликовано 25 февраля, 2015 Данная тема ушла в небытие...Прикладываю архивчик любителям. Там же сорцы и билд.F.E.A.R. (Стрелок).rarОбратите внимание заготовка на Дельфи7 в виде формы и кнопки( как шаблон пример). Главное код, а не визуальное отображение. Кстати, я не указал, что статья-то для общего развития. На сегодняшний день есть альтернатива.. цитирую из темы. В 14.12.2014 в 06:37, Xipho сказал: ... неактуален уже описанный в данной статье метод. На смену ему пришёл метод поиска инструкции по сигнатуре (aobscan).Жалко было такую статью оставлять в архивах. Ссылка на комментарий Поделиться на другие сайты Поделиться
Yuriko33 Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 В 25.02.2015 в 18:05, MasterGH сказал: Данная тема ушла в небытие...Прикладываю архивчик любителям. Там же сорцы и билд.F.E.A.R. (Стрелок).rarОбратите внимание заготовка на Дельфи7 в виде формы и кнопки( как шаблон пример). Главное код, а не визуальное отображение.Кстати, я не указал, что статья-то для общего развития. На сегодняшний день есть альтернатива.. цитирую из темы.Жалко было такую статью оставлять в архивах.И как им пользоваться? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 марта, 2015 Автор Поделиться Опубликовано 16 марта, 2015 Чем пользоваться? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения