Добавлен , опубликован
Способ реализации:
Версия Warcraft:

Внимание!

Все последующие обновления моих ресурсов будут делаться в моей вк группе, которую можно найти в профиле.

Внимание!

При скачивании, Вам будет доступна тестовая карта, открываемая в JNPG World Editor.
Вы можете как тестировать хаки на этой карте, так и в целом скопировать все триггеры к себе в карту и тестировать в своей карте.
Мой совет, лучше в начале проверьте всё на моей карте, чтобы убедиться в том, что всё работает для ВАС как надо, а затем уже начинайте заниматься переносом.
Тем, кому WE неудобен как мне, можете смело брать war3map,j и из него переносить код, только надо будет немного очистить от ненужного кода WE.
Спасибо за внимание!

Что делает Антихак:

Антихак проверяет валидность байтов по заданным адресам и в случае не соответствия, в зависимости от флага в переменной bIsHackKick решает, что делать. Если хак можно запатчить (отключить), то будет вызвана функция PatchMemory, которая восстановит валидные байты в памяти, которые были изменены хаком. Если же АнтиХак не может запатчить хак, то игрок будет кикнут вне зависимости от флага bIsHackKick.
Кик определяется выделением невыделяемого обычными мерами юнита, благодаря которому, вызывается триггер TriggerRegisterPlayerUnitEvent с ивентом EVENT_PLAYER_UNIT_SELECTED. Что позволяет нам посылать в общий чат сообщение о том, что тот или иной игрок был выкинут за хаки.
Спидхак и в целом изменения системных .dll всегда приводят к выкидыванию нарушителя, так как восстановить системные .dll, а точнее детуры или хуки не является возможным.

Содержит:

  1. 120 адресов, которые потенциально используются хаками.
  2. 30 VТаблиц, которые потенциально используются хаками.
  3. Обнаружение Unreal MapHack от Karaul0v.
  4. Практически полное обнаружение хака W3SH.
  5. Практически полное обнаружение хака RGC Hack.
  6. Практически полное обнаружение TFTLocal.
  7. Обнаружение SpeedHack.

Требования:

  1. JNPG и знания работы с кодом.
  2. Warcraft 3 версии 1.26а и только 1.26а.
  3. Открыть карту в JNPG или же вытащить war3map.j код с помощью MPQ Editor.
Если открыли в JNPG:
  1. Скопируйте все триггеры в вашу карту.
  2. Вызовите функцию Init_MemoryHack ровно 1 раз.
Если открыли в Notepad++
  1. Вставить natives из кода над globals.
  2. Вставить переменные из globals в Вашу карту.
  3. Вставить остальной код сохраняя целостность в любое выбранное Вами место.
  4. Не забыть вызвать функцию Init_MemoryHack (желательно из main функции).
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
20
0 комментариев и 2 дизлайка - вопрос, за что и почему.
Поясняю, ресурс создан для отлова хаков через карту, хотя видать читерам это и не понравилось...
33
Какие ещё читы, у нас народ что делает, что играет только в Melee карты
32
Unryze, ну хз, кстати в ранних версиях банило за безобидный софт, вроде хп\мп бара.
Кстати совсем забыл, добавили блок кнопки сохранения? То мх с записью уже будет фаталить при сохранении игры.
20
Bergi_Bear:
Какие ещё читы, у нас народ что делает, что играет только в Melee карты
Юмор оценил :)
quq_CCCP:
Unryze, ну хз, кстати в ранних версиях банило за безобидный софт, вроде хп\мп бара.
Кстати совсем забыл, добавили блок кнопки сохранения? То мх с записью уже будет фаталить при сохранении игры.
В ранних моих версиях? Да, я безразборно разбирал хаки и добавлял, потом лишь доходило какой адрес за что отвечает.
Код для блока сейва:
	globals
		timer SaveBlockTimer = CreateTimer( )
		dialog PreventSave___Dialog = DialogCreate()
	endglobals
		
	function PreventSave___Exit takes nothing returns nothing
		call DialogDisplay(GetLocalPlayer(), PreventSave___Dialog, false)
	endfunction

	function PreventSave___StopSave takes nothing returns boolean
		local boolean GameAllowSave = false

		if GameAllowSave == false then
			call DisplayTextToPlayer(GetLocalPlayer(), 0, 0, "Save Game is Disabled")
			call DialogDisplay(GetLocalPlayer(), PreventSave___Dialog, true)
		endif

		call TimerStart( SaveBlockTimer, 0.00, false, function PreventSave___Exit)

		return false
	endfunction

	function AntiSaveSystemInit takes nothing returns nothing
		local trigger AntiSaveLocalTrigger = CreateTrigger()
		call TriggerRegisterGameEvent( AntiSaveLocalTrigger, EVENT_GAME_SAVE )
		call TriggerAddCondition( AntiSaveLocalTrigger, Filter(function PreventSave___StopSave ) )
		set AntiSaveLocalTrigger = null
	endfunction
32
Unryze, насчет сейва -
function DisableSaveGameSaveButton takes nothing returns nothing
    local integer pSaveGameSaveButton = GetFrameItemAddress("SaveGameFileEditBox",0)
    if pSaveGameSaveButton > 0 then
        set Memory[pSaveGameSaveButton/4 + 0x1D4/4] = 0
        set Memory[pSaveGameSaveButton/4 + 0x108/4] = 0
        set Memory[pSaveGameSaveButton/4 + 0x1E8/4] = 0
    endif
    set pSaveGameSaveButton = GetFrameItemAddress("FileListFrame",0)
    if pSaveGameSaveButton > 0 then
        set Memory[pSaveGameSaveButton/4 + 0x10C/4] = 0x3B03123E
    endif
endfunction
Вот на мемхаке, этот вариант надежен и не даст сохранить игру и вызвать фатал.
20
quq_CCCP:
Unryze, насчет сейва -
function DisableSaveGameSaveButton takes nothing returns nothing
    local integer pSaveGameSaveButton = GetFrameItemAddress("SaveGameFileEditBox",0)
    if pSaveGameSaveButton > 0 then
        set Memory[pSaveGameSaveButton/4 + 0x1D4/4] = 0
        set Memory[pSaveGameSaveButton/4 + 0x108/4] = 0
        set Memory[pSaveGameSaveButton/4 + 0x1E8/4] = 0
    endif
    set pSaveGameSaveButton = GetFrameItemAddress("FileListFrame",0)
    if pSaveGameSaveButton > 0 then
        set Memory[pSaveGameSaveButton/4 + 0x10C/4] = 0x3B03123E
    endif
endfunction
Вот на мемхаке, этот вариант надежен и не даст сохранить игру и вызвать фатал.
Ну, без мемхака это дело тоже решается, кодом выше, я просто не хочу юзать мемхак там, где это не нужно, но за код спасибо (не помню был ли он в оригинальном мемхаке).
32
Unryze, был и в оригинале, темболее у тебя так или иначе мх на запись, т.е сломанный массив, так что тут уже глупо отнекиватся. На хайве GetFraemAdress есть под 1.26, кстати мб тебе мемхак кинуть под 1.27+?
20
quq_CCCP:
Unryze, был и в оригинале, темболее у тебя так или иначе мх на запись, т.е сломанный массив, так что тут уже глупо отнекиватся. На хайве GetFraemAdress есть под 1.26, кстати мб тебе мемхак кинуть под 1.27+?
Мемхак мне толком не интересен, потому это бесполезно, да и при желании я и сам смогу это сделать, если разберу game.dll новых версий, но это бесполезно.
Про "отнекивание" речь шла о том, что это бесполезный код и можно решить эту проблему менее затратным результатом, про "оригинал" я о том, что выложил Драколич, когда я его брал - это было года 3 назад, может и больше.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.