live_4_ever Опубликовано 17 мая, 2010 Поделиться Опубликовано 17 мая, 2010 Отличная статья! Только есть одно но! Она на английском. Пока...Я сейчас перевожу ее. Но думаю это будет не скоро. Поэтому если кто хочет и понимает может пока на англ. почитать. Может кому понадобиться...Сохранить позицию/Отменить позицию (Телепорт)Save/Restore(Teleport) - 08-19-2006, 03:15 AM________________________________________Subject: Save Restore (Teleport) Game: Bloodrayne 2 DemoTools Needed:Memory Searcher(i used cheat engine,tsearch has problems with this game)Debugger( I used softice but you can use whatever you want)************************************************** ********................IntroductionStep 1..........Find Health and getting our structureStep 2..........Finding our players coordinatesStep 3..........Code InjectionStep 4..........Code into the trainer ************************************************** ********Introduction------------Basically we are going to do a save restore option for bloodrayne2 Demo. What this option does is you can press one key to save a position in the game then another key will teleport you back to that same position. You should have good training skills if you plan on doing this tutorial(searching,debugging,ect). Ill try and go into as much detail as i can, but if you follow all the steps you should have no problem doing this option correctly. On with the tut.....************************************************** ********Step 1: Find Health and getting our structure---------------------------------------------Ok I am sure you know how to search for your health. If you don't get out of here . Ok now you found your health address. What we want to do is get all of our pointers because we are going to use one of them to do our injection. So...CTRL+D into softice...bpm ADDRESS press enter...Press F5 and softice will break...Write down the address it breaks at...Keep hitting F5 and write down all the addresses, and pointers you break at until they start repeating...This is what I ended up with5BE285 : PUSH [EBX+39C4]5BE2B5 :5BE2D1 :5BF30A :There are a lot more but we really only need on of them. Next you want to go threw and set a execution breakpoint on them one at a time and watch the structure inside the pointer and make sure it never changes so you know that pointer is only reading your health, so....bpx 5BE285 press enter....F5 and softice will break...Keep hitting F5 and watch the structure inside 5BE285 witch is EBX(up in the register window), and if it never changes its just for us (witch it don't). This is the address we will be using for our teleport option...5BE285 : PUSH [EBX+39C4]Ok you should know how most games work...Your players,weapons,items,ect have there own structures. So inside your player structure will have everything containing your character. So now to get the coordinates.There are a lot of ways to finding these. A lot of people will take the long approach(using a mem searcher,blah), witch doesn't always work. The quick and easy way is to use the players structure, because they are usuallystored at the top of the structure(if not there there down in the structure somewhere). Health is stored in the player structure. This pointer PUSH [EBX+39C4], EBX is the beginning of the player structure, so wheneverthe game needs to get something for your player they just add a value to EBX, for instance your health is [PlayerStructure+39C4]. Your power might be [PlayerStructure+34] or whatever. That's all I am going to explainon that matter I hope you understand.Ok now to get the coordinates... We need to set a execution breakpoint on our health pointer and dump our structure, so....bpx 5BE285 press enter...Hit F5 and softice will break...d EBX press enter...Now up in the dump window the first address will be our player structure. Now all you want to do here is watch the bytes. You are watching for 4 bytes in a row that only change when your player has moved. So I go into softice and watch a line at the top..I remember what the bytes looked like or you can write them down..then move your character a few steps go back into softice and look for 4 bytes that have changed..your coordinates willbe store in 4 bytes and there are 3 of them x,y,z.. And they will be back to back..So your data window looks like this600001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00600002 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00The coordinates will be stored like this600001 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00600002 00 00 11 11 11 11 22 22 22 22 33 33 33 33 00 001 = first coordinate2 = second coordinate3 = third coordinateSo I did this step and found 3 dwords in a row where 2 of them changed only when I moved(height coordinate don't change unless you change height). So i took the first dword i found and put it in a memory searcher so i can test. I wrote down the value then i moved my character, went back to the memory searcher and put back the first value i wrote down and sure enough i teleported back to that location.So the next step is to find out where it is stored in our structure. All you do is this...First Coordinate Address - PlayerStructure address = how many bytes awayso I ended up with (34) for the first coordinate and the other 2 are 4 bytes away so..[PlayerStructure+34] = First Coordinate[PlayerStructure+38] = Second Coordinate[PlayerStructure+3C] = Third CoordinateGreat now we have our coordinates and there location...Note!! do not skip this step unless you fully understand it...read it over until you do..************************************************** ********Step 3: Code Injection----------------------What you will need...1. Code Cave2. 2 Empty address for setting 2 flags3. 3 Empty address for storing away our 3 coordinates (I just make my 3 addresses 4 bytes away).Ok so first thing is find you a big code cave cause its kind of a big injection. We are going to use that first health pointer to do our teleport injection. We can do that because the pointer holds our player structure. You don't always have to do your injection wherever you break at in softice . Now I am going to show my full injection then I will explain... So here goes..5BE285: JMP CODE CAVE---------- ORIGINAL INSTRUCTION REPLACED WITH A JUMP TO OUR CAVENOP | BALANCE OUT THE BYTES||CAVE: PUSH [EBX+39C4]-------- ORIGINAL INSTRUCTIONPUSHAD SAVE REGISTERSCMP [FLAG1],1 TEST IF OUR SAVE KEY WAS PRESSEDJNE SHORT-------------- IF KEY WASNT PRESSED JUMP TO RESTORE ELSE SKIP JUMPMOV [FLAG1],0 | MOVE ZERO BACK INTO THE FLAG SO FUNCTION DOESNT REPEATMOV ECX,3 | MOVE COUNTER INTO ECXLEA EDI,[sTATIC1] | LOAD DESTINATION ADDRESS INTO EDILEA ESI,[EBX+34] | LOAD FIRST CORDINATE ADDRESS INTO ESIREP MOVSD | COPY SOURCE INTO DESTINATION UNTIL ECX=0|CMP [FLAG2],1---------- TEST IF RESTORE KEY WAS PRESSEDJNE TO END--------------- IF NOT THEN JUMP TO ENDMOV [FLAG2],0 | MOVE ZERO BACK INTO FLAG SO FUNCTION DONT KEEP REPEATINGMOV ECX,3 |LEA EDI,[EBX+34] | LOAD DESTINATION ADDRESS INTO EDILEA ESI,[sTATIC1] | LOAD FIRST STORED CORD ADDRESS INTO ESIREP MOVSD | COPY SOURE INTO DESTINATION UNTIL ECX=0|END:---------------------POPAD RESTORE REGISTERSJMP BACK TO GAME LOOP JUMP BACK TO GAME LOOPPretty simple eh? ************************************************** ********Step 4: Code into the trainer-----------------------------Ok all you need to do is, For the Save key in your trainer, just inject all that code(make sure you inject your cave before your jump) and inject the value of 1 into the first flag addressFor the Restore key in your trainer, inject all that code, and inject the valueof 1 into the second flag address.So when you press the save hotkey it will put 1 into that flag making it true and put your coordinates away into there static address. And when you press the restore key it will take the coordinates in your static addresses and put then in your actual coordinates addresses making you teleport to that location.Not to tuff of an option, it may be at first but with a few tries you should have it no problem..Well that's the end ... Hope this helps a bit...Happy Training… 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 17 мая, 2010 Поделиться Опубликовано 17 мая, 2010 Хорошая статья по игре Bloodrayne 2 Demo.Но можно сделать ещё лучше - свою статью на основе этой с некоторыми скринами ключевых моментов на CheatEngine на той же самой игре Bloodrayne 2 Demo. Конечно это тебе решать Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 25 июля, 2010 Поделиться Опубликовано 25 июля, 2010 Считаю эти 2 опции (save position/load position) бесполезными в трейнере, но решил еще немного прокачаться. Инфы на эту тему мало, читал статью Psych'a, но не очень понял, а других статей нет/не нашел.Буду рад любой помощи. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 25 июля, 2010 Автор Поделиться Опубликовано 25 июля, 2010 Это читал? 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 25 июля, 2010 Поделиться Опубликовано 25 июля, 2010 Хм, верстка статьи доставляет, еле понял что, да как.Испробовал на JumpMe.И вот мой скрипт aobscan(_faddress,xxxxa1xxxxxxxx8bxxxxxxxxxxxxxxxxxxe8xxxxxxxx83xxxxffxxxxxxxxxx81) alloc(_newmem,2048) label(_returnhere) label(_originalcode) label(_flag1) registersymbol(_flag1) registersymbol(_flag2) label(_flag2) label(_rest) label(_static) label(_exit)_newmem:_originalcode: push [eax] pushad cmp [_flag1],1 jne short _rest mov [_flag1],0 mov ecx,3 lea edi,[_static] lea esi,[eax] rep movsd _rest: cmp [_flag2],1 jne short _exit mov [_flag2],0 mov ecx,3 lea edi,[eax] lea esi,[_static] rep movsd _exit: mov eax,[jtrainme.exe+f044] popad jmp _returnhere_flag1: dd 0 _flag2: dd 0_static: dd 0_faddress: // 004016F7 = Jtrainme.exe+16F7 jmp _newmem nop nop_returnhere:[DISABLE] aobscan(_faddress,90908bxxxxxxxxxxxxxxxxxxe8xxxxxxxx83xxxxffxxxxxxxxxx81)_faddress-5: push [eax] mov eax,[jtrainme.exe+f044] dealloc(_newmem) unregistersymbol(_flag1) unregistersymbol(_flag2)//Alt: db FF 30 A1 44 F0 40 00[ENABLE] Есть вопросы:Почему-то флаг1 у меня отвечает за сохранение позиции, а флаг2 за возврат, а в статье наоборот.Поиск инструкция, отвечающей за координаты, через структуру здоровья (или чего-либо еще) - гадание на кофейной гуще. Значит нужно будет искать в игре координаты X,Z,Y (т.е. ходить влево/вправо, вперед/назад, прыгать) - это тоже гемор и не факт, что за X, Z, Y будет отвечать одна и таже инструкция, как в статье. Или всегда одна отвечает, как в статье ?. Как обычно ищут ту самою инструкцию, отвечающую за координаты X, Z, Y ?Вопросы мои тупы, т.к. эта тема для меня нова. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 25 июля, 2010 Поделиться Опубликовано 25 июля, 2010 Я думаю ты сам сможешь ответить на все вопросы Я бы сделал так:1. Находим адрес координат Z любым удобным способом.2. Находим инструкцию работающую с этой Z координатой.Если инструкция1 работает со всеми координатами, то это на руку.Если нет, то координата Z стоит, обычно, рядом с X, Y и не составит особого труда написать скрипт.3. Создаём такой скрипт1 - инъекция "Сохранение координат в зарегистрированную метку1 из инструкции1 с последующей отменой этой иньекции". Только не уничтожай метку1.5. Создаём скрипт2 - иньекция "Восстановление координат из метки1 с последующей отменой инъекции". Только не уничтожай метку1.6. На первый и второй скрипты вешаем хот-кеи.Если сделать так как я написал, то это избавит от лишних флагов Ссылка на комментарий Поделиться на другие сайты Поделиться
M4K Опубликовано 25 июля, 2010 Поделиться Опубликовано 25 июля, 2010 (изменено) Координаты (на консолях очень часто) обычно идут как +4h друг за другом. То есть если к адресу X прибавить +4h - получим Y или Z. Бывают также смещения 2h, A6h, 10h, 100h, 80h и т.д.В статье выше тоже 4h. Изменено 25 июля, 2010 пользователем M4K Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 Я думаю ты сам сможешь ответить на все вопросы Я бы сделал так:1. Находим адрес координат Z любым удобным способом.2. Находим инструкцию работающую с этой Z координатой.Если инструкция1 работает со всеми координатами, то это на руку.Если нет, то координата Z стоит, обычно, рядом с X, Y и не составит особого труда написать скрипт.3. Создаём такой скрипт1 - инъекция "Сохранение координат в зарегистрированную метку1 из инструкции1 с последующей отменой этой иньекции". Только не уничтожай метку1.5. Создаём скрипт2 - иньекция "Восстановление координат из метки1 с последующей отменой инъекции". Только не уничтожай метку1.6. На первый и второй скрипты вешаем хот-кеи.Если сделать так как я написал, то это избавит от лишних флагов пункты 3,5,6 это и ежу понятно, а вот как искать Z коорлинату...В приведенной статье автор искал инструкцию, отвечающую за здоровье и уже в структуре игрока нашел координаты, причем они у него были в самом начале структуры. Далее он делал телепорт через иструкцию здоровья, а не искал инструкцию, отвечающую за координаты (а если есть только одна инструкция, отвечающая за здоровье ? хотя, можно использовать дополнительные флаги и условия. А если еще и указатели придется использовать, то получитсья не очень быстрый код).Взял, для примера, Singularity (т.к. распространенный движек U3). Сделал как по статье.. координаты не нашел. Начал искать путем неизвестное, шаг вперед - увеличилось, шаг назад - уменьшилось. Не нашел координату...Вообщем, сейчас основная проблема заключается в правильном поиске координат.Координаты (на консолях очень часто) обычно идут как +4h друг за другом. То есть если к адресу X прибавить +4h - получим Y или Z. Бывают также смещения 2h, A6h, 10h, 100h, 80h и т.д.В статье выше тоже 4h.спасибо за полезную информацию. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 Z- координату найти проще всего если подниматься / опускаться в игровом мире на каких-то возвышениях, лестницах и т.п. Обычно координата имеет 4-байта с точкой, а может быть и 8 байт с точкой. Ищу всегда через MHS в блоке памяти в котором находится здоровье героя или структура героя.Инъекцию отладочного кода можно сделать в любую часто срабатываемую инструкцию. Если тебя очень беспокоит производительность, то надо выбирать варианты инъекции и тестировать, тестировать...Я предполагаю, что вариант который я предложил будет лучшим. Инъекция сохраняющая или восстанавливающая координаты происходит, тогда когда ты нажимаешь на горячую клавишу и эта же инъекция сама исправляет инструкцию "прыга" на инструкцию "оригинальную". Вот и всё, производительность теряться не будет. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 мучился, мучился, но все же сделал для сингулярити телепорт ;P[ENABLE] aobscan(_faddressX,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxxxxxx83xxxxxxxx8dxxxxxxxxxx8bxx83xxxxxx8dxxxxxxxx8bxx83xxxxxxxxxxd9) aobscan(_faddressY,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxxxxxx83xxxxxxxx8dxxxxxxxxxx8bxx83xxxxxx8dxxxxxxxx8bxx83xxxxxxxxxxd9) aobscan(_faddressZ,xxxxxxxxxxxxxxxxxx8bxxxxxxxxxx83xxxxxxxx8dxxxxxxxxxx8bxx83xxxxxx8dxxxxxxxx8bxx83xxxxxxxxxxd9) alloc(_newmemX,1024) alloc(_newmemY,1024) alloc(_newmemZ,1024) label(_returnhereX) label(_returnhereY) label(_returnhereZ) label(_originalcodeX) label(_originalcodeY) label(_originalcodeZ) label(_restX) label(_restY) label(_restZ) label(_X) label(_Y) label(_Z) label(_save) label(_teleport) registersymbol(_save) registersymbol(_teleport)//X_newmemX: fld dword ptr [esi+54] pushad cmp [_save],1 jne short _restX mov [_save],0 mov ecx,3 lea edi,[_X] lea esi,[esi+54] rep movsd _restX: cmp [_teleport],1 jne short _originalcodeX mov [_teleport],0 mov ecx,3 lea edi,[esi+54] lea esi,[_X] rep movsd_originalcodeX: popad fstp dword ptr [esi+00000dd0] jmp _returnhereX//Y _newmemY: fld dword ptr [esi+58] pushad cmp [_save],1 jne short _restY mov [_save],0 mov ecx,3 lea edi,[_Y] lea esi,[esi+58] rep movsd _restY: cmp [_teleport],1 jne short _originalcodeY mov [_teleport],0 mov ecx,3 lea edi,[esi+58] lea esi,[_Y] rep movsd_originalcodeY: popad fstp dword ptr [esi+00000dd4] jmp _returnhereY//Z_newmemZ: fld dword ptr [esi+5c] pushad cmp [_save],1 jne short _restZ mov [_save],0 mov ecx,3 lea edi,[_Z] lea esi,[esi+5c] rep movsd _restZ: cmp [_teleport],1 jne short _originalcodeZ mov [_teleport],0 mov ecx,3 lea edi,[esi+5c] lea esi,[_Z] rep movsd_originalcodeZ: fstp dword ptr [esi+00000dd8] popad jmp _returnhereZ_save: dd 0 _teleport: dd 0_X: dd 0_Y: dd 0_Z: dd 0 //X_faddressX: jmp _newmemX nop nop nop nop_returnhereX://Y_faddressY: jmp _newmemY nop nop nop nop_returnhereY://Z_faddressZ: jmp _newmemZ nop nop nop nop_returnhereZ: [DISABLE] aobscan(_faddressX,90909090xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxxxxxx83xxxxxxxx8dxxxxxxxxxx8bxx83xxxxxx8dxxxxxxxx8bxx83xxxxxxxxxxd9) aobscan(_faddressY,90909090xxxxxxxxxxxxxxxxxx8bxxxxxxxxxx83xxxxxxxx8dxxxxxxxxxx8bxx83xxxxxx8dxxxxxxxx8bxx83xxxxxxxxxxd9) aobscan(_faddressZ,909090908bxxxxxxxxxx83xxxxxxxx8dxxxxxxxxxx8bxx83xxxxxx8dxxxxxxxx8bxx83xxxxxxxxxxd9)//X_faddressX-5: fld dword ptr [esi+54] fstp dword ptr [esi+00000dd0]//Y_faddressY-5: fld dword ptr [esi+58] fstp dword ptr [esi+00000dd4]//Z_faddressZ-5: fld dword ptr [esi+5c] fstp dword ptr [esi+00000dd8] dealloc(_newmemX) dealloc(_newmemY) dealloc(_newmemZ) unregistersymbol(_save) unregistersymbol(_teleport)Осталось оттачить поиск кординат и будет норм. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 Я думаю с телепортом если не всё стало ясно, то почти всё.Покрайне мере технология выяснена.SER[G]ANT-у +5 к прокачке за труды исследования телепорта (каждый уровень будет доставаться всё труднее и труднее) Подобные исследования я очень приветствую.live_4_ever +2 (за статью о телепорте, за то что интересуешься темой)M4K +6 (за выкристаллизованный опыт по расположению данных в структурах, за отличное умение пользоватья сканером памяти (я забыл тебе накинуть очков))Чтобы стать Продвинутым, ты должен показать умение писать скрипты на CE. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 Есть еще вопрос, косвенно относящийся к данной теме.Нужна подсказка о создании, так называемый опции, "Super Jump".Знаю что нужно искать координату Z, она найденна. Дальше что, искать "значение гравитации" (сразу вопрос "как ?") ? или же нужно искать максимальную высоту прыжка ? Опять же, лазение по структурам - гадание на гуще. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 Необходимо создать отдельную тему по этому читу, т.к. с телепортом супер-прыжок не вяжется. Создавай и тогда будем обсуждать Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 26 июля, 2010 Поделиться Опубликовано 26 июля, 2010 Ок, только пожалуй позже, нужно еще с телепортом попрактиковаться. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 29 июля, 2010 Автор Поделиться Опубликовано 29 июля, 2010 Если нужны еще "статьи", вот:teleport1teleport2 Ссылка на комментарий Поделиться на другие сайты Поделиться
activeman Опубликовано 2 августа, 2010 Поделиться Опубликовано 2 августа, 2010 ANT' date='25 Июль 2010 - 06:43' timestamp='1280018608' post='1197']Считаю эти 2 опции (save position/load position) бесполезными в трейнере.Ну ты сказанул!Есть такие игры, где данная опция - спасение!Например, в Legacy of Kain- Defiance, без неё совсем туго.Я и игру бросил почти вначале, т.к. достало заново грузиться. Там сейвов вообще нет, а управление - пипец.А трейнеров с такой фичей - не додумались сделать, дармоеды.Давай, дерзай! Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 14 августа, 2010 Поделиться Опубликовано 14 августа, 2010 ANT' date='26 Июль 2010 - 15:50' timestamp='1280134248' post='1209']Нужна подсказка о создании, так называемый опции, "Super Jump".И из этой же области - как сделать спидхак только для игрока? Думаю алгоритмы создания супер джампа и суперскорости должны быть схожи, но я пока тоже не разобрался Ссылка на комментарий Поделиться на другие сайты Поделиться
Guru.eXe Опубликовано 6 сентября, 2010 Поделиться Опубликовано 6 сентября, 2010 А что именно интересного в этой статье? Координаты игрока, как и другие значения в игре — можно изменять. Советую просто начать с какой-нибудь простой игры, чтобы понять и разобрать, как следует, этот телепорт. Я делал в нескольких трейнерах подобную опцию — с сохранением координат, с последующим телепортом в сохраненную точку.Сейчас, использовать софтайс, очень уж олдскульно выглядит Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 12 декабря, 2010 Поделиться Опубликовано 12 декабря, 2010 И из этой же области - как сделать спидхак только для игрока? Думаю алгоритмы создания супер джампа и суперскорости должны быть схожи, но я пока тоже не разобрался "Hacking Speed and Size in Lost Planet 2 1.0 DX9" тутор хоть и объясняет как это сделать в данной игре, но по большей части он бесполезен, т.к. все основано на удаче и не более. Но другого тутора по данной теме нет. http://www.multiupload.com/4FV1I36OO2 Ссылка на комментарий Поделиться на другие сайты Поделиться
ArxLex Опубликовано 26 января, 2011 Поделиться Опубликовано 26 января, 2011 Я думаю ты сам сможешь ответить на все вопросы Я бы сделал так:1. Находим адрес координат Z любым удобным способом.2. Находим инструкцию работающую с этой Z координатой.Если инструкция1 работает со всеми координатами, то это на руку.Если нет, то координата Z стоит, обычно, рядом с X, Y и не составит особого труда написать скрипт.3. Создаём такой скрипт1 - инъекция "Сохранение координат в зарегистрированную метку1 из инструкции1 с последующей отменой этой иньекции". Только не уничтожай метку1.5. Создаём скрипт2 - иньекция "Восстановление координат из метки1 с последующей отменой инъекции". Только не уничтожай метку1.6. На первый и второй скрипты вешаем хот-кеи.Если сделать так как я написал, то это избавит от лишних флагов Хех. Я сам лично так и делаю, спасибо за подсказку!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 1 апреля, 2011 Поделиться Опубликовано 1 апреля, 2011 Уважаемый live_4_ever я читал эту статью и даже ее переводил. Но там толком и не сказано что да как. Постараюсь в скором времени опубликовать здесь этот перевод. Может кому-то из вас эта статья поможет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ac1d Опубликовано 24 августа, 2011 Поделиться Опубликовано 24 августа, 2011 Вот такое дело у меня. Нашёл три инструкции. 1 Стою на мосту, заморозил адрес из инстр. при падении меня подкидывает вверх(разбиться могу из-за заморозки плохой) я думаю, что это Z, я нашёл её лазая по лестнице.2 Вторая возвращает меня на место, когда я делаю шаг либо влево либо вправо. Я думаю это X3 Когда я присидаю меня чуть чуть подкидывает вверх, (это точно не Z, потому что стоя/сидя меня бы подкидывало в небо) наверное это Y.Если я всё нашёл правильно, то помогите мне сделать отдельно скрипт сохраняющий координату и восстанавливающий?Z :mov [esi+0000029C],ecxX :mov [ebx],eaxY :mov [ebx+08],edx Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 24 августа, 2011 Поделиться Опубликовано 24 августа, 2011 Izmalkoff, вот когда свой код приведёшь не меньше на 70% написанный для телепорта, тогда тебе скорее всего помогут подсказками. А так с "голыми" инструкциями (да ещё без оригинального кода под инструкциями, названия игры)... тебе можно советовать искать примеры телепорта в Интернете. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ac1d Опубликовано 24 августа, 2011 Поделиться Опубликовано 24 августа, 2011 Я понял. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ac1d Опубликовано 24 августа, 2011 Поделиться Опубликовано 24 августа, 2011 Вот мои предположения (Срипт SERGANTа)[ENABLE] alloc(_newmemX,1024) alloc(_newmemY,1024) alloc(_newmemZ,1024) label(_returnhereX) label(_returnhereY) label(_returnhereZ) label(_originalcodeX) label(_originalcodeY) label(_originalcodeZ) label(_restX) label(_restY) label(_restZ) label(_X) label(_Y) label(_Z) label(_save) label(_teleport) registersymbol(_save) registersymbol(_teleport)//X_newmemX:mov [ebx],eaxpushadcmp [_save],1jne short _restXmov [_save],0mov ecx,3lea edi,[_X]lea esi,[ebx]rep movsd_restX:cmp [_teleport],1jne short _originalcodeXmov [_teleport],0mov ecx,3lea esi,[ebx]lea esi,[_X]rep movsd_originalcodeX: popad mov [ebx],eax jmp _returnhereX//Y_newmemY:mov [ebx+08],edxpushadcmp [_save],1jne short _restYmov [_save],0mov ecx,3lea edi,[_Y]lea esi,[ebx+08]rep movsd_restY:cmp [_teleport],1jne short _originalcodeYmov [_teleport],0mov ecx,3lea esi,[ebx+08]lea esi,[_Y]rep movsd_originalcodeY:popadmov [ebx+08],edxjmp _returnhereY//Z_newmemZ:mov [esi+0000029C],ecxpushadcmp [_save],1jne short _restZmov [_save],0mov ecx,3lea edi,[_Z]lea esi,[esi+0000029C]rep movsd_restZ:cmp [_teleport],1jne short _originalcodeZmov [_teleport],0mov ecx,3lea edi,[esi+0000029C]lea esi,[_Z]rep movsd_originalcodeZ:mov [esi+0000029C],ecxpopadjmp _returnhereZ_save: dd 0 _teleport: dd 0_X: dd 0_Y: dd 0_Z: dd 0 //X jmp _newmemX nop nop nop nop_returnhereX://Y jmp _newmemY nop nop nop nop_returnhereY://Z jmp _newmemZ nop nop nop nop_returnhereZ:Ни результата ни вылета Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения