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

Garik66

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

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

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

    292

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

  1. Думаю так: [ENABLE]{$LUA} // переключаемся на LUA ..........// код на LUA{$ASM} // возвращаемя на ASM ..........// код на ASM
  2. Жень, это уже нюансы, с которыми Demono50601 ещё предстоит столкнуться. А так как он начинающий скриптёр, то нужно начинать с простого - ломать значения, на которые можно повлиять напрямую в игре, ломать значения, которые в игровом интерфейсе показаны в виде понятных цифр и соответственно использовать в скрипте инструкции, которые перезаписывают значения. Жень, вспомни как сам начинал. Начиная с СЕ 6.4 не нужно проверять каждую инструкцию, с каким количеством адресов она работает, есть опция, позволяет посмотреть это.
  3. Demono50601, если нашёл правильный адрес, попробуй, чтобы не путаться, поставить брейкпоинт не на чтение, а на запись. Инструкций будет гораздо меньше и проще будет понять какую использовать в скрипте.
  4. Demono50601, Не на все значения в игре можно выйти простым отсеиванием. На некоторые, например на которые мы не можем повлиять напрямую, нужно выходить через "Анализ структур", исследование региона памяти. Т.е. вначале находишь то, что найти просто, делаешь "Анализ структур" и смотришь, что там меняется.
  5. afro228offical, из твоего скрина не понятно - шифруется значение или нет. Выложил бы скрин, предполагаемого тобой шифрования, т.е. вот этого: Посмотрели бы. Случаи, как XOR-руют разрабы значения: 1. Используют память для хранения шифрованных значений. В этом случае, более надёжный случай выходить на XORы не через видимое значение, а через поиск ("Неизвестного", тип "4 байта", метод "Изменилось/не изменилось"). В этом случае находим сразу и видимые значения и шифрованные, также появляется возможность написать скрипт без расшифровки значений, особенно, если в коде будут такие операнды (dec. sub. add). 2. Используют регистры (возможно стек) для временного хранения шифрованных значений (особенно если XORируют не через константу, а через переменную). В этом случае, 1 способом мы ничего найти уже не сможем и нужно выходить через видимые значения - метод сложный, здесь помогут знание ассемблера, УДАЧА ,ну и, если разрабы поленились и XOR находится рядом с изменением видимого значения по игровому коду). Пример выхода на шифрованные значения через видимые, как раз в уроке XIPHO. Также посмотри мои видио по шифрованным значениям: 1. 2. И видео Master GH http://gamehacklab.ru/video_lessons/109-issledovanie-i-vzlom-loki-xor-shifrovanie.html
  6. MasterGH, прекрасная статья, по-моему я уже столкнулся со всеми перечисленными тобой случаями, жаль, что раньше не встречал эту статью.
  7. alidin00, я же тебе написал, нужно найти ПРАВИЛЬНЫЕ адреса - адреса не с визуальными значениями, а с реальными. И тогда значения будут меняться.
  8. alidin00, как ищутся значения: 1. Если в игре есть где посмотреть значение, то в начале ищется "Точное значение" - изменили в игре/отсеяли по изменённому значению. Пока не нашли искомый адрес, значение в котором меняется как и в игре. 2. Если после изменения в таблице значения, значение в игре не изменилось, то Вы нашли визуальное значение (т.е. значение для вывода на экран). А реальное значение может быть кодированным (т.е. к значению прибавляется что-то, отнимается и т.д. много способов) , может быть шифрованным (т.е. изменённое с помощью какой-нибудь константы или переменной), может иметь другой тип (например Вы нашли значение тип - 4 байта, а реальное значение во float, ну например в игре Fallout 4 значения SPECIAL). В этих случаях меняется поиск, более качественный (но и более долгий) - поиск "Неизвестного", Тип "ВСЕ", метод изменилось/неизменилось. Вот таким методом Вы найдете адрес, значение в котором будет отличаться от визуального, но при его изменении в СЕ, значение измениться и в игре.
  9. А я вижу впервые - по-моему классно. ЗЫ: вот вроде кто-то ответ нашёл : ЗЫ1: а здесь сам рассказ, по которому зкранизация: http://alex-aka-jj.livejournal.com/66984.html
  10. УПС!!! Вместо упрощения, оказалось ещё сложнее. Это нужно переварить. Ну теперь уже не к спеху. Скрипт в игре (по ссылке) я уже поправил, вылеты из игры оказались не из-за указателей, ну я в теме там объяснил. А к указателям вернёмся при возникновении новой необходимости.
  11. Жень, плюс за новый дизайн - КРАСИВО!!!
  12. Demono50601, у меня вопрос - Сколько тебе лет? Судя по формулировкам - лет 12. Vlad2, я думаю Demono50601 ещё не преступал к написанию скриптов, они берут готовые сигны (сигну, которую нужно найти и сигну, на которую нужно заменить и знают как с помощью СЕ сделать из этого трейнер ) В своё время, пока не вышел на наш форум, я насмотрелся в ТЮБЕ псевдо-уроков от таких малышей. Demono50601, если хочешь поучиться чему-нибудь на форуме, сперва научись сдержанности.
  13. ЗЫ: Кстати забыл написать - выяснил, почему игра вылетала у меня,Dison и у LIRW: Мы делали инъекцию из инструкции на чтение, а на неё есть прыг из различных мест. Так что инъекцию сделал ниже инструкций на запись.
  14. Сделал, теперь без вылетов. 1. Сам скрипт: { Game : game.exe Version: Date : 2016-01-12 Author : Garik66 This script does blah blah blah}[ENABLE]{$LUA}PlaySound(findTableFile([[Activate]])){$ASM}aobscanmodule(INJECT,game.exe,8B 48 08 89 4B 08) // should be uniquealloc(newmem,$1000)label(Fuel)label(code)label(return)label(money)registersymbol(money)label(fuel)registersymbol(fuel)registersymbol(INJECT)newmem: cmp [ebx+08],3 jne code cmp [ebx+18],4 jne code mov ecx,[ebx+10] cmp [ecx+10],656E6F6D jne Fuel cmp byte ptr [ecx+14],79 jne code fld qword ptr [money] fstp qword ptr [ebx] jmp codeFuel: cmp [ecx+10],6C657566 jne code cmp [ecx+14],6C6C6946 jne code cmp [ecx+18],6576654C jne code cmp byte ptr [ecx+1C],6C jne code fld qword ptr [fuel] fstp qword ptr [ebx]code: mov ecx,[eax+08] mov [ebx+08],ecx jmp returnmoney:dq (double)1000000fuel:dq (double)1000INJECT: jmp newmem nopreturn:[DISABLE]{$LUA}PlaySound(findTableFile([[Deactivate]])){$ASM}INJECT: db 8B 48 08 89 4B 08unregistersymbol(money)unregistersymbol(fuel)unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "game.exe"+D65C1"game.exe"+D65A5: 33 FF - xor edi,edi"game.exe"+D65A7: EB 02 - jmp game.exe+D65AB"game.exe"+D65A9: 8B F8 - mov edi,eax"game.exe"+D65AB: 85 FF - test edi,edi"game.exe"+D65AD: 0F 85 D3 00 00 00 - jne game.exe+D6686"game.exe"+D65B3: 8B 44 24 24 - mov eax,[esp+24]"game.exe"+D65B7: 8B 08 - mov ecx,[eax]"game.exe"+D65B9: 89 0B - mov [ebx],ecx"game.exe"+D65BB: 8B 50 04 - mov edx,[eax+04]"game.exe"+D65BE: 89 53 04 - mov [ebx+04],edx// ---------- INJECTING HERE ----------"game.exe"+D65C1: 8B 48 08 - mov ecx,[eax+08]"game.exe"+D65C4: 89 4B 08 - mov [ebx+08],ecx// ---------- DONE INJECTING ----------"game.exe"+D65C7: 83 78 08 04 - cmp dword ptr [eax+08],04"game.exe"+D65CB: 0F 8C E5 00 00 00 - jl game.exe+D66B6"game.exe"+D65D1: 8B 10 - mov edx,[eax]"game.exe"+D65D3: F6 42 05 03 - test byte ptr [edx+05],03"game.exe"+D65D7: 0F 84 D9 00 00 00 - je game.exe+D66B6"game.exe"+D65DD: 8A 45 05 - mov al,[ebp+05]"game.exe"+D65E0: A8 04 - test al,04"game.exe"+D65E2: 0F 84 CE 00 00 00 - je game.exe+D66B6"game.exe"+D65E8: 8B 4C 24 18 - mov ecx,[esp+18]"game.exe"+D65EC: 8B 49 10 - mov ecx,[ecx+10]}
  15. gmz, я тебя не понимаю - для чего мне менять место хука? Скрипт работает нормально, только изредко происходит вылет из игры из-за того (это моё предположение), что по смещению [ebx+10] иногда у адресов работающих с инструкцией нет указателя. В первом посте есть ссылка на тему откуда я для примера взял скрипт (я его чуть-чуть переделал, чтобы не был таким громоздким). Повторю ссылку тык
  16. MasterGH, вот попробовал, как я это понял, убрал лишнее из кода и вставил себе в скрипт: { Game : game.exe Version: Date : 2016-01-11 Author : Garik66 This script does blah blah blah}[ENABLE]{$LUA}PlaySound(findTableFile([[Activate]])){$ASM}aobscanmodule(INJECT,game.exe,8B 48 10 8B B1 BC 00 00 00) // should be uniquealloc(newmem,$1000)label(code)label(Fuel)label(return)label(CheckPointer)label(Handler)label(NoException)registersymbol(INJECT)newmem: mov ecx,[ebx+10] call CheckPointer cmp [ecx+10],656E6F6D jne Fuel cmp byte ptr [ecx+14],79 jne code mov [ebx],00000000 mov [ebx+04],412E8480 jmp codeFuel: cmp [ecx+10],6C657566 jne code cmp [ecx+14],6C6C6946 jne code cmp [ecx+18],6576654C jne code cmp byte ptr [ecx+1C],6C jne code mov [ebx],00000000 mov [ebx+04],407F4000CheckPointer: pushad mov esi,Handler push esi push fs:[0] mov fs:[0],esp mov ecx,[ebx+10] // Код в этом месте будет проверен на исключения mov ecx,[0] // специальная ошибка доступа к адресу Jmp NoExceptionHandler: mov esp,[esp+0x08] pop fs:[0] add esp, 4 popad je code // Код в этом месте будет выполнен, если исключение произойдет Jmp NoExceptionNoException: pop fs:[0] // востанавливаем старое исключение add esp, 0x24 //32+4 retcode: mov ecx,[ebx] mov eax,[ebp+14] jmp returnINJECT+26: jmp newmemreturn:[DISABLE]{$LUA}PlaySound(findTableFile([[Deactivate]])){$ASM}INJECT+26: db 8B 0B 8B 45 14unregistersymbol(FlagAdd)unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "game.exe"+D63D5"game.exe"+D63BB: 83 7B 08 00 - cmp dword ptr [ebx+08],00"game.exe"+D63BF: 75 3A - jne game.exe+D63FB"game.exe"+D63C1: 8B 56 08 - mov edx,[esi+08]"game.exe"+D63C4: 85 D2 - test edx,edx"game.exe"+D63C6: 74 33 - je game.exe+D63FB"game.exe"+D63C8: F6 42 06 01 - test byte ptr [edx+06],01"game.exe"+D63CC: 74 04 - je game.exe+D63D2"game.exe"+D63CE: 33 FF - xor edi,edi"game.exe"+D63D0: EB 21 - jmp game.exe+D63F3"game.exe"+D63D2: 8B 45 08 - mov eax,[ebp+08]// ---------- INJECTING HERE ----------"game.exe"+D63D5: 8B 48 10 - mov ecx,[eax+10]"game.exe"+D63D8: 8B B1 BC 00 00 00 - mov esi,[ecx+000000BC]// ---------- DONE INJECTING ----------"game.exe"+D63DE: E8 6D EB FF FF - call game.exe+D4F50"game.exe"+D63E3: 83 78 08 00 - cmp dword ptr [eax+08],00"game.exe"+D63E7: 75 08 - jne game.exe+D63F1"game.exe"+D63E9: 80 4A 06 01 - or byte ptr [edx+06],01"game.exe"+D63ED: 33 FF - xor edi,edi"game.exe"+D63EF: EB 02 - jmp game.exe+D63F3"game.exe"+D63F1: 8B F8 - mov edi,eax"game.exe"+D63F3: 85 FF - test edi,edi"game.exe"+D63F5: 0F 85 99 00 00 00 - jne game.exe+D6494"game.exe"+D63FB: 8B 0B - mov ecx,[ebx]} mov ecx,[ebx+10] // Код в этом месте будет проверен на исключенияje code // Код в этом месте будет выполнен, если исключение произойдетcmp [ecx+10],656E6F6D // вот сюда нужно вернуться, если в ecx pointer. jne Fuel
  17. MasterGH, хочу попробовать 2., но чёй-то очень сложновато для меня получилось, пока ни чего не понимаю - как применить это к моему скрипту (да и вместо сокращения скрипта -скрипт удлиняется). Ну и так ещё, мне визуально показалось, что код у тебя не совсем верен, допустим вот этот участок: Jmp NoExceptionNoException: pop fs:[0] // востанавливаем старое исключение add esp, 0x24 //32+4 retразве он не зациклин сам на себя?
  18. gmz, так проблема в том я не знаю точно, что там проскакивает (слишком много адресов нужно отсеить - их там по 2000 адресов наверное) 0 и указатели, или ещё что-то. А cmp ecx,0 - это я сам сделал как бы частичный отсев не указателей. Но ведь сам СЕ как-то определяет указатель или нет находится по смещению (Хотя бы взять "Анализ структур" или "Сканер указателей"), значит и мы по идее можем определить, что там в ECX в каждый момент времени. gmz, кстати посмотри эту тему, как мне кажется это решение, но как его приспособить к моему скрипту не знаю, если бы переделать в LUA хотя бы, а лучше в ассемблер.
  19. MasterGH, либо я тебя совсем не понимаю, либо (у меня такое ощущение), что я плохо объяснил и ты меня не понял. Чем мне может помочь заморозка указателя в моём скрипте? Мне нужно убедиться, что в ECX, будет лежать указатель и соответственно в [ECX+10] и т.д. будет лежать какое-то значение и соответственно не будет вылета из игры при работе инструкции CMP [ECX+10],..... Ну у тебя в примере, ты вроде правильно пишешь: lds esi,[eax] //<<< здесь нужна обработка исключения в случае если по eax нет указателя на строку
  20. Да Жень, если мастера помогут в сопутствующей теме, то я конечно этот скрипт переделаю в более компактный и правильный вид и здесь выложу. (Люблю, когда в каждой теме, есть ответ).
  21. Чёй-то пока в мозгу не укладывается. Не могу переварить. Ладно подождём MasterGH и Xipho - основных моих ШИФУ, помогут понять - как это готовить.
  22. partoftheworlD, пока не уловил, как это использовать, если сможешь, пример на моём скрипте сделай ПЖЛСТа
  23. Если так, то очень жаль. А на LUA? A1t0r, если сделаешь такую проверку на LUA - заранее БОЛЬШОЙ, БОЛЬШОЙ СПАСЫБ!!!
×
×
  • Создать...

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

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