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

lamalamaz

Пользователи+
  • Постов

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

  • Посещение

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

    7

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

  1. Поправлю скрипт, наверное смещение динамическое(то есть значение по смещению) Я не выходил на инструкцию урона, я сам написал скрипт рассчитывающий урон то есть. mov [esi],ecx Инструкция на запись жизней где [esi] предыдущее значение жизни ecx новое значение жизней mov [lbl],ecx //новое значение в метку fild dword ptr [esi] загружаем старое значение fisub dword ptr [lbl] отнимаем новое значение fistp dword ptr [dam] получаем урон fild dword ptr [dam] загружаем урон fimul dword ptr [mn] умножаем на множитель fistp dword ptr [dam] полученный урон умноженный на множитель fild dword ptr [lbl] загружаем новое значение жизней fisub dword ptr [dam] отнимаем урон умноженный на множитель fistp dword ptr [lbl] получаем значение жизней уже с вычетом урона с множителем mov ecx,[lbl] загружаем полученное значение по адресу значения новой жизни mov [esi],ecx оригинальная инструкция В принципе можно было сделать проще беря значение из стека, но метод описаный выше универсальный, то есть подходит для любой игры. Попробуй этот скрипт(что странно смещения судя по скриншотам одинаковые,у меня скрипт работает,но попробуй измененный скрипт). EoCApp2.CT
  2. Что именно не работает? Множитель урона отображается? З.Ы. Множитель урона можно менять на лету в таблице,по умолчанию стоит 1. Поставь 400(к примеру) и проверь должно всех с 1 удара выносить.
  3. Вот скрипт на множитель урона если что внутри не будет понятно напиши тут(заодно проверь работоспособность скрипта). EoCApp.CT
  4. На запись бряк своих жизней еще сделай,стек посмотреть.То что адрес выглядит именно так я и не сомневался. Мне стек нужен на запись адреса твоих жизней.
  5. Инструкция только с адресом врагов работает? И надо отталкиваться с инструкции которая пишет или читает а не сравнивает. Можешь сделать скрин доступа на адрес жизней?
  6. А можно полную картину на доступ к адресу? И скриншот стека. По идее можно на прямую работать со стеком. То есть создать метку и работать с float. Например Fld dword ptr [esp+24] fadd dword ptr [labla] fstp dword ptr [esp+24] labla: dd (float)0.02 то есть по идее таймер замрет на месте. К примеру в игре Two worlds2 при бряке на отнимание жизней(игрока или мобов в стеке прописывается урон) То есть fild dword ptr [esp+4] //загружаем в барабан урон(целое значение) fimul dword ptr [mulls] //умножаем на наш множитель(прописываем вручную) fistp dword ptr [esp+4] //выгружаем из барабана в esp+4 полученное значение mov eax,[ecx+000001C0] //оригинальная инструкция Дополню что инструкция идет на доступ, потому что "mov [ecx+000001C0],eax" ,корорая пишет, урон уже будет посчитан. Поэтому со стеком желательно работать с инструкциями на доступ.
  7. После анализа написал новый код { Game : pw_defenders.exe Version: Date : 2015-09-24 Author : alez This script does blah blah blah}[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat aobscan(INJECT,89 86 90 00 00 00 8B 46 7C) // should be uniquealloc(newmem,$1000)label(return)newmem: mov [ebx+20],412E847E push eax mov eax,[ebx+20] xor eax,[ebx+38] mov [ebx+20],eax pop eax mov [esi+00000090],eax jmp returnINJECT: jmp newmem nopreturn:registersymbol(INJECT)[DISABLE]//code from here till the end of the code will be used to disable the cheatINJECT: db 89 86 90 00 00 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 0739154407391523: 3D 09 00 00 00 - cmp eax,0000000907391528: 75 20 - jne 0739154A0739152A: 83 EC 0C - sub esp,0C0739152D: 53 - push ebx0739152E: 39 1B - cmp [ebx],ebx07391530: E8 D3 4E D2 FF - call 070B640807391535: 83 C4 10 - add esp,1007391538: DD 5D D0 - fstp qword ptr [ebp-30]0739153B: F2 0F 10 45 D0 - movsd xmm0,[ebp-30]07391540: F2 0F 2C C0 - cvttsd2si eax,xmm0// ---------- INJECTING HERE ----------07391544: 89 86 90 00 00 00 - mov [esi+00000090],eax// ---------- DONE INJECTING ----------0739154A: 8B 46 7C - mov eax,[esi+7C]0739154D: 83 EC 08 - sub esp,0807391550: 50 - push eax07391551: 6A 00 - push 0007391553: E8 C0 3F CB FF - call 0704551807391558: 83 C4 10 - add esp,100739155B: 85 C0 - test eax,eax0739155D: 74 2A - je 073915890739155F: 8B 43 14 - mov eax,[ebx+14]07391562: 3D 08 00 00 00 - cmp eax,00000008
  8. Да игра жестокая,все перешифровано и без xor там настолько запутано что голову сломаешь но скрипт на бесконечные деньги я написал, чтобы активировать надо просто башню построить. { Game : pw_defenders.exe Version: Date : 2015-09-18 Author : alez This script does blah blah blah}[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheat aobscan(INJECT,8B 00 83 EC 08 51 50 E8) // should be uniquealloc(newmem,$1000)label(ss)label(orig)label(return)newmem:cmp [esp+CC],1005EF0Dje ssjmp origss:push ebxmov ebx,[eax+20]mov [eax],ebxpop ebx mov eax,[eax] sub esp,08 jmp returnorig: mov eax,[eax] sub esp,08 jmp returnINJECT: jmp newmemreturn:registersymbol(INJECT)[DISABLE]//code from here till the end of the code will be used to disable the cheatINJECT: db 8B 00 83 EC 08unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: 07095ECC07095EB2: C9 - leave 07095EB3: C3 - ret 07095EB4: 68 70 2C D5 14 - push 14D52C7007095EB9: E9 6A A1 5B FB - jmp 0265002807095EBE: 00 00 - add [eax],al07095EC0: 55 - push ebp07095EC1: 8B EC - mov ebp,esp07095EC3: 83 EC 28 - sub esp,2807095EC6: 8B 45 08 - mov eax,[ebp+08]07095EC9: 8B 48 04 - mov ecx,[eax+04]// ---------- INJECTING HERE ----------07095ECC: 8B 00 - mov eax,[eax]07095ECE: 83 EC 08 - sub esp,08// ---------- DONE INJECTING ----------07095ED1: 51 - push ecx07095ED2: 50 - push eax07095ED3: E8 18 00 00 00 - call 07095EF007095ED8: 83 C4 10 - add esp,1007095EDB: C9 - leave 07095EDC: C3 - ret 07095EDD: 00 00 - add [eax],al07095EDF: 00 68 A8 - add [eax-58],ch07095EE2: 2C D5 - sub al,-2B07095EE4: 14 E9 - adc al,-17
  9. На некоторых уровнях OHK не работает [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem2,2048)label(returnhere2)label(originalcode2)label(exit2)label(player)newmem2: //this is allocated memory, you have read,write,execute access//place your code hereoriginalcode2:mov [player],edimov [edi+00000094],ecxexit2:jmp returnhere2player:dd 0"VIVISECTOR.EXE"+D8639:jmp newmem2nopreturnhere2:alloc(newmem,2048)label(returnhere)label(orig)label(ss)newmem: //this is allocated memory, you have read,write,execute accesspush eaxmov eax,[player]cmp eax,[esp+424]pop eaxje ssjmp origss:sub edx,(float)400mov [edi+000013DC],edxjmp returnhereorig:mov [edi+000013DC],edxjmp returnhere"VIVISECTOR.EXE"+D8323:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem2)"VIVISECTOR.EXE"+D8639:mov [edi+00000094],ecx//Alt: db 89 8F 94 00 00 00dealloc(newmem)"VIVISECTOR.EXE"+D8323:mov [edi+000013DC],edx//Alt: db 89 97 DC 13 00 00
  10. Как раз твой случай, смотри внимательнее. http://gamehacklab.ru/video_lessons/125-vzlom-igr-ot-a-do-ya-11-vzlom-shifrovannyh-znacheniy.html
  11. Wallhack фигня, лучше ESP.. Ищещь координаты врага x,y,z рисуешь квадрат и такой метод через память а не через отрисовку работает лучше.
  12. Всех с праздниками Геймхаклаберы. Написал скрипт на Half-life2 на god+1hit через сравнивание стека. Помогите его допилить(упростить) и убрать все лишнее потом выложу в нормальном варианте в трейнеры. [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem2,200)label(returnhere2)label(originalcode2)label(exit2)label(mycoord)label(mycoord2)newmem2: //this is allocated memory, you have read,write,execute access//place your code hereoriginalcode2:push esimov esi,[eax+00000030] mov [mycoord],esi //сохраняем координату Z инструкция работает только с игрокомmov [mycoord2],esi //сохраняем координату Z инструкция работает только с игрокомpop esicmp dword ptr [eax+000000E0],00exit2:jmp returnhere2mycoord2:dd 0mycoord:dd 0"server.dll"+16DA8A:jmp newmem2nopnopreturnhere2:alloc(newmem,200)label(returnhere)label(orig)label(ss)label(essi)label(damag)label(tt1)label(stack)label(damag)label(save)label(plsave)label(player)newmem: //this is allocated memory, you have read,write,execute accesspush edxpush eaxmov edx,[esp+18] //при уроне по врагу или по мне в [esp+10] лежит координата(z-10) откуда наностися уронmov [stack],edxfld dword ptr [stack]fsub dword ptr [player]fstp dword ptr [plsave]mov eax,[plsave]cmp [mycoord],eax //сравниваем координату z при уроне с координатой z игрокаpop edxpop eaxje ssjmp origss:fld dword ptr [esp+20] //тут хранится дамаг во флоате(сами жизни целое 4 байта)fmul dword ptr [damag] //умножаем на наш множительfistp dword ptr [save] //выгружаем целое значениеsub esi,[save] //отнимаем наш урон от жизней врагаmov [edi],esipop edimov eax,00000001jmp returnhereorig:mov [edi],esipop edimov eax,00000001jmp returnherett1:dd (float)0stack:dd 0plsave:dd 0save:dd 0damag:dd (float)10essi:dd 0player:dd (float)-10"server.dll"+D8193:jmp newmemnopnopnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem2)"server.dll"+16DA8A:cmp dword ptr [eax+000000E0],00//Alt: db 83 B8 E0 00 00 00 00dealloc(newmem)"server.dll"+D8193:mov [edi],esipop edimov eax,00000001//Alt: db 89 37 5F B8 01 00 00 00
  13. мне бы логику понять, Xipho ты многому меня научил, помоги...
  14. Анализировал, закономерности есть вот только те адреса у которых есть некая закономерность обращаются к одной инструкции которая работает с 100500 адресами, поинтер не дает ничего . Принцип был такой инструкция [ecx+04],edx работает с over 9000 адресов(срабатывает при нанесении урона) ищем адрес жизней,нашли, ставим бряк на запись на адрес. Смотрим стек, путем анализа выясняется что по смещению [esp+14] находится некий адрес(или указатель) который указывает по кому наносится урон. То есть если написать фильтр newmem: cmp [esp+14],[наш адрес] je player jmp original code то фильтр сработает и после прыжка на player останется только один адрес(наших жизней). Но вот только разобраться с адресом [наш адрес] не могу, так как инструкция отвечающая за него работает с 100500 адресами опять же.... Я так понял что там огромное разветвление(огромнейшее) путем анализа кода. Как в этой куче мусора(из адресов) найти что либо не представляю. Я все это к чему, может быть тот кому интересно скачает Painkiller поломаем вместе? Взломал очень много игр(и painkiller тоже взломал). Но вот логику painkiller понять не могу. Давайте взломаем вместе . Вот моря наработка скрипт на god+1hit(работает на всех картах и со всеми боссами) [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(orig)label(cont)label(cont2)label(ss)label(ss2)label(ppz)label(ppz2)newmem: //this is allocated memory, you have read,write,execute accessmov [ppz],edimov [ppz2],ediadd [ppz],60cmp [ppz],eaxje cont //глобальный фильтр на отсев игрока и враговadd [ppz2],58cmp [ppz2],eaxje cont2jmp origcont:cmp esi,106je sscmp esi,FE //локальный фильтр отделения врагов от игрокаje ss2jmp origcont2:cmp esi,106je ss2cmp esi,FD //локальный фильтр отделения боссов от игрокаje ss2jmp origss:mov [ebx+04],(float)100pop ebxpop ecxjmp returnheress2:mov [ebx+04],0pop ebxpop ecxjmp returnhereorig:mov [ebx+04],edxpop ebxpop ecxjmp returnhereppz:dd 0ppz2:dd 0"Engine.dll"+1510F3:jmp newmemreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"Engine.dll"+1510F3:mov [ebx+04],edxpop ebxpop ecx//Alt: db 89 53 04 5B 59
  15. Здравствуйте ребята! Тут встал вопрос как выйти на указатель жизней в игре Painkiller. Коротко о движке Painengine это головная боль Так вот искал указатель через автопоиск указателей. 5 уровней ничего не дало 10 уровней сожрал все место на диске и просил еще(поиск длился 27000 секунд) Поиск в ручную обламал меня сразу. то есть инструкция [ecx+04],edx смещение 4 ищем значение ecx, и тут результат 0. Есть иные методы в таких ситуациях?
  16. Я к тому что если адреса похожи то это не значит что это одна структура(исключая конечно если адреса совпадают по всем байтам кроме последних). То есть в случае 31DB1737 и 3BCD21A4. Никакой зависимости одного адреса от другого нет. И начало структуры значения по адресу 31DB1737 может находится где угодно, надо анализировать стек а не только регистры.
  17. А с чего вы взяли что "начало структуры должно быть рядом?" Например здоровье может быть в подструктуре а выход на подструктуру приходит через указатель. Например игра Risen2 начало структуры игрока 6DBA3020 а адрес здоровья 00802345. Что то подобное 0080XXXX вы не найдете ни в стеке ни в регистрах.(исключая непосредственное значение адреса жизней). То же самое со всеми параметрами будь то координаты или патроны или скорость атаки логика очень схожа. То есть структура обращяется к подструктуре1(указатель), подструктура1 обращается к подструктуре2(указатель) и потом уже в подструктуре2 по смещению 14 лежит адрес здоровья. То есть в мое случае 00802345-14 это не начало структур,а начало подструктуры. Надо анализировать стек чтобы точно выйти на начало структуры. В стеке обычно или в регистрах(что реже) указывается адрес начало самой структуры. Я нанес урон по врагу, ставил бряк на жизни врага. В стеке видно Кто нанес урон,чем,сколько урона с каких координат по кому нанес урон. Так вот адрес КТО нанес урон как раз начало структуры игрока которая даааалеко от адреса здоровья.(который хранится в подструктуре). Тоже самое с игрой Painkiller,хотя там логика иная но суть впринципе та же.
  18. Ну незнаю Fallout3 лень качать,но есть Oblivion движки у них одинаковые. Так вот в обливионе невидимость находится так. 3 шмотки с хамельоном по 10 проц каждая одел шмотку увеличилось вторую увеличилось снял уменьшилось в итоге нашло флоат значение где 0-нет невидимости 100 полная невидимость(модельки игрока даже не видно) в Fallout абсолютно тоже самое, ибо движки идентичные(инструкции отвечающие за урон, за смещение от начало структур игрока одинаковые Oblivion и Fallout3). Вот пример инструкции жизней игрока oblivion fld dword ptr [esi+00000444] esi начало нашей структуры 444 смещение до адреса жизней(в Fallout3 так же только смещение чуть другое) вот инструкция отвечающая за постоянные эффекты на игроке. fld dword ptr [esi+edi*4+00000204] esi начало структуры,edi - интедефикатор эффекта и 204 смещение до нужного адреса. В моем случае хамельон был 2E То есть [esi+000002BC] адрес невидимости или на смещение 188 ближе к началу структуры от смещение жизней игрока То есть все постоянные эффекты лежать в структуре игрока P.S. Если будешь искать жизни игрока то 0- сто процентов То есть надо искать если получил урон то значение увеличилось, быстро выйдешь на структуру.
  19. в Fallout есть степень невидимости то есть какая то шкала где 0 нет невидимости 100 полностью невидим. Вариант искать с предметами дающие разное количество процентов невидимости. И искать по методу увеличилось-уменьшилось-не изменилось.
  20. Вам что конкретно нужно сделать? Отсеять лишние адреса?
  21. а зачем в ebx ковырятся? то есть по вашему логика фильтра получается такая значение по адресу [ebx] то есть в вашем случае [203D47E4] равно d84. То есть по адресу лежит ЗНАЧЕНИЕ d84. Надо сравнивать значения а не смещения. К примеру. Вот ваша инструкция fld dword ptr [esi+04] анализируем [esi+04] = [203E7F90+4] то есть адрес по нему некое значение. где 203E7F90=esi=базовый адрес этой инструкции +04 смещение от базового адреса то есть 203E7F94 в инструкции типа [esx+ebx] тут как раз в регистре ebx хранится смещение и поэтому по нему можно писать фильтр. А то что вы понаписали сверху я вообще не вкурил...
  22. По поводу сокращений и компактности это не ко мне. Я сам люблю все расписывать чтобы мне было нагляднее. вот пример моего кода который можно сократить в разы, но тогда читабельность(лично для меня) упадет во много раз. [ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(orig)label(orig2)label(orig3)label(orig4)label(orig5)label(orig6)label(orig7)label(ss)label(zed)newmem: //this is allocated memory, you have read,write,execute accesscmp [ecx+00000148],2je ssjmp origss:mov dx,[esp+04]push axmov ax,[ecx+000007F6]sub ax,dxmov [zed],dxsub [zed],axsub [zed],axsub [zed],axsub [zed],axsub [zed],axsub [zed],axcmp word ptr [zed],1jle orig2mov dx,[zed]pop axjmp returnhereorig:mov dx,[esp+04]jmp returnhereorig2:mov [zed],dxsub [zed],axsub [zed],axsub [zed],axsub [zed],axsub [zed],axcmp word ptr [zed],1jle orig3mov dx,[zed]pop axjmp returnhereorig3:mov [zed],dxsub [zed],axsub [zed],axsub [zed],axsub [zed],axcmp word ptr [zed],1jle orig4mov dx,[zed]pop axjmp returnhereorig4:mov [zed],dxsub [zed],axsub [zed],axsub [zed],axcmp word ptr [zed],1jle orig5mov dx,[zed]pop axjmp returnhereorig5:mov [zed],dxsub [zed],axsub [zed],axcmp word ptr [zed],1jle orig6mov dx,[zed]pop axjmp returnhereorig6:mov [zed],dxsub [zed],axcmp word ptr [zed],1jle orig7mov dx,[zed]pop axjmp returnhereorig7:pop axjmp returnherezed:dd 0"Freedom.exe"+9FCB0:jmp newmemreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"Freedom.exe"+9FCB0:mov dx,[esp+04]//Alt: db 66 8B 54 24 04
  23. Автоасемблер и сам lua разные вещи. Автоасемблер это инжектор в код программы своего кода... То есть надо отталкиваться от lua и приходить к ассемблерным вставкам а не наоборот отталкиваться от инжектора и приходить к вставкам lua. Придется подучить Lua благо не сложный язык.
  24. По поводу скрипта, это с форума cheat engine. Вот темка со скриптом покопайся может быть осенит как что делать. http://forum.cheatengine.org/viewtopic.php?p=5387584
  25. вот alloc(newmem,64) label(fVATSDistanceFactor) registerSymbol(fVATSDistanceFactor) Fallout3.exe+183436: jmp newmem nop newmem: fld dword ptr [fVATSDistanceFactor] jmp Fallout3.exe+18343C fVATSDistanceFactor: dd (float)0.0001 [DISABLE] dealloc(newmem) dealloc(fVATSDistanceFactor) Fallout3.exe+183436: fld dword ptr [Fallout3.exe+B60EE8]
×
×
  • Создать...

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

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