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

Command and Conquer Renegade (Infinite Ammo) или если сложно найти фильтр в структуре.


Рекомендуемые сообщения

В видео рассказываю, как подобрать фильтр, если его сложно (или невозможно) найти при Анализе структуры.

Скрипт "Infinite Armmo":

Скрытый текст

{ Game   : Game.exe
  Version: 
  Date   : 2016-05-24
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Ammo,Game.exe,D8 1D 74 C6 85 00) // should be unique
aobscan(Ammo1, 8bxx8bxxxxxxxxxx33xx89xxxx83xxxxxx75xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8axxxxxx8bxxxxxx84xx8bxxxxxxxxxx74xx83)
alloc(newmem,$1000)
label(newmem1)
label(code)
label(code1)
label(return)
label(return1)
label(P_Ammo)
registersymbol(P_Ammo)
registersymbol(Ammo)
registersymbol(Ammo1)

newmem:
  mov [P_Ammo],ecx

code:
  fcomp dword ptr [Game.exe+45C674]
  jmp return

newmem1:
  mov edi,[P_Ammo]
  sub edi,4
  cmp ecx,edi
  jne code1
  mov edi,[Game.exe+429478]
  mov [ecx],#100
  xor [ecx],edi

code1:
  mov esi,[ecx]
  mov edi,[Game.exe+429478]
  jmp return1

P_Ammo:
dd 0

Ammo:
  jmp newmem
  db 90
return:

Ammo1:
  jmp newmem1
  db 90 90 90
return1:

[DISABLE]
Ammo:
  db D8 1D 74 C6 85 00
Ammo1:
  db 8B 31 8B 3D 78 94 82 00

unregistersymbol(P_Ammo)
unregistersymbol(Ammo)
unregistersymbol(Ammo1)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Game.exe"+2AF066

"Game.exe"+2AF037: D9 98 BC 05 00 00  -  fstp dword ptr [eax+000005BC]
"Game.exe"+2AF03D: 89 88 C4 05 00 00  -  mov [eax+000005C4],ecx
"Game.exe"+2AF043: D9 98 C0 05 00 00  -  fstp dword ptr [eax+000005C0]
"Game.exe"+2AF049: 8B 0D E0 C1 85 00  -  mov ecx,[Game.exe+45C1E0]
"Game.exe"+2AF04F: E8 CC 76 E8 FF     -  call Game.exe+136720
"Game.exe"+2AF054: 8D 7E 24           -  lea edi,[esi+24]
"Game.exe"+2AF057: 8B CF              -  mov ecx,edi
"Game.exe"+2AF059: E8 22 92 D5 FF     -  call Game.exe+8280
"Game.exe"+2AF05E: 89 44 24 1C        -  mov [esp+1C],eax
"Game.exe"+2AF062: DB 44 24 1C        -  fild dword ptr [esp+1C]
// ---------- INJECTING HERE ----------
"Game.exe"+2AF066: D8 1D 74 C6 85 00  -  fcomp dword ptr [Game.exe+45C674]
// ---------- DONE INJECTING  ----------
"Game.exe"+2AF06C: DF E0              -  fnstsw ax
"Game.exe"+2AF06E: F6 C4 40           -  test ah,40
"Game.exe"+2AF071: 75 1F              -  jne Game.exe+2AF092
"Game.exe"+2AF073: 8B CF              -  mov ecx,edi
"Game.exe"+2AF075: E8 06 92 D5 FF     -  call Game.exe+8280
"Game.exe"+2AF07A: 89 44 24 1C        -  mov [esp+1C],eax
"Game.exe"+2AF07E: A1 88 36 7E 00     -  mov eax,[Game.exe+3E3688]
"Game.exe"+2AF083: DB 44 24 1C        -  fild dword ptr [esp+1C]
"Game.exe"+2AF087: A3 78 C6 85 00     -  mov [Game.exe+45C678],eax
"Game.exe"+2AF08C: D9 1D 74 C6 85 00  -  fstp dword ptr [Game.exe+45C674]
}
{
// ORIGINAL CODE - INJECTION POINT: "Game.exe"+5CBFB

"Game.exe"+5CBE8: 5F                 -  pop edi
"Game.exe"+5CBE9: 5E                 -  pop esi
"Game.exe"+5CBEA: C3                 -  ret
"Game.exe"+5CBEB: 83 E2 03           -  and edx,03
"Game.exe"+5CBEE: 03 C2              -  add eax,edx
"Game.exe"+5CBF0: C1 F8 02           -  sar eax,02
"Game.exe"+5CBF3: 85 C0              -  test eax,eax
"Game.exe"+5CBF5: 7E 17              -  jle Game.exe+5CC0E
"Game.exe"+5CBF7: 8B D6              -  mov edx,esi
"Game.exe"+5CBF9: 2B D1              -  sub edx,ecx
// ---------- INJECTING HERE ----------
"Game.exe"+5CBFB: 8B 31              -  mov esi,[ecx]
"Game.exe"+5CBFD: 8B 3D 38 1E 80 00  -  mov edi,[Game.exe+401E38]
// ---------- DONE INJECTING  ----------
"Game.exe"+5CC03: 33 F7              -  xor esi,edi
"Game.exe"+5CC05: 89 34 0A           -  mov [edx+ecx],esi
"Game.exe"+5CC08: 83 C1 04           -  add ecx,04
"Game.exe"+5CC0B: 48                 -  dec eax
"Game.exe"+5CC0C: 75 ED              -  jne Game.exe+5CBFB
"Game.exe"+5CC0E: 5F                 -  pop edi
"Game.exe"+5CC0F: 5E                 -  pop esi
"Game.exe"+5CC10: C3                 -  ret
"Game.exe"+5CC11: 90                 -  nop
"Game.exe"+5CC12: 90                 -  nop
}

 

Видео:

 

Изменено пользователем Garik66
  • Плюс 3
Ссылка на комментарий
Поделиться на другие сайты

Хороший урок, но во многих играх можно использовать ID, как показано в твоем видео Garik66, он в структуре меняется, я в таком случае делаю так, делаю анализ данной структуры, там стандартно выставляется начальный размер структуры это 4096 я в таком случае выставляю 100000, или 500000, и ID сразу Находится это работает почти во всех играх. Конечно приходится ждать немного, пока структура с таким размером появится.Вот Живой тому пример  mov eax,[rcx+00054055]/////////54055

Изменено пользователем Baracuda
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Baracuda сказал:

я в таком случае выставляю 100000

Для примера, который я привёл и именно для той инструкции, которая временно расшифровывает значения, смысла увеличивать размер структуры нету.

Объясню: 

Под каждую характеристику в этой структуре отводится всего лишь 20 байт, т.е. через каждые 20 байт идёт следующая характеристика. А на этих 20 байтах все значения меняются и поинтеры тоже. Конечно, если пораскрывать поинтеры, то возможно можно будет найти что-нибудь на каком-нибудь уровне, но скорее всего нет.

 

А скрипт, который я написал можно упростить, не привязывая его к основной инструкции, т.к. инструкция, работающая с видимым значением работает гораздо чаще, чем основная.   

Скрипт "Infinite Armmo v.1":

Скрытый текст

{ Game   : Game.exe
  Version: 
  Date   : 2016-05-24
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Ammo,Game.exe,D8 1D 74 C6 85 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(Ammo)

newmem:
  push edi
  mov edi,[Game.exe+429478]
  mov [ecx-04],#100
  xor [ecx-04],edi
  pop edi

code:
  fcomp dword ptr [Game.exe+45C674]
  jmp return

Ammo:
  jmp newmem
  db 90
return:

[DISABLE]
Ammo:
  db D8 1D 74 C6 85 00

unregistersymbol(Ammo)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Game.exe"+2AF066

"Game.exe"+2AF037: D9 98 BC 05 00 00  -  fstp dword ptr [eax+000005BC]
"Game.exe"+2AF03D: 89 88 C4 05 00 00  -  mov [eax+000005C4],ecx
"Game.exe"+2AF043: D9 98 C0 05 00 00  -  fstp dword ptr [eax+000005C0]
"Game.exe"+2AF049: 8B 0D E0 C1 85 00  -  mov ecx,[Game.exe+45C1E0]
"Game.exe"+2AF04F: E8 CC 76 E8 FF     -  call Game.exe+136720
"Game.exe"+2AF054: 8D 7E 24           -  lea edi,[esi+24]
"Game.exe"+2AF057: 8B CF              -  mov ecx,edi
"Game.exe"+2AF059: E8 22 92 D5 FF     -  call Game.exe+8280
"Game.exe"+2AF05E: 89 44 24 1C        -  mov [esp+1C],eax
"Game.exe"+2AF062: DB 44 24 1C        -  fild dword ptr [esp+1C]
// ---------- INJECTING HERE ----------
"Game.exe"+2AF066: D8 1D 74 C6 85 00  -  fcomp dword ptr [Game.exe+45C674]
// ---------- DONE INJECTING  ----------
"Game.exe"+2AF06C: DF E0              -  fnstsw ax
"Game.exe"+2AF06E: F6 C4 40           -  test ah,40
"Game.exe"+2AF071: 75 1F              -  jne Game.exe+2AF092
"Game.exe"+2AF073: 8B CF              -  mov ecx,edi
"Game.exe"+2AF075: E8 06 92 D5 FF     -  call Game.exe+8280
"Game.exe"+2AF07A: 89 44 24 1C        -  mov [esp+1C],eax
"Game.exe"+2AF07E: A1 88 36 7E 00     -  mov eax,[Game.exe+3E3688]
"Game.exe"+2AF083: DB 44 24 1C        -  fild dword ptr [esp+1C]
"Game.exe"+2AF087: A3 78 C6 85 00     -  mov [Game.exe+45C678],eax
"Game.exe"+2AF08C: D9 1D 74 C6 85 00  -  fstp dword ptr [Game.exe+45C674]
}
{
// ORIGINAL CODE - INJECTION POINT: "Game.exe"+5CBFB

"Game.exe"+5CBE8: 5F                 -  pop edi
"Game.exe"+5CBE9: 5E                 -  pop esi
"Game.exe"+5CBEA: C3                 -  ret
"Game.exe"+5CBEB: 83 E2 03           -  and edx,03
"Game.exe"+5CBEE: 03 C2              -  add eax,edx
"Game.exe"+5CBF0: C1 F8 02           -  sar eax,02
"Game.exe"+5CBF3: 85 C0              -  test eax,eax
"Game.exe"+5CBF5: 7E 17              -  jle Game.exe+5CC0E
"Game.exe"+5CBF7: 8B D6              -  mov edx,esi
"Game.exe"+5CBF9: 2B D1              -  sub edx,ecx
// ---------- INJECTING HERE ----------
"Game.exe"+5CBFB: 8B 31              -  mov esi,[ecx]
"Game.exe"+5CBFD: 8B 3D 38 1E 80 00  -  mov edi,[Game.exe+401E38]
// ---------- DONE INJECTING  ----------
"Game.exe"+5CC03: 33 F7              -  xor esi,edi
"Game.exe"+5CC05: 89 34 0A           -  mov [edx+ecx],esi
"Game.exe"+5CC08: 83 C1 04           -  add ecx,04
"Game.exe"+5CC0B: 48                 -  dec eax
"Game.exe"+5CC0C: 75 ED              -  jne Game.exe+5CBFB
"Game.exe"+5CC0E: 5F                 -  pop edi
"Game.exe"+5CC0F: 5E                 -  pop esi
"Game.exe"+5CC10: C3                 -  ret
"Game.exe"+5CC11: 90                 -  nop
"Game.exe"+5CC12: 90                 -  nop
}

 

  Вот этот скрипт работает также, как и первый. 

Ссылка на комментарий
Поделиться на другие сайты

Если ты Garik66 не знал, то ID можно использовать почти любой который не меняется после перезагрузки игры, если ты ищет ID на здоровья, это не значит что он может находится в именно в структуре Здоровья, вот обет все и забывают.

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

 

Я скачаю игру, посмотрю. 

Изменено пользователем Baracuda
Ссылка на комментарий
Поделиться на другие сайты

55 минут назад, Baracuda сказал:

Если ты Garik66 не знал, то ID можно использовать почти любой

:D Знал и очень давно писал для новичков об этом -.> здесь.  

Ссылка на комментарий
Поделиться на другие сайты

Да Garik66, спасибо я читал, самый правильный способ узнать тот ли это ID вы нашли, Это находить например Здоровья игрока, делаешь анализ данной структуры, выставляешь сразу 50000 можно больше выставить размер структуры. Вы находите ID у вас он 5 у врага этот ID 3 после сохраняете, я обычто сохраняю всю структуры в текстовом документе.txt, после не перезагружаете игру 3-4 раза, а перезагружаете её 1 раз и начинаете игру заново. Это самое главное, почему заново потому что при новом старте все данные сбрасываются буду говорить так на заводские, после что бы конкретно убедится что ID на Здоровья который вы нашли правильный, Закрываете игру, и загружаете какие ни будь сохранения, где уже пройдена игра, или пройдена на половину, и тогда всё становится ясным, тот ли ID на Здоровья вы нашли, и только после этого ID на здоровья будет работать на других операционных системах. ВСЕ ТОЖЕ САМОЕ ДЕЛАЕМ И С РЕГИСТРАМИ

Изменено пользователем Baracuda
Ссылка на комментарий
Поделиться на другие сайты

13 минуты назад, Baracuda сказал:

Command & Conquer - Renegade

В личку дал игру - это лицензия и как бы у всех должна работать. У меня работает, так же Игорю давал её и у него работает.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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