Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Автокомплит

Как что-то сделать, при этом ничего не делая
Оценить эту запись

Мания чисел

Запись от gloomyBrain размещена 08.12.2010 в 22:47
Обновил(-а) gloomyBrain 09.12.2010 в 02:28

Вообще я опечатался. Хотел сначала "магия" написать. Но вроде и так ничего =)
Сразу оговорюсь, что ничего сверхъестественного ниже не написано.

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

Просто подменил значения в памяти и стал молодцом. Ну, Вы же знаете как это работает - запускаем программку, выбираем процесс (в случае с Firefox это будет PluginContainer), и сканируем память, выделенную этому процессу, на предмет интересующего числа (ну или строки, что, вообще-то, экзотика). Далее несколько раз фильтруем и находим нужный нам адрес. Далее просто подменяем значение по этому адресу - и вот мы чемпионы!

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

Epic fail, скажете Вы? - а вот и нет.
Первое же что пришло в голову - это хранить 2 левых значения, сумма или разность которых в итоге даст нам значение, которое мы хотим спрятать. Таким образом на свет появились 3 класса:
- HiddenInt
- HiddenUint
- HiddenNumber

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

ЗЫ
Туда же закинул битовую маску - ну просто так, чтобы не скучно было. Мало ли Вам захочется хранить 32 булевых переменных в одном числе =)
Вложения
Тип файла: zip numbers.zip (2.9 Кб, 236 просмотров)
Размещено в flash.utils
Комментарии 55 Отправить другу ссылку на эту запись
Всего комментариев 55

Комментарии

Старый 08.12.2010 22:58 -De- вне форума
-De-
 
Аватар для -De-
Артмани/оматик разве не умеет ещё искать "число, которое выросло на 10"? По-моему можно было что-то такое делать.
Я когда-то думал, что если такое делать, то надо множить ещё на рандомное число. Хотя сейчас наверное взял бы два/n чисел и попеременно складывал с нужным.
UPD: да, можно задампить память, а потом искать "число, которое выросло на n".
UPD2: посмотрел код - не прокатит искать "число, выросшее на n". Рандом правда не самая быстрая функция, но там не нужна скорость, идея оч. даже =)
Обновил(-а) -De- 08.12.2010 в 23:26
Старый 08.12.2010 23:14 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
А какой практический толк? Что такое нужно защитить в клиенте?
Старый 08.12.2010 23:18 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Есть еще возможность замедлять время - может быть критично для некоторых игр. Не помню как прога называется...
Старый 08.12.2010 23:48 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Это уже делает нормальный подход к играм, где рендер построен на дельте от getTimer.
Старый 09.12.2010 00:01 -De- вне форума
-De-
 
Аватар для -De-
Кстати, кривовато написан HiddenNumber (походу вообще не тестили) - Number.MIN_VALUE вообще-то положительный, ну и прибавление Number.MIN_VALUE бывает, не изменяет число вообще, а вот отнимание Number.MAX_VALUE может устроить пц числу. Там надо степень искать и от неё уже там плясать, чтоб точность не уменьшить (прям даже и не напишу сам сходу %)
Шоп понять о чем я, шайтан-код:
Код AS3:
			var n:Number = 1;
			var m:Number = n;
			n += Number.MIN_VALUE;
			trace(n == m, n, m);
			n += Number.MAX_VALUE/2;
			n -= Number.MAX_VALUE/2;
			trace(n == m, n, m);
Обновил(-а) -De- 09.12.2010 в 00:08
Старый 09.12.2010 00:12 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
прибавление Number.MIN_VALUE бывает, не изменяет число вообще
Конкретно оно там никогда не получится

Цитата:
Number.MIN_VALUE вообще-то положительный
Да, минус потерялся =) Насчет сложностей с точностью - не уверен, т.к. там одно сложение и одно вычитание, и не больше. Так что (по идее) погрешность не будет накапливаться. Но вообще, согласен, стоит подумать.

Цитата:
Что такое нужно защитить в клиенте
Например - количество очков у пользователя. В аркадной игре.
Сейчас под пользователя заводится сессия и есть некий теоритический максимум очков, который можно получить за эту сессию. Если игрок его каким-то образом вычислит, он будет слать их при каждой возможности.
В данном случае, без декомпила флешки ему это будет сделать несколько сложнее.
Обновил(-а) gloomyBrain 09.12.2010 в 00:19
Старый 09.12.2010 00:22 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Обычно на сервер шлется промежуточные результаты, а сервер сам считает количество очков. Но в целом мысль уловил.
Старый 09.12.2010 00:26 -De- вне форума
-De-
 
Аватар для -De-
Цитата:
Конкретно оно там никогда не получится
В половине случаев, когда value больше 0, ровно оно получится, в другой половине - 0 ровно) На большистве "реальных" чисел можно считать, что прибавится/отнимется 0.
Цитата:
одно сложение и одно вычитание
Делает из единички 0, см. код выше)
Ну а вообще я такое не делал, т.к. если приспичит, то декомпильнёт, надо чтоб это им ничего не дало, хотя поиграться интересно.
Старый 09.12.2010 00:31 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Делает из единички 0, см. код выше
Это никак не получится повторить с использованием приведенного кода. Под каждое set value будет вычисляться новая рандомная дельта, исходя из переданного значения.

Цитата:
В половине случаев, когда value больше 0, ровно оно получится
Т.к. Math.random() никогда не выдаст единицу, то нет, Number.MIN_VALUE не получится =)

Цитата:
если приспичит, то декомпильнёт
Ну, по сути дела, зная время начала и окончания игры + теоритический максимум очков, я могу предположить, что человек либо читер, либо адский фанат игры. В любом случае, если он читер, то ему придется набирать очков не больше, чем фанату. Так что смысл затеи для читера немного теряется.
Обновил(-а) gloomyBrain 09.12.2010 в 00:36
Старый 09.12.2010 00:44 -De- вне форума
-De-
 
Аватар для -De-
А сколько чисел у вас такой код выводит?
Код AS3:
var n:HiddenNumber = new HiddenNumber();
			for (var i:int = 0; i < 100000; ++i) {
				n.value = -1;
				if (n.value != 0) trace(n.value);
			}
У меня ровно 0. Что там с рандомной дельтой? =)
Number.MIN_VALUE * Math.random() таки в половине случаев равен Number.MIN_VALUE, так оно округляет, я таки проверял!
Старый 09.12.2010 01:29 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Number.MIN_VALUE * Math.random() таки в половине случаев равен Number.MIN_VALUE
У меня так этого и не получилось повторить, приведите код, где получается.
Там проблема была в другом месте.
Перезалил. Решается путем использования только MIN_VALUE в качестве дельты
Обновил(-а) gloomyBrain 09.12.2010 в 01:31
Старый 09.12.2010 01:42 -De- вне форума
-De-
 
Аватар для -De-
Тогда оно не шифрует и от артмани не защищает...
trace(1 - Number.MIN_VALUE == 1 + Number.MIN_VALUE);//true
Числа с плавающей запятой знать бывает не лишне вообще %)
http://docs.sun.com/source/806-3568/ncg_goldberg.html
Лучше, например, так. Могут быть какие-то приколы с потерей точности на округлении, а могут даже и не быть %)
Код AS3:
public function set value(value:Number):void {
			_delta = -Math.random() * value;
			_storedValue = value + _delta;
		}
Подсчёт, когда Math.random() * Number.MIN_VALUE == Number.MIN_VALUE в лоб, в общем-то. Также перед Number.MIN_VALUE можно нарисовать минус и ничего не изменится.
Код AS3:
var mins:int = 0;
			var zeros:int = 0;
			for (var i:int = 0; i < 1000000; ++i) {
				var n:Number = Math.random() * Number.MIN_VALUE;
				if (n == Number.MIN_VALUE) ++mins;
				if (n == 0) ++zeros;
			}
			trace(mins, zeros, mins / zeros, mins + zeros);
Обновил(-а) -De- 09.12.2010 в 01:50
Старый 09.12.2010 02:21 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
Тогда оно не шифрует и от артмани не защищает...
Я про внутреннюю дельту.. Да не суть, все равно не подойдет.
Пришла мысль, что можно в принципе использовать в качестве добавки некий рандомный int и не париться. Потому как нам все равно, каким будет модуль добавочного числа, нам важен только его знак
Старый 09.12.2010 03:17 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Я вообще-то не понимаю, почему так именно с числами заморачиваться? Есть данные, их можно криптовать и декриптовать. Делать это можно как на сервере, так и на клиенте, в зависимости от задачи. И добавление некоего значения - самый простой вариант.
Старый 09.12.2010 08:29 alexcon314 вне форума
alexcon314
Неплохо, в принципе. Могу добавить еще, что при желании можно менять адрес переменной в памяти по мере необходимости (что-то похожее на ASLR). Типа отсканили - посмотрели, опа! вот по этому адресу оно лежит, давай менять! А оно уже в другом месте тем временем... ку-ку! Да еще мусора кидануть охапочку, пусть разгребают...
Старый 09.12.2010 11:13 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
Цитата:
при желании можно менять адрес переменной в памяти по мере необходимости
А не поделитесь - как именно?
Старый 09.12.2010 11:21 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
Интересная тема.

Цитата:
Первое же что пришло в голову
Это действительно первое, что приходит в голову. Но к сожалению это легко обойти. Потому что действительно есть проги которые находят изменения значения адреса в памяти. Так что это не работает.

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

Цитата:
Далее несколько раз фильтруем и находим нужный нам адрес.
Проги могут фильтровать только те же адреса. А что если заставить адрес меняться?

Например у нас есть список каких-то значений, которые не хочется, чтобы пользователь мог менять. Мы создаем переменную someVar с типом Array или Object, записываем туда нужные для изменения нам и не нужные для изменения пользователю переменные, а потом при каждом изменении значения переписываем Array или Object, например:
Код AS3:
someVar=new Object();
someVar={bla..bla..bla};
На практике я не нашел способа это обойти. Так что можете разгружать ваши сервера, и делать расчет на клиенте. Если есть способы это обойти, напишите, мы придумаем как можно защититься.
Старый 09.12.2010 12:22 alexcon314 вне форума
alexcon314
Цитата:
А не поделитесь - как именно?
При выделении памяти по ByteArray адрес (начло массива) выдается по-сути системой по ей только известному алгоритму. Причем не в куче процесса, а в другой области, так что сканить кучу бесполезно, хоть бы ты ее и вычислил.
Можно попробовать так: пакуем набор критических переменных в ByteArray. Потом, случайным образом "перемещаем" его в памяти путем создания нового массива с копированием данных из прежнего. В ас-коде доставать их можно по прежнему указатлю, а вот физически они будут в другом месте.
Код AS3:
import flash.utils.ByteArray;
class MemMove
{
	private var actualMemPtr:ByteArray;
	private static const NEEDED_SIZE:uint;
	....
	public function MemMove():void 
	{
		actualMemPtr = new ByteArray();
		actualMemPtr.length = NEEDED_SIZE;
		// тут actualMemPtr указывает на адрес типа 0х003315000 
		// пакуем данные в массив
	}
	private function memMove():void
	{
		var tmp:ByteArray = new ByteArray();
		tmp.length = NEEDED_SIZE;
		// тут tmp указывает на адрес типа 0х00D80000 
		// пакуем данные в массив
		tmp.writeBytes(actualMemPtr, 0, NEEDED_SIZE);
		actualMemPtr.clear();// старый массив при этом нисколько не трется, оставляя в памяти дополнительный мусор
		actualMemPtr = tmp;
		// вуаля! actualMemPtr указывает на адрес 0х00D80000
	}
}
Ну, и да, фейковых перменных можно так же насовать и синхронизировать их с актуальными, поди разберись, какая из них фейк. Для мусора и фейков можно тот же ByteArray использовать или даже BitmapData. Эти штуки хранятся непрерывными массивами и данными легко можно управлять из AS.
Обновил(-а) iNils 09.12.2010 в 15:42
Старый 09.12.2010 12:27 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
А зачем мусорить фейки, если можно изменить все переменные и нужная переменная поменяется точно также, а изменение фейков не повлияет на работу программы, надо так чтобы при изменении фейка происходил краш.
Обновил(-а) Tr1te 09.12.2010 в 12:33
Старый 09.12.2010 12:38 alexcon314 вне форума
alexcon314
Не понял. Вот мы рассовали одну и туже строку(пусть) по разным адресам. Так? Потом актуальное значение поменялось, вместе поменялись и фейки. Как ты отследишь, по какому адресу лежит актуал?
Крэш зачем? Впрочем, после реалока массива и перезаписи его старой области из-под сканера, когда она уже под другие данные была перевыделена, может и уронить. Важно, что ты актуал не сможешь вычислить.
И это, фейки - это совсем не обязательно var a, b, c.... Можно создать пару массивов и писать туда байтиками эти самые фейки. Сканер на них все-равно споткнется.
ЗЫ. Да можно даже в пределах одного массива блок актуальных данных перемещать, дробить, склеивать обратно по какому то алгоритму.
Обновил(-а) alexcon314 09.12.2010 в 12:48
Старый 09.12.2010 15:35 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
@Tr1te
Цитата:
Так что это не работает
А вы попробуйте приведенный код =)

@alexcon314
Да, интересная идея
Старый 09.12.2010 17:24 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
Цитата:
Потом актуальное значение поменялось, вместе поменялись и фейки. Как ты отследишь, по какому адресу лежит актуал?
Никак, мне это и не надо. Я ищу адреса со значением. Мне выдает 5 адресов, один нормальный, другие фейки. Я не знаю какой из них какой. А мне и не надо, я поменяю все эти адреса, после единственного поиска, не фильтруя. Изменятся все, и фейки и не фейки. Так что фейки не запутают.

Опять таки повторяюсь, единственное что на данный момент не могу обойти, это два числа для хранения значения переменной, одно ключ - сгенерированный случайно, другое сумма оригенала с ключом, чтобы нельзя было определить поиском адреса. И каждый раз при изменении переменной меняю адрес расположения. При таком раскладе я не знаю как найти и поменять переменную. Так что не стесняюсь производить расчеты на клиенте, а не на сервере. Если кто знает лучше способ, рад буду почитать.
Старый 09.12.2010 21:48 -De- вне форума
-De-
 
Аватар для -De-
Вообще "нельзя производить расчёты на клиенте" не из-за артманей в основном, а из-за декомпиляции, так что опасайтесь как и опасались.
Старый 10.12.2010 01:02 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
И что даст декомпиляция, люди узнают формулу? Мне не страшно.
Старый 10.12.2010 01:22 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Вообще-то из за снифферов, но да ладно.
Старый 10.12.2010 09:14 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
Там тоже есть свои методы. Но это уже другая история.
Старый 10.12.2010 09:37 -De- вне форума
-De-
 
Аватар для -De-
Tr1te, даст всё, можно поправить формулу, можно написать свой клиент.
Psycho Tiger, кабы клиент не декомпилировали, то в него можно было бы зашить ключ, которым всё шифровать и сделать бесполезными снифферы.
Старый 10.12.2010 12:21 murz вне форума
murz
Читаю этот тред и плачу
gloomyBrain, ПОЧЕМУ у вас клиент что-то считает и почему .... у вас сервер эти значения вообще приниманиет!!!
Обновил(-а) iNils 10.12.2010 в 14:27
Старый 10.12.2010 12:27 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
Да забудьте вообще про сервер. Топик о том как защитить локальные переменные от изменения пользователем. И сервер для этого не нужен, может кто-то сингловую игрушку делает, и не хочет чтобы в ней читовали. Все что про сервер, сниф и пр. это фрейм.
Старый 10.12.2010 12:33 murz вне форума
murz
зачем их защищать?
Старый 10.12.2010 12:42 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
Какая тебе разница, какие мотивы у других. Да и тема не о мотивах, а о средствах реализации.
Старый 10.12.2010 14:12 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Цитата:
Вообще "нельзя производить расчёты на клиенте" не из-за артманей в основном, а из-за декомпиляции, так что опасайтесь как и опасались.
Да можно на много проще самому (не из флешки) посылать на сервак левые значения и, если на серваке ведуться расчёты, всем GG.
Старый 10.12.2010 14:42 Хемуль вне форума
Хемуль
 
Аватар для Хемуль
2 Tr1te:
Тема забавная. ^_^

Но и я немного позанудствую. Не вижу смысла защищать сингловые игры, а говорю о сингловых, поскольку серверные должны быть всего лишь клиентским лицом сервера в идеале. Если вы уже продали игру кому-то или у вас её украли, стоит ли заботиться о том, что пользователь делает со своей игрой? Это как если бы вы были менеджером суши-бара и отказались бы давать неопытному клиенту кушать роллы вилкой. Хочет читить, пусть читит. Главное, чтобы остальные не страдали.
Старый 10.12.2010 14:56 Tr1te вне форума
Tr1te
 
Аватар для Tr1te
Хемуль, а может я педантично отношусь к стилизации суши-бара, и не позволяю портить эстетическое впечатление вилками, не нравиться есть палками, иди в другое место, и вообще пускаю только японцев.

Вам главное деньги получить, а кому то главное геймплей.

Может кто-то вообще p2p игру делает, у него нет возможности вести расчет на сервере, потому что у него его просто нет.

И еще миллион таких "может", какая вам разница для чего это нужно?
Старый 10.12.2010 15:22 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Плюсую к Хемуле, я буду рад если я смогу читерить если очень захочу. А если не смогу - уйду. Игра теряет клиента на пустом месте, ага.

Но про п2п согласен.
Старый 10.12.2010 16:10 iNils вне форума
iNils
 
Аватар для iNils
А есть еще казуальные игры с записью рекордов. Там тоже логику на сервере всю делать?
Старый 10.12.2010 16:12 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Запись рекордов - это уже взаимодействие с другими игроками. Мы тут спорим о чисто сингловых.)
Старый 10.12.2010 16:18 iNils вне форума
iNils
 
Аватар для iNils
Цитата:
Запись рекордов - это уже взаимодействие с другими игроками.
Ничего подобного.
Старый 10.12.2010 16:36 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
По мне именно так.
Например, игра типа марио, как в денди, на 2. Если убрать ретрансляцию зрелища как играет второй игрок после твоей смерти - то на выходе получим только очки. Но игру всё же называют "на двоих". Другими словами — не разделяю.
Старый 10.12.2010 16:47 iNils вне форума
iNils
 
Аватар для iNils
Взаимодействие, это когда в одном игровом процессе участвуют несколько человек. Ты привел пример одного игрового процесс, где игроки играли по очереди.

Ты начинаешь спорить ради спора. Если нет записи результата, то смысл что-либо хакать отпадает в принципе.
Старый 10.12.2010 16:54 Хемуль вне форума
Хемуль
 
Аватар для Хемуль
Цитата:
Если нет записи результата, то смысл что-либо хакать отпадает в принципе.
Далеко не всегда. Вот, Tr1te писал про стилизацию суши-бара. Мол, чисто из принципа хочет, чтобы не читили. То есть, он хочет, чтобы не читили даже если рекорды не записываются.

А так да, высокая позиция в публичной таблице рекордов даёт намного больше признания и ощущения собственной значимости. ^_^
Обновил(-а) Хемуль 10.12.2010 в 16:56
Старый 10.12.2010 16:56 Zebestov вне форума
Zebestov
 
Аватар для Zebestov
Psycho Tiger, iNils вероятно имел в виду запись числа (очков) посредством предоставленного спонсором/сетью API. И вычисляется это число в клиенте — никаких серверов (не буду так категоричен, но я не слышал, чтобы кто-то использовал сервер).
Если в таблице high scores будет стадо игроков с предельными достижениями — это может многих завзятых игроков оттолкнуть. А это плохо.
Старый 10.12.2010 16:59 iNils вне форума
iNils
 
Аватар для iNils
И что? Смысла, то хакать нет.

Zebestov, ты прав. Я даже и не думал, что это придется объяснять.
Старый 10.12.2010 19:48 gloomyBrain вне форума
gloomyBrain
 
Аватар для gloomyBrain
@murz
Цитата:
Читаю этот тред и плачу
gloomyBrain, ПОЧЕМУ у вас клиент что-то считает и почему .... у вас сервер эти значения вообще приниманиет!!!
Потому что иначе никак. Казуальная игра с ведением статистики по юзерам. Человек играет сам с собой, но результат нужно сравнивать с другими игроками. Так что, когда поплачете, попробуйте что-то лучше сообразить, я с радостью рассмотрю любое решение.

@Тигра
Цитата:
Мы тут спорим о чисто сингловых
Я писал не для сингловой игры.
Если хотят ее (сингловую) сломать - пусть ломают. Перед этим ее все равно придется купить =)

@Zebestov
Да, именно так и именно по таким причинам
Старый 10.12.2010 20:07 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Мы о разном говорим. Tr1te сказал сингловая, я решил что речь идёт совсем о сингле, без взаимодействия с сервером вообще. Конечно, дураку понятно что рекорды защищать в случае со спонсорскими апи.

Цитата:
Если нет записи результата, то смысл что-либо хакать отпадает в принципе
Так получилось, что я вырос в поколении, когда все поголовно играли в гта и им подобные игры. Игры хакали ради того чтобы замочить ещё больше народу или гонять на более скоростной тачке. Просто так, для себя, им это нравилось, в принципе нравилось и мне. По этим соображениям я выступил против защиты если игра сингловая без таблиц рекордов. Это пустая трата времени, да и некоторым понравится.
На этом вопрос себя исчерпал.
Старый 10.12.2010 20:41 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Psycho Tiger, ну почему? Во времена массовой диабло мании, игры ломали что бы прокачать гера, пойти с ним на турнир и всех грохнуть))
Старый 10.12.2010 21:24 dimarik вне форума
dimarik
 
Аватар для dimarik
Щаз просто пилят больше, на прокачку времени не остается =)
Старый 10.12.2010 22:39 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Пилят кого?
Старый 10.12.2010 22:41 dimarik вне форума
dimarik
 
Аватар для dimarik
Бюджет обычно
Старый 10.12.2010 23:40 Котяра вне форума
Котяра
 
Аватар для Котяра
а в 99% случаев вообще то проще даже не ломать фдэшку, а просто заснифать запрос на сервер сохранения очков и подделать его.
 

 


Часовой пояс GMT +4, время: 03:18.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.