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

Уникальный массив байт в Cheat Engine


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

Всем привет!

Столкнулся с интересной проблемой.

Есть такая старенькая игрушка "Гарри Поттер и Философский камень" =)

Пытался сломать значение бобов в этой игрушке и получил в итоге:

INJECT,Core.dll,ОШИБКА: Не удалось найти уникальный массив байт. Опробованный код "8B 08 89 0A C2 08 00"

Насколько я понимаю, CE требуется уникальный массив байт, он же AoB.

Пытался добавить вручную байт, получилось что-то вроде этого:

aobscanmodule(INJECT,Core.dll,"8B 54 24 04 8B 08 89 0A C2 08 00") // should be unique

Всё равно отказывается работать. Как таки получить уникальный массив байт?

 

Весь текст скрипта полностью:

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

{ Game   : game.exe
  Version: 
  Date   : 2017-04-24
  Author : SergBrNord

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(INJECT,Core.dll,ОШИБКА: Не удалось найти уникальный массив байт. Опробованный код "8B 08 89 0A C2 08 00") // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  mov ecx,[eax]
  mov [edx],ecx
  ret 0008
  jmp return

INJECT+6380DA8:
  jmp newmem
  nop
  nop
return:
registersymbol(INJECT)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT+6380DA8:
  db 8B 08 89 0A C2 08 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Core.dll"+6CF40

"Core.dll"+6CF24: 8B 54 24 04           -  mov edx,[esp+04]
"Core.dll"+6CF28: 8B 08                 -  mov ecx,[eax]
"Core.dll"+6CF2A: 89 0A                 -  mov [edx],ecx
"Core.dll"+6CF2C: C2 08 00              -  ret 0008
"Core.dll"+6CF2F: 90                    -  nop 
"Core.dll"+6CF30: 8B 49 34              -  mov ecx,[ecx+34]
"Core.dll"+6CF33: 83 F9 01              -  cmp ecx,01
"Core.dll"+6CF36: 75 0F                 -  jne Core.dll+6CF47
"Core.dll"+6CF38: 8B 44 24 08           -  mov eax,[esp+08]
"Core.dll"+6CF3C: 8B 54 24 04           -  mov edx,[esp+04]
// ---------- INJECTING HERE ----------
"Core.dll"+6CF40: 8B 08                 -  mov ecx,[eax]
"Core.dll"+6CF42: 89 0A                 -  mov [edx],ecx
"Core.dll"+6CF44: C2 08 00              -  ret 0008
// ---------- DONE INJECTING  ----------
"Core.dll"+6CF47: 85 C9                 -  test ecx,ecx
"Core.dll"+6CF49: 7E 0E                 -  jle Core.dll+6CF59
"Core.dll"+6CF4B: 56                    -  push esi
"Core.dll"+6CF4C: 8B 74 24 0C           -  mov esi,[esp+0C]
"Core.dll"+6CF50: 57                    -  push edi
"Core.dll"+6CF51: 8B 7C 24 0C           -  mov edi,[esp+0C]
"Core.dll"+6CF55: F3 A5                 - repe  movsd 
"Core.dll"+6CF57: 5F                    -  pop edi
"Core.dll"+6CF58: 5E                    -  pop esi
"Core.dll"+6CF59: C2 08 00              -  ret 0008
}

 

 

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

12 минуты назад, SergBrNord сказал:

Всем привет!

AA Maker скрипт или ручками.
Советую набить руку в этом деле ибо не всегда получится использовать каждый байт.
Пример твоего AOB ("8B 54 24 XX 8B 08 89 XX XX XX XX") что то типа такого.
Почему стоит набить руку и писать в подобном виде? Потому что есть игры в которых возможно часть кода поменяется.
Пример
xor eax,FFFFFFFF ("QW ER TY UI OP")
а потом бац
xor eax,FFFFFFF1 ("QW ER TY UI GG")

Надеюсь ясно \:D/

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

8 минут назад, what228 сказал:

AA Maker скрипт или ручками.
Советую набить руку в этом деле ибо не всегда получится использовать каждый байт.
Пример твоего AOB ("8B 54 24 XX 8B 08 89 XX XX XX XX") что то типа такого.
Почему стоит набить руку и писать в подобном виде? Потому что есть игры в которых возможно часть кода поменяется.
Пример
xor eax,FFFFFFFF ("QW ER TY UI OP")
а потом бац
xor eax,FFFFFFF1 ("QW ER TY UI GG")

Надеюсь ясно \:D/

Достаточно явно написано.

Но мне нужно пояснение. Я сейчас читаю параллельно статью Ридиана с форума CE. У него есть такой пример:

14inz0x.jpg

 

Я предполагал, что убираются одинаковые группы байт. Но глянул чуть подробнее — а там совсем не одинаковые группы байт. Т.е. идёт замена непосредственно адресов, которые используются в коде. Но у меня такого нет.

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

37 минуты назад, SergBrNord сказал:

Всё равно отказывается работать. Как таки получить уникальный массив байт?

В ручную. Скопируй примерное количество байт - штук 20 к примеру и выбрав в СЕ в поиске "Массив байт" проверить их... Не забыв кубик поставить - копируемая при записи. Я просто что заметил - если СЕ не находит рядом в районе + - 20 байт от нужного места нужный сигнатуры, а не находит он из за повтора байт (где то ещо подобное есть) то он выдаёт подобную ошибку.  

Вот после как найдешь нужные байты в поиске массива - погляди между ними разницу. Вот эта разница и будет отличием уникальных байт. 

Я не так давно для Gta sa +150 байт выше брал :) ну такие совпадения были. И разница была между ними только в джампе в 1 байте. В одном месте прыжок был + 3 а в другом уже более.. Вот это и была разница в сигнатуре. Не окажись этого джампа - пришлось бы больше байт брать и сверять уже. Надо найти в общем разницу совпадающими сигнатурами. 

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

12 минуты назад, SergBrNord сказал:

Достаточно явно написано.

Убираются части которые могут смениться оставляет он такие вещи как mov \ movsx \ sub и eax \ ecx \ ebp и word ptr
Но легче проверить через поиск в CE и там уже убирать не нужные части ( повторяющиеся ) и оставлять лишь уникальные по отношению к другим найденным.

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

10 минуту назад, LIRW сказал:

В ручную. Скопируй примерное количество байт - штук 20 к примеру и выбрав в СЕ в поиске "Массив байт" проверить их... Не забыв кубик поставить - копируемая при записи. Я просто что заметил - если СЕ не находит рядом в районе + - 20 байт от нужного места нужный сигнатуры, а не находит он из за повтора байт (где то ещо подобное есть) то он выдаёт подобную ошибку.  

Вот после как найдешь нужные байты в поиске массива - погляди между ними разницу. Вот эта разница и будет отличием уникальных байт.

 

Попробовал поиском по массиву - 0 результатов, хотя AoB Scan выдаёт цифру в 4 совпадения.

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

4 минуты назад, SergBrNord сказал:

Попробовал поиском по массиву - 0 результатов, хотя AoB Scan выдаёт цифру в 4 совпадения.

Вот и посмотри эти 4 совпадения и код рядом. В чем то да они отличаются.. Не много по выше к примеру какие то байты другие. Это видеть самому надо - я тут уже не помогу.  Чем то, да отличаются они... Как и дописал выше о GTA я вот +150 байт брал выше.... Ну просто код был одинаковый и отличие было вот +150 только в джампе. Погляди что там рядом и гляди найдешь отличие...  

Но делаешь ты на СЕ видать - то тебе и плагин в принципе пойдет выше описанный. Выдели там байт 50 и сгенерировав паттрен с плагине - попробуй его в массиве на уникальность. 

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

51 минуту назад, SergBrNord сказал:

Как таки получить уникальный массив байт?

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

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

1 минуту назад, Garik66 сказал:

Сегодня уже примерно такой же вопрос задавали

Игорь если взглянуть на код в отладчике - то судя по нему в игре нет определенного модуля на сканирование. А этот плагин бестолковый на таких играх - не работает он на подобных юнити движках.

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

Только что, LIRW сказал:

Игорь если взглянуть на код в отладчике - то судя по нему в игре нет определенного модуля на сканирование. А этот плагин бестолковый на таких играх - не работает он на подобных юнити движках.

А может ты полностью прочтёшь сообщение. и в ссылках тоже.:D

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

2 минуты назад, Garik66 сказал:

А может ты полностью прочтёшь сообщение. и в ссылках тоже.:D

Читал я... Про байты думаю он и сам знает какие брать... Не даром он скрин показал с пропусками... А более там кроме плагина и нет не чего в той теме... Да ну и ладно - не будем спамить.. А я просто уже привык к юнити - постоянно на нем только и делал в последнее время трейнеры.  

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

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

А более там кроме плагина и нет не чего в той теме...

Нужно читать внимательно, а не бегло, если уж пишешь в теме. Про плагин там практически ничего, так как плагин не работал на Моде для Дьябло, а все сигны я делал вручную и объяснил как.

5 часов назад, Garik66 сказал:

Нужно брать только байты опкодов (типа MOV, ADD и т.д.) все остальные байты заменять XX. И проверять после замены XX на уникальность сигнатуру, если не уникальная - удлиняешь дальше.

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

Вот из-за этого та моя старая табличка оказалась такой долго живущей. 

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

12 часа назад, SergBrNord сказал:

Есть такая старенькая игрушка "Гарри Поттер и Философский камень" =)

Качнул версию -- Релиз группы: R.G.Creative -- Автор репака: K0RW1N

12 часа назад, SergBrNord сказал:

Как таки получить уникальный массив байт?

Плагин или вручную.

11 час назад, LIRW сказал:

А этот плагин бестолковый на таких играх - не работает он на подобных юнити движках.

Вроде сработал, вот он что дал:

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

{ Game   : HP.exe
  Version: 1.0
  Date   : 04-25-17
  Author : Garik66
  This script does blah blah blah
  
  Make by aamaker Lua plagin :)
  Link - http://forum.gamehacklab.ru/index.php?/files/file/329-ce-plugin-aa-maker/
}
[ENABLE]
aobscanmodule(Primer,Core.FRegistryObjectInfo::FRegistryObjectInfo+69899,8bxx89xxc2xxxx85xx7exxxx8bxxxxxxxx8bxxxxxxf3xxxxxxc2xxxxxxxxxxxx8bxxxxxx85xx74xx8bxxxxxx8bxxxx33xx8bxx3bxxxx0f94xx8bxxc2xxxx8bxxxxxxxx33xx33xx8bxx3bxxxx0f94xx8bxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxx6a)
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(Primer)

newmem:

code:
	
	mov ecx,[eax]
	mov [edx],ecx
	ret 0008
	jmp return

Primer:
	jmp newmem
	nop
	nop
return:

[DISABLE]
Primer:
	db 8B 08 89 0A C2 08 00

unregistersymbol(Primer)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Core.FRegistryObjectInfo::FRegistryObjectInfo+68FED

Core.FRegistryObjectInfo::FRegistryObjectInfo+68FD7: 8B 5D 08  - mov ebx,[ebp+08]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDA: 0FAF C3  - imul eax,ebx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDD: 8B 56 48  - mov edx,[esi+48]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE0: 03 C2  - add eax,edx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE2: 3B F9  - cmp edi,ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE4: 74 03 - je 1016C690
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE6: 8D 0C 38   - lea ecx,[eax+edi]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE9: 8B 16  - mov edx,[esi]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEB: 51 - push ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEC: 8B 4D 10  - mov ecx,[ebp+10]
// ---------- INJECTING HERE ----------
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEF: 03 C1  - add eax,ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF1: 8B CE  - mov ecx,esi
// ---------- DONE INJECTING  ----------
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF3: 50 - push eax
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF4: FF 52 70  - call dword ptr [edx+70]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF7: 85 C0  - test eax,eax
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF9: 74 18 - je 1016C6BA
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFB: 33 C0  - xor eax,eax
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFD: 8B 4D F4  - mov ecx,[ebp-0C]
Core.FRegistryObjectInfo::FRegistryObjectInfo+69000: 64 89 0D 00000000  - mov fs:[00000000],ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+69007: 5F - pop edi
Core.FRegistryObjectInfo::FRegistryObjectInfo+69008: 5E - pop esi
Core.FRegistryObjectInfo::FRegistryObjectInfo+69009: 5B - pop ebx
}

 

SergBrNord, потесть, полученную сигну. 

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

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

Качнул версию -- Релиз группы: R.G.Creative -- Автор репака: K0RW1N

Плагин или вручную.

Вроде сработал, вот он что дал:

  Показать содержимое


{ Game   : HP.exe
  Version: 1.0
  Date   : 04-25-17
  Author : Garik66
  This script does blah blah blah
  
  Make by aamaker Lua plagin :)
  Link - http://forum.gamehacklab.ru/index.php?/files/file/329-ce-plugin-aa-maker/
}
[ENABLE]
aobscanmodule(Primer,Core.FRegistryObjectInfo::FRegistryObjectInfo+69899,8bxx89xxc2xxxx85xx7exxxx8bxxxxxxxx8bxxxxxxf3xxxxxxc2xxxxxxxxxxxx8bxxxxxx85xx74xx8bxxxxxx8bxxxx33xx8bxx3bxxxx0f94xx8bxxc2xxxx8bxxxxxxxx33xx33xx8bxx3bxxxx0f94xx8bxxc2xxxxxxxxxxxxxxxxxxxxxxxxxxxx8bxxxxxx8bxxxxxx6a)
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(Primer)

newmem:

code:
	
	mov ecx,[eax]
	mov [edx],ecx
	ret 0008
	jmp return

Primer:
	jmp newmem
	nop
	nop
return:

[DISABLE]
Primer:
	db 8B 08 89 0A C2 08 00

unregistersymbol(Primer)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Core.FRegistryObjectInfo::FRegistryObjectInfo+68FED

Core.FRegistryObjectInfo::FRegistryObjectInfo+68FD7: 8B 5D 08  - mov ebx,[ebp+08]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDA: 0FAF C3  - imul eax,ebx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FDD: 8B 56 48  - mov edx,[esi+48]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE0: 03 C2  - add eax,edx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE2: 3B F9  - cmp edi,ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE4: 74 03 - je 1016C690
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE6: 8D 0C 38   - lea ecx,[eax+edi]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FE9: 8B 16  - mov edx,[esi]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEB: 51 - push ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEC: 8B 4D 10  - mov ecx,[ebp+10]
// ---------- INJECTING HERE ----------
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FEF: 03 C1  - add eax,ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF1: 8B CE  - mov ecx,esi
// ---------- DONE INJECTING  ----------
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF3: 50 - push eax
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF4: FF 52 70  - call dword ptr [edx+70]
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF7: 85 C0  - test eax,eax
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FF9: 74 18 - je 1016C6BA
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFB: 33 C0  - xor eax,eax
Core.FRegistryObjectInfo::FRegistryObjectInfo+68FFD: 8B 4D F4  - mov ecx,[ebp-0C]
Core.FRegistryObjectInfo::FRegistryObjectInfo+69000: 64 89 0D 00000000  - mov fs:[00000000],ecx
Core.FRegistryObjectInfo::FRegistryObjectInfo+69007: 5F - pop edi
Core.FRegistryObjectInfo::FRegistryObjectInfo+69008: 5E - pop esi
Core.FRegistryObjectInfo::FRegistryObjectInfo+69009: 5B - pop ebx
}

 

SergBrNord, потесть, полученную сигну. 

 

У меня полная антология от R.G.Recoding, но сигнатура подошла как родная.

А вот что я получил (делал ручками):

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

{ Game   : game.exe
  Version: 1.0
  Date   : 2017-04-24
  Author : SergBrNord
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

aobscanmodule(BEANS,Core.dll,8B XX 89 XX C2 XX XX 85 XX 7E 0E 56 8B XX XX XX 57 8B XX XX XX F3 A5 5F 5E C2 XX XX 90 90 90 90 8B XX XX XX 85 XX 74 16 8B XX XX XX 8B XX 56 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 8B XX XX XX 56 33 XX 33 XX 8B XX 3B XX 5E 0F 94 C1 8B XX C2 XX XX 90 90 90 90 90 90 90 90 90 90 90 90 8B XX XX XX 8B XX XX XX 6A 04 52 8B XX FF XX XX C2 XX XX) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  cmp [eax+10], 65 //101
  jne code
  cmp [flag], 0
  jne code
  mov [eax], C8 //200
  mov [flag], 1

code:
  mov ecx,[eax]
  mov [edx],ecx
  ret 0008
  jmp return

flag:
  db 0

BEANS+6380DA8:
  jmp newmem
  nop
  nop
return:
registersymbol(BEANS)


[DISABLE]
//code from here till the end of the code will be used to disable the cheat
BEANS+6380DA8:
  db 8B 08 89 0A C2 08 00

unregistersymbol(BEANS)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Core.dll"+6CF40

"Core.dll"+6CF24: 8B 54 24 04           -  mov edx,[esp+04]
"Core.dll"+6CF28: 8B 08                 -  mov ecx,[eax]
"Core.dll"+6CF2A: 89 0A                 -  mov [edx],ecx
"Core.dll"+6CF2C: C2 08 00              -  ret 0008
"Core.dll"+6CF2F: 90                    -  nop 
"Core.dll"+6CF30: 8B 49 34              -  mov ecx,[ecx+34]
"Core.dll"+6CF33: 83 F9 01              -  cmp ecx,01
"Core.dll"+6CF36: 75 0F                 -  jne Core.dll+6CF47
"Core.dll"+6CF38: 8B 44 24 08           -  mov eax,[esp+08]
"Core.dll"+6CF3C: 8B 54 24 04           -  mov edx,[esp+04]
// ---------- INJECTING HERE ----------
"Core.dll"+6CF40: 8B 08                 -  mov ecx,[eax]
"Core.dll"+6CF42: 89 0A                 -  mov [edx],ecx
"Core.dll"+6CF44: C2 08 00              -  ret 0008
// ---------- DONE INJECTING  ----------
"Core.dll"+6CF47: 85 C9                 -  test ecx,ecx
"Core.dll"+6CF49: 7E 0E                 -  jle Core.dll+6CF59
"Core.dll"+6CF4B: 56                    -  push esi
"Core.dll"+6CF4C: 8B 74 24 0C           -  mov esi,[esp+0C]
"Core.dll"+6CF50: 57                    -  push edi
"Core.dll"+6CF51: 8B 7C 24 0C           -  mov edi,[esp+0C]
"Core.dll"+6CF55: F3 A5                 - repe  movsd 
"Core.dll"+6CF57: 5F                    -  pop edi
"Core.dll"+6CF58: 5E                    -  pop esi
"Core.dll"+6CF59: C2 08 00              -  ret 0008
}

 

 

Что интересно, после доработки сигнатуры, место в коде находится точно, но переход не прописывается никак.

Вот как это выглядит:

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

8553989.jpg

 

 

 

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

2 минуты назад, what228 сказал:

Потому что ("BEANS+6380DA8") означает прыжок на "6380DA8" байт после чего идет инъекция в том месте.
Тебе нужно удалить ("
+6380DA8").

Уже дошло. НЯП, нужно удалить в двух местах:

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

BEANS:
  jmp newmem
  nop
  nop
return:
registersymbol(BEANS)


[DISABLE]
//code from here till the end of the code will be used to disable the cheat
BEANS:
  db 8B 08 89 0A C2 08 00

 

 

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

3 минуты назад, SergBrNord сказал:

Уже дошло. НЯП, нужно удалить в двух местах:

Да в двух т.к. при отключении нужно тоже восстановить байты и там тоже делается прыжок ( Ну это так для понятия ).

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

24 минуты назад, SergBrNord сказал:

BEANS+6380DA8:             // далековато же ты прыгал
  jmp newmem

[DISABLE]
BEANS+6380DA8:
  db 8B 08 89 0A C2 08 00  // и портил игровой код

 

:D Игра, после отключения скрипта - не вылетала? 

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

В 25.04.2017в13:17, Garik66 сказал:

:D Игра, после отключения скрипта - не вылетала? 

Нет. 0 реакции, побегал, поиграл – без проблем.

 

P.S.

Это привет от CE остался.

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

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

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

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