XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Astra
-=G-U-I=-
offline
Опыт: 5,086
Активность:
количество переменных в число
Каким образом можно подсчитать общее количество глобальных переменных прямо в игре и сравнить их с определенным числом?
Для чего: допустим в карте 300 переменных, а если кто-то решит всунуть еще, проверка и поражение
П.С. поиск замучил, но ответа не нашел :(
Старый 06.06.2014, 14:43
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Astra, сколько самих переменных ты в игре не узнаеш, ибо никак... А посчитать количество обьектов можно через fogStateExploit
» FogStateExploit
((код jass
globals
hashtable hash = InitHashTable()
endglobals
function FindTrigger takes trigger h returns trigger
call SaveFogStateHandle( нash, 0,0, ConvertFogState( GetHandleId(h) + "некоторое число" ) )
return LoadTriggerHandle(нash,0,0)
endfunction
))
Просто так такой проверкой читеров вы не остановите....
Старый 06.06.2014, 15:32
ScorpioT1000
Работаем
online
Опыт: отключен
с чего ты взял, что он всунет еще, а не удалит твою проверку? =)
Старый 06.06.2014, 16:20
Astra
-=G-U-I=-
offline
Опыт: 5,086
Активность:
quq_CCCP,
нубская просьба: к сожалению пользуюсь гуями, возможно ли код перевести в его вид?
и какие именно объекты в данном примере будут записываются в хеш?
ScorpioT1000,
  • этот этап защиты делаю для раков, которые иньектируют читпаки тупо по мануалу
  • полистав страницы форума сделал вывод, что заморачиваться с надежным протектом сейчас нет смысла, т.к. его все равно вскроют форсом ладика/хекс редатором
Старый 06.06.2014, 17:03
Tobi123

offline
Опыт: 7,826
Активность:
Ваш код никому не нужен. И читы в код никто не будет ставить.
Старый 06.06.2014, 18:15
Hate
конь вакуумный
online
Опыт: 43,033
Активность:
можно поставить палки в колеса, изучив что они там инжектят. обычные хомячки импортят какие то шаблонные сборки, я как то ломал ноги таким медузкам, потом на ихнем форуме вайнили что их выкидывает с фаталом, лул
Старый 06.06.2014, 18:21
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Astra, нет, не думай даже о таком на гуи... Читы вставят, карту твою сломают за 5 мин и тебя не просят...
Если собрались делать норм протект, то надо сначала понять как карту ломают, какие используют алгоритмы...
После этого только делать защиту которая так, или инече не даёт возможности юзать распространённые методы взлома включая ладик и хексредактор (хештаблицу просто так ручками не поправить, это не лже заголовок и длина архива)
quq_CCCP добавил:
Кстати чё так все наровят кикнуть читера с месагой Вшивый читер пойман!
Будьте умнее, делайте защиту так чтобы, в карту с читами было невозможно играть, не создавались войска, фаталило на ровном месте и тд.
Кажется Diod с неохотой описывал подобный метод протекта, де в карте 100500 функций примерно одного содержания, вызываются execut'ами по некому алгоритму, и когогда карту ломают начинают вызываться не те функции, к примеру функция де создаётся крип с техникой*, или обрывается важный поток...
Примечание если добавить в редакторе обычному крипу скилл "ENeg" (техника) ибо скилл на основе оного, и создать крипа триггерно, карты вылетает с фаталом... И читер долго будут чесать репу, че оно фаталит..
Старый 06.06.2014, 18:33
Astra
-=G-U-I=-
offline
Опыт: 5,086
Активность:
quq_CCCP/Hate
алгоритм распространенных читпаков примерно следующий:
  1. MPQmaster/ладдик
  2. Удаляется файл (attributes)
  3. "War3map.j" - "Extract"
  4. через JassCraft загружается подготовленный war3map.j
(Part 1 читпака после globals + Part 2 после endglobals + Part 3 после function main takes nothing returns nothing)
  1. Сохранение изменённого "war3map.j"
Если была бы возможность отследить инъекцию переменных - то можно было бы фаталить любым способом..
П.с. хотел бы сразу пояснить, что цель данного протекта ограничить доступ именно для распространенных ЧП
  • Само собой поверх использую: векс/слк/виджет/корейский патч/спазлер
Прикрепленные файлы
Тип файла: txt Part 1.txt (1.4 Кбайт, 5 просмотров )
Тип файла: txt Part 2.txt (106.4 Кбайт, 4 просмотров )
Тип файла: txt Part 3.txt (539 байт, 3 просмотров )

Отредактировано Astra, 07.06.2014 в 03:46.
Старый 07.06.2014, 03:30
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Astra, в первых, корейские и некоторые другие карты просто так ладиками и winmpq не открываются, а точнее теряется много много импорта, если карту удалось открыть...
Ничего не мешает посчитать число триггеров перед вызовом некоторых важных функций, (число триггеров, должно быть неизменным, если все твои триггеры либо создаются сразу в глобалс, либо уже после загрузки карты отдельными функциями)
насчет корейской защиты не уверен что медузы с аллчитс откроют, не говоря о том что что то вставят.
war3map.j не найден!
вот пример, всякие их чит инжекторы и ладики не открывают, деспазлеры гробят...
Старый 07.06.2014, 05:30
DioD

offline
Опыт: 45,134
Активность:
защитить сам архив нереально, вернее защита работает только за счёт того что редакторы которые есть в паблик имеют ряд недостатков.
стоит запостить редактор который реимплементирует поведение игры, или хуже того тупо вызывает необходимые методы из файлов игры и вся кухня закроется в этой части, ничто не поможет закрыть архив от чужих глаз, в том числе импорт.
что касается кода, почитайте про XOR CHAIN и еще могу дать погонять вирусняк написанный на яве как раз про это, хотя нет вы всё равно не поймёте как оно работает...
смотрите, у нас есть 100500 методов, которые вызываются или напрямую или через execute\xevaluate логика вызовов генерируется в обсфуцированом виде в рантайме, на основе обсфуцированых данных которые можно запилить куданить или вообще стенография на основе декораций или юнитов которые стоят на карте, чтобы никто не понял вообще как оно рассчитывает таблицу.
Чтобы было понятно что к чему, вот вам пример на яве:
		Random r = new Random();
		
		byte[] setA = new byte[]{'h','e','l','l','o'};
		byte[] setB = new byte[]{'w','o','r','l','d'};
		
		//(0-19)+100
		//100-119
		/*
		long l = 0;
		int step = 0;
		
		byte[] az = new byte[5];
		
		for (;;)
		{
			r.setSeed(l);
			
			r.nextBytes(az);
			
			if (az[0] == setA[0])
				if (az[1] == setA[1])
					if (az[2] == setA[2])
						if (az[3] == setA[3])
							if (az[4] == setA[4])
								System.out.println(l);
			l++;
		}
	//	*/
		
		/*
		byte[] message = new byte[10];
		int i = 0;
		Random rnd = new Random();
		for(;;)
		{
			if (i == 0)
				rnd.setSeed(12051153);
			if (i == 5)
				rnd.setSeed(10782634);
			if (i == 10)
				break;
			message[i] = (byte) (rnd.nextInt(20)+100);
			i++;
		}
		
		System.out.println(new String(message));
		//seed A = 12051153
		//seed B = 10782634
Часть кода нужно будет вызывать в препроцессоре, другую часть кода непосредственно в игре.
методы защиты вызываются не напрямую, а в рамках стандартных возможностей, при чём совершенно неочевидным образом (никакаких if X then callcheckprotection).
можно вообще вызывать методы и функции через Random(1,999) чтобы срывать шаблон тем кто будет читать код, просто потребуется заранее рассчитать весь цикл генератора и все оффсеты.
В случае если защита обнаружила недостатки целостности кода, то слегка портиться список вызова, например заменяется одно из чисел в карте оффсетов и карта начинает работать немножко не так как надо, но читер заметит это не сразу (нельзя сразу делать иначе можно легко отладить), просто через минуту или две действие вроде каста спелла фаталит, без предупреждения.
чтобы не отловили через изменение карты оффсетов, можно менять карту регулярно, регенерировать её время от времени, чтобы random() вызовы бились, например после каждого вызова рандом() в коде регенерировать карту, так как последовательность нарушилась, если внести изменения в карту вызовов в такой момент, то отследить косяк будет ну очень сложно.
Старый 07.06.2014, 06:24
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DioD, ну я решил сделать подобным образом, подгружая сид из файла звука + номер хендла, после вызывал функции executaми, сделав по 20 копий каждой, с примерно 1 и тем же содержанием, но в части сделал не очивидные ошибки, если перепаковать карту то будет сбоить стема создания и ресауна крипов...
Старый 07.06.2014, 06:42
DioD

offline
Опыт: 45,134
Активность:
еще передача параметров стеком представляет очень большую сложность при отладке.
например в одном месте вы "вызываете" методы, хотя это просто добавляет указатели на эти методы в очередь, а сам вызов идёт в совершенно другом месте, все данные точно также передаются стеком.
если что либо нарушит порядок то карта идёт в разнос, потому что параметры и методы не будут совпадать в момент вызова, тоже сложно отловить будет.
Старый 07.06.2014, 07:28
adic3x

offline
Опыт: 108,439
Активность:
function tr_ggg_jhrrq8m takes nothing returns nothing
    local integer SuperPeremennaya=0
    loop
        exitwhen SuperPeremennaya>11
Боюсь, с такими крутыми читерами бороться невозможно.
Старый 07.06.2014, 11:10
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ADOLF:
Боюсь, с такими крутыми читерами бороться невозможно.
это самыйй жалкий из них, который не мог месяц спазлер с карты снять, я когда смотрел как они карты ломают и чё делают, хихикал с некоторых кадров...
Старый 07.06.2014, 11:30
nvc123
new status
offline
Опыт: 59,284
Активность:
Astra, зачем переменные?
сравнивай хэндлы
а там что хочешь можно делать
лично я бы запускал таймер и фаталил через минуту(а ещё лучше время фатала через рандом задавать)
Старый 07.06.2014, 13:56
DioD

offline
Опыт: 45,134
Активность:
откладывать фатал от события которое его вызвало обязательно, иначе слишком просто выяснить причину.
что касается хендлов, проще задать рандом сид хэндлом какогонить объекта а через 100500 линий кода использовать рандом и получить результат, как правило такого никто не ждёт.
Старый 07.06.2014, 16:14
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
По мне фатал слишком палевый, если делать чисто кодом... Гораздо интереснее когда читер увидит пустую крату или, все юниты подконтрольные читеру превратятся в овец.
РО коды предметов, юнитов, апгрейдов и тд, лучше прятать от посторонних глаз и загружать через кеш через preloader в перемясорубленом виде и только после юзать через спец функции (на основе Save Code генераторов)
Это конечно не подходит для динамичных мест де создаются куча юнитов, а для создания крипов в начале игры или заполнения массива ИД для респауна крипов, вполне подойдёт....
Старый 07.06.2014, 16:42
DioD

offline
Опыт: 45,134
Активность:
лично я не вижу смысла так делать, если человек хочет читы, пусть читерит, этож сингл
Старый 07.06.2014, 16:51
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
DioD, Ну смысл есть, из за неверных ид, в карте пустота, овцы, прочие прелести которые не дают сыграть, так же это избавляет от любителей смотреть в коде карты рецепты предметов и закрытых персонажей...
Старый 07.06.2014, 17:02
Astra
-=G-U-I=-
offline
Опыт: 5,086
Активность:
зачем переменные?
я предполагал, что этот способ легко реализовать...
сравнивай хэндлы
если есть возможность дать небольшой пример как это делается - был бы очень благодарен
quq_CCCP
кстати, то что вскрывают айдишники предметов тоже очень напрягает
_______________________________________________________________________________
почитайте про XOR CHAIN и еще могу дать погонять вирусняк написанный на яве как раз про это, хотя нет [вы всё равно не поймёте как оно работает...]
абсолютная правда

Отредактировано Astra, 07.06.2014 в 17:23.
Старый 07.06.2014, 17:17
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:59.