Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Максимально доступная идентификация устройства средствами AS3 (http://www.flasher.ru/forum/showthread.php?t=211111)

Zebestov 27.06.2015 19:41

Максимально доступная идентификация устройства средствами AS3
 
Подскажите способ максимально идентифицировать устройство средствами только лишь AS3. Пока я вижу лишь MD5 от Capabilities.serverString, но может я что-то упускаю, может еще чивота есть? ANE не предлагать.

P.S.
Речь идет не об уникальном id девайса, а о том, чтобы максимально усложнить хитрым перцам попытки применить слепки данных (или как там оно называется) приложения, доступные на всяких 4pda и иже с ними, на своем девайсе.

caseyryan 27.06.2015 20:32

Цитата:

чтобы максимально усложнить хитрым перцам попытки применить слепки данных (или как там оно называется) приложения, доступные на всяких 4pda и иже с ними, на своем девайсе.
Вот тут по-подробнее можно?) От чего конкретно ты хочешь уберечься? Все-таки делом то одним занимаемся, тоже бы надо максимально защитить свои игры

Zebestov 27.06.2015 20:39

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

Так вот хотелось бы данные в базе подписать ключом, зависимым от устройства, чтобы не проканал перенос кэша с какого-то Lenovo на какой-то HTC, например, или с SGT 2 на SGT 3.

AlexCooper 28.06.2015 01:33

Я юзаю нетворк-интерфейс
Код AS3:

private function get networkUID():String {
 
        var mac:String = 'ffffffff-ffff-ffff-ffff-ffffffffffff';
 
        if( NetworkInfo.isSupported ) {
 
                var netfaces:Vector.<NetworkInterface> = NetworkInfo.networkInfo.findInterfaces();
 
                for each( var netface:NetworkInterface in netfaces) {
 
                        //        trace(netface.displayName+' . '+netface.name+" > "+ netface.active );
                        if (netface.hardwareAddress.length && netface.active) {
                                mac = netface.name;
                                break;
                        }
                }
        } 
 
        return mac.replace( /[\{\}]/g, '' );
}

В нагрузку можно, добавить в хеш, время создания какого-нить статического asset'а

Добавлено через 2 минуты
Но конечно-же, от кулц-хакера и Microsoft незнает как защититься

Zebestov 28.06.2015 01:36

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

Добавлено через 1 минуту
А так да, кулхацкеры меня не беспокоят. Раз такие завзятые — хай почувствуют победу, не проблема! Мне бы от зевак-халявщиков отмахаться.

AlexCooper 28.06.2015 01:50

Цитата:

Сообщение от Zebestov (Сообщение 1184182)
Про сетевуху спасибо, беру.

Стоит заметить, что к примеру с ОС Windows, MAC-адресс спокойно можно поменять, потому я бы, добавил метку времени создания ассетов, а еще круче было бы, первичный хеш записать в файл, и подписывать вторичным хешем на основе контрольной суммы с меткой времени создания/изменения. Как-то так

Zebestov 28.06.2015 01:55

Про первичный-вторичный как для нуба можно? Не забываем, что все, что записано в файл (любой) и имеет неизменный ключ для дешифровки (зашитый внутри приложения) — это не вариант.

AlexCooper 28.06.2015 02:10

Я не претендую на лучший лайф-хак, но представляю это так:
1. При первом запуске собираем первичный ключ - MD5.hash(Capabilities.serverString+networkUID)
2. Сохраняем в файл
3. Создаем вторичный хэш. Контрольная сумма файла + время создания/изменения этого ж файла ( можно так же добавить еще и время создания статического ассета, т.е. какой нить статический файл, который инсталируется вместе с Апп, что даст время установки приложения )

Соотвественно подписываем вторичным хэшем.

Защита получается в несколько уровней, информация из Capabilities.serverString + МАС-адресс.
Если это каким-нить способом подменили, то вторичный ключ не подойдет, так как он имеет в себе первичный ключ + время создания самого апп + время создания первичного ключа.

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

Добавлено через 10 минут
т.е. система обнаружит если:
Не корректные параметры среды
Не корректный мак-адресс
Был изменён первичный ключ
Приложение было установленно не втоже время что и приложение которое подписывало эти данные

caseyryan 28.06.2015 08:22

Цитата:

Приложение было установленно не втоже время что и приложение которое подписывало эти данные
Вот это, по-моему, совершенно бессмысленно. Можно просто дернуть базу данных SQLite и заменить только ее. И пофиг что там и в какое время создавалось. Привязка к маку надежнее.
Вот в данном случае, я бы просто хэш от мак адреса использовал как ключ для шифрования базы данных, и плюс "соль", которая была бы зашита в другую swf, которая встраивалась бы в основную как байт массив. Но и в ней соль не хранил бы в виде строки, а придумал алгоритм генерации в рантайме. Для того, чтобы нельзя было в хексе посмотреть что же там за ключик.

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

Zebestov 28.06.2015 19:30

Да, MAC-адрес подойдет в догонку к строке из топика.
Ну и раскидать ключи по всяким ELS и папкам user/documents.
Полагаю, этого будет достаточно.

caseyryan 28.06.2015 20:05

Цитата:

Ну и раскидать ключи по всяким ELS и папкам user/documents.
Найдут, если они будут в открытом виде храниться.
Вот способ с зашиванием swf как байт массива я уже проверял на мобилах. Из apk файла простые-то данные вытащить проблематично. Что говорить о вшитой swf с рантайм алгоритмом генерации ключа. Думается мне даже этого будет вполне достаточно.
Ну и, кстати, вот у меня в игре, допустим, нет смысла какого-то прокачанного персонажа ставить. Потому что прогресс прокачки идет вместе с прогрессом игры. Зачем нужен прокачанный персонаж, если все уровни при этом уже будут пройдены и снова поиграть в них будет нельзя? Это тоже не маловажный фактор

Zebestov 28.06.2015 20:13

Наверное сделаю swf да.
Что до прокачки, то это я так условно назвал. Речь идет о разлочивании шаблонов в приложении-редакторе. Ну т.е. разлочить их можно постепенно за просмотр рекламы (даже не за деньги). Но кто-то захочет все сразу и быстро. Вот такое хочется пресечь, но без особого фанатизма.

caseyryan 28.06.2015 20:39

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

п.с. Кстати не знаю как в более новых версиях, но версии в 15 эйра у меня часто отваливалась игра (просто вылетала), если со вшитой swf собрать релиз билд. В дебаговом работала отлично, а в релизе не хотела почему-то.

Zebestov 28.06.2015 20:54

А есть обывательские приложения для кулхацкеров на Android/iOS, которые могут скормить приложению поддельный мак-адрес?

Добавлено через 2 часа 34 минуты
И еще, caseyryan, ты под "вшить" понимаешь embed или предлагаешь захардкодить ByteArray в исходниках?

AlexCooper 29.06.2015 08:18

Цитата:

Сообщение от Zebestov (Сообщение 1184226)
А есть обывательские приложения для кулхацкеров на Android/iOS, которые могут скормить приложению поддельный мак-адрес?

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

caseyryan 29.06.2015 09:24

Цитата:

И еще, caseyryan, ты под "вшить" понимаешь embed или предлагаешь захардкодить ByteArray в исходниках?
embed. Можно даже двойную обертку сделать

Zebestov 29.06.2015 11:19

AlexCooper, в общем-то и не стоило сомневаться )
caseyryan, а двойную — это как, ембедить swf-ку с ембедом?

caseyryan 29.06.2015 11:58

Цитата:

caseyryan, а двойную — это как, ембедить swf-ку с ембедом?
Да) Хотя это оверкилл. Но такую штуку ни один декомпилятор не откопает)

Zebestov 29.06.2015 12:13

Ну так оно же кушать не просит :) можно и так сделать.


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

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