PDA

Просмотр полной версии : Помогите проверить безопастность!


CCCPirate
16.03.2007, 15:11
Уважаемые флэшеры!

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

Спасибо.

etc
16.03.2007, 15:18
apple

Fr@ddy
16.03.2007, 15:24
ссылка не работает

CCCPirate
16.03.2007, 15:30
apple

верно, как узнал?

etc
16.03.2007, 15:32
Секретно :D Не подбор, нет. И в байт-коде я не особо разбираюсь.
А зачем ты зашифровал алгоритм MD5? Какой в этом смысл? По виду строки и так можно определить, что это что-то из MD и, скорее всего, пятый.

Это я к чему клоню-то, к тому, что не шифруют флешом такие вещи, на сервере надо это делать.

CCCPirate
16.03.2007, 15:37
ДА MD5 я хочу использовать чтоб с php сравнивать, механизм такой в игре передается score name и md5(score+name+secret_key_char) потом php делает тоже и сравнивает если равно - значит игрок - не хакер

по идее если ты из флэша стрингу вынул. значит лучше будет генерить secret_key_char на сервере, потом кидать флэшу, потм обратно пхп

iNils
16.03.2007, 15:52
Когда кидаешь флешу, можно перехватить.

верно, как узнал?
constants 'ff', 'MD5', 'src', 'apple', 'gg', 'calculate', 'btn', 'onPress', 'dd', 'text'

Еще вариант
var mc:MovieClip = this.createEmptyMovieClip("mc",0)
mc.loadMovie("md5_secure.swf")
И в дебагер.

CCCPirate
16.03.2007, 15:53
constants 'ff', 'MD5', 'src', 'apple', 'gg', 'calculate', 'btn', 'onPress', 'dd', 'text'

ну если таким способом то игруху с большим кодом вряд ли можно ломануть причем если секретных ключей несколько и они в разном порядке
допустим так:
md5(secret_key_char1+score+secret_key_char2+name+secret_key_char3)

etc
16.03.2007, 16:01
Еще вариант
Проще просто открыть флешом swf :)

iNils
16.03.2007, 16:03
Проще просто открыть флешом swf :)Кроме прямоугольника ничего нет.

iNils
16.03.2007, 16:04
ну если таким способом то игруху с большим кодом вряд ли можно ломануть причем если секретных ключей несколько и они в разном порядке
допустим так:
md5(secret_key_char1+score+secret_key_char2+name+secret_key_char3)Можно, но абсолютной защиты это не даст.

etc
16.03.2007, 16:05
Кроме прямоугольника ничего нет.
А переменные посмотреть? :)

iNils
16.03.2007, 16:16
А переменные посмотреть? :)
Аааа, я импорт сделал :)

iNils
16.03.2007, 16:36
CCCPirate скажи честно, ты в мувике метод MD5 используешь или пока он просто туда вшит?

CCCPirate
16.03.2007, 18:16
Да использую класс MD5

Можно, но абсолютной защиты это не даст.

Главное чтобы енкриптор позволял не раскрывать саму структуру строки для зашивровки, а переменные пусть будут видны. ну или хотя б ограничится одним ключом и хитрой комбинацией вида:

MD5(key+name+score+name+key+game_id+score) и.т.д

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

iNils
16.03.2007, 18:20
Да использую класс MD5
Что то я сомневаюсь. При загрузке я сношу класс md5 совсем, а в текстовом поле после нажатия, все равно отображается зашифрованная строка.

CCCPirate
16.03.2007, 18:29
При загрузке я сношу класс md5 совсем.
Прости, куда ты его сносишь?

iNils
16.03.2007, 18:34
Не куда, а вообще :) Удаляю значит.

CCCPirate
16.03.2007, 18:42
Для особо сомневающихся:

16775

:bye:

А это что-то решает?

iNils
16.03.2007, 18:49
Если я подгружаю твой swf в мой, то могу переназначить функцию по кодированию, а в ней получить кодированные параметры и их значения до кодирования.

CCCPirate
16.03.2007, 18:53
Главное, чтобы ты не получил формулу самой строки кодирования, потму что в php скрипте она такая же и если ты ее заменишь своей, то они дадут разный результат.


Если я подгружаю твой swf в мой, то могу переназначить функцию по кодированию, а в ней получить кодированные параметры и их значения до кодирования.

А не мог бы ты показать, как?

For in и меняешь ASSetPropFlag?

iNils
16.03.2007, 19:22
Главное, чтобы ты не получил формулу самой строки кодирования, потму что в php скрипте она такая же и если ты ее заменишь своей, то они дадут разный результат.
Зачем, когда я и так знаю, что md5?

А не мог бы ты показать, как?

For in и меняешь ASSetPropFlag?
/* Это черный ящик, код который я не знаю */
//// свойств разбросаны по все ролику и их сложно найти
a = 1;
b = 2;
c = 3;
function f (a, b, c) {
//// некое действие типа md5 (a+b+c), пока будет просто
trace ("ля-ля-ля");
}
/// соответсвнно я не вижу параметра, а setTimeout имитирует вызов после какого действия пользователя
setTimeout (f, 1000, a + b + c);
/* конец черного ящика */


/* теперь мой кода */
//// я знаю имя функции, но не знаю число параметров,
//// поэтому я загружаю мувик и после загрузки переопределяют функцию на свою
function f () {
for (var i:Number = 0; i < arguments.length; i++) {
trace (arguments[i]);
}
}

CCCPirate
16.03.2007, 19:34
Ну хорошо, даже если ты будешь знать все передаваемые параметры, ты не можешь знать порядок их попадания в строку для шифрования(это я имел ввиду под термином "формула строки кодирования") т.е.

как ты узнаешь, что итоговая строка складывается не из a+b+c, а например a+b+a+c+c+b+a+a ?

iNils
16.03.2007, 19:40
Ну так ты же ее в метод шифровки передаешь :)
Тебе придется внутри метода уже параметры суммировать хитро. То есть, если ты суммируешь при вызове метода, внутри (), я могу это перехватить.

CCCPirate
16.03.2007, 19:50
Вообщем и целом я пришел к такому алгоритму:
a=player_name
b=player_score
c=game_id
d=еще_что_нибудь_для_перестраховки

делаем e=md5(a+a+b+d+c+a+b+d+d+c)

передаем в php a, b, c, e ( d там установлено одинаковым)

php рассчитывает e=md5(a+a+b+d+c+a+b+d+d+c), сравнивает его с пришедшим, если они равны то a b c - настоящие


Главное спрятать саму (a+a+b+d+c+a+b+d+d+c)

iNils
16.03.2007, 19:53
Я же говорю, не надо делать md5(a+a+b+d+c+a+b+d+d+c). Это перехватывается. Нужно сделать md5(a,b,d,c), а внутри md5 вставить строку которая получает сумму a+a+b+d+c+a+b+d+d+c.

CCCPirate
16.03.2007, 20:02
Я же говорю, не надо делать md5(a+a+b+d+c+a+b+d+d+c). Это перехватывается. Нужно сделать md5(a,b,d,c), а внутри md5 вставить строку которая получает сумму a+a+b+d+c+a+b+d+d+c.

непонял, а как ты перехватишь строку сложенную в входных параметрах метода?
:umnik2: чет я мозг сломал, тогда что. можно и между методами класса отлавливать передачу переменных?

iNils
16.03.2007, 20:03
Я заменяю твою md5 на свою и при вызове md5, получаю твой один параметр.

CCCPirate
16.03.2007, 20:16
Извини пожалуйста, че та я перестал соображать не мог бы ты показать как достать ее отсюда?

var ff:MD5 = new MD5();
a='Name'
b='Arcade'
c=5000
d='key'
e = ff.calculate(тут расположена формула суммы);

16777

iNils
16.03.2007, 20:18
var ff:MD5 = new MD5();
a='Name'
b='Arcade'
c=5000
d='key'
e = ff.calculate(тут расположена формула суммы);

ff.calculate = function (){
for (var i:Number = 0; i < arguments.length; i++) {
trace (arguments[i]);
}
}

KidsKilla
16.03.2007, 20:19
MD5 = function (){}
MD5.prototype.calculate = function(){
trace(arguments)
}
=)))

CCCPirate
16.03.2007, 20:46
Чет не понял, у меня не получается, а какую вы строчку получили из моего последнего мувика?

var ff:MD5 = new MD5();
a='Name'
b='Arcade'
c=5000
d='key'
e = ff.calculate(тут расположена формула суммы);

ff.calculate = function (){
for (var i:Number = 0; i < arguments.length; i++) {
trace (arguments[i]);
}
}
у меня этот код трейсит пустоту:umnik2: ??

KidsKilla
16.03.2007, 20:48
потому что нужно сперва создать MD5 и написать ему MD5.watch

iNils
16.03.2007, 20:56
...Вот так CCCPirate учится взламывать чужие мувики...:D

CCCPirate
16.03.2007, 21:08
...Вот так CCCPirate учится взламывать чужие мувики...:D

Да мне пока бы свой защитить...

Не могли бы вы написать причем здесь watсh?

в любом случае если я складываю переменные я передаю их как аргумент к какой-нибудь функции, независимо внутри puplic или private функция класса, когда я пишу ff.calculate(суммарная строка) я передаю аргумент public методу, если я внутри него просуммирую я так же буду предавать ее другому методу, внутри класса, я так и не понял как вы можете перехватить строку из функции... и если вы это сделали, не могли бы вы сказать какая строчка была в моем последнем примере?

iNils
17.03.2007, 20:02
CCCPirate, накатал тебе пример.
Он предназначен, только для понимания сути и демонстрации того, как могут "ломать" и попытки это избежать (но стоит помнить, что можно рассковырять сам swf, даже если он защищен от декомпиллеров, но слава богу это может не каждый).

В папке Test лежит fla и класс который типа "шифрут" что-то там (md5 не стал использовать, иначе будет слишком сложно), его стоит посмотреть, для понимания что там и как. Из этих двух файлов получился test.swf который лежит уровнем выше и его будем "ломать".

Открываем hack.fla и смотрим его код, там есть подробные комментарии, что и как и последовательность действий. Результат такой: В класс Test я могу узнать последовательность вызовов методов и передаваемые им аргументы, что может помочь взломщику.

При вызове метода calc создается временная функция secret, которую мы не можем получить. Поэтому наверно стоит в данном случаи переписать нужный класс и всем private методы сделать так образом. По крайне мере я не знаю можно ли их будет перехватить.

etc
17.03.2007, 23:03
По крайне мере я не знаю можно ли их будет перехватить.
Уже по байт-коду. Например, от 0x.. до 0x.. в обратную сторону получаем:

...................................................................................................................................................... ..........
[iNils: мы решили ввести тут цензуру, дабы не учить народ, как ломать по серьезному]

Компилируем и получаем:

? , "_local1");
_local1;
var _local2 = _local1["?"];
(function (num) {
function (nums) {
nums = nums / 2;
return (nums);
};
});// not popped

Примерно так. Так сказать, мои скромные двухчасовые ковыряния в формате swf…

Попробовал расшировать md5_secure

Кусок кода:

var ff = new MD5 ();
src = "apple";
gg = ff.calculate(src);
btn.onPress = function () {
dd.text = gg;
};

iNils
17.03.2007, 23:07
Мой пример был расчитан на работу не разбирая сторонними продуктами swf, а работая на прямую с ним.
А CCCPirate кодирует swf, возможно там не будет так просто.

etc
17.03.2007, 23:23
Ну вот и класс MD5 из md5_secure.swf (в AS1 представлении):

if (!_global.MD5) {
var _local1 = function () {
};
_global.MD5 = _local1;
var _local2 = _local1.prototype;
_local2.calculate = function(src) {
return (MD5.hex_md5(src));
};
_local1.hex_md5 = function(src) {
return (MD5.binl2hex(MD5.core_md5(MD5.str2binl(src), src.length*8)));
};
_local1.core_md5 = function(x, len) {
x[len >> 5] = x[len >> 5] | (128 << (len%32));
x[(((len+64) >>> 9) << 4)+14] = len;
var _local4 = 1732584193;
/* 0x67452301 */
var _local3 = -271733879;
var _local2 = -1732584194;
var _local1 = 271733878;
/* 0x10325476 */
var _local5 = 0;
while (_local5<x.length) {
var _local10 = _local4;
var _local9 = _local3;
var _local8 = _local2;
var _local7 = _local1;
_local4 = MD5.md5_ff(_local4, _local3, _local2, _local1, x[_local5+0], 7, -680876936);
_local1 = MD5.md5_ff(_local1, _local4, _local3, _local2, x[_local5+1], 12, -389564586);
_local2 = MD5.md5_ff(_local2, _local1, _local4, _local3, x[_local5+2], 17, 606105819);
_local3 = MD5.md5_ff(_local3, _local2, _local1, _local4, x[_local5+3], 22, -1044525330);
_local4 = MD5.md5_ff(_local4, _local3, _local2, _local1, x[_local5+4], 7, -176418897);
_local1 = MD5.md5_ff(_local1, _local4, _local3, _local2, x[_local5+5], 12, 1200080426);
_local2 = MD5.md5_ff(_local2, _local1, _local4, _local3, x[_local5+6], 17, -1473231341);
_local3 = MD5.md5_ff(_local3, _local2, _local1, _local4, x[_local5+7], 22, -45705983);
_local4 = MD5.md5_ff(_local4, _local3, _local2, _local1, x[_local5+8], 7, 1770035416);
_local1 = MD5.md5_ff(_local1, _local4, _local3, _local2, x[_local5+9], 12, -1958414417);
_local2 = MD5.md5_ff(_local2, _local1, _local4, _local3, x[_local5+10], 17, -42063);
_local3 = MD5.md5_ff(_local3, _local2, _local1, _local4, x[_local5+11], 22, -1990404162);
_local4 = MD5.md5_ff(_local4, _local3, _local2, _local1, x[_local5+12], 7, 1804603682);
_local1 = MD5.md5_ff(_local1, _local4, _local3, _local2, x[_local5+13], 12, -40341101);
_local2 = MD5.md5_ff(_local2, _local1, _local4, _local3, x[_local5+14], 17, -1502002290);
_local3 = MD5.md5_ff(_local3, _local2, _local1, _local4, x[_local5+15], 22, 1236535329);
_local4 = MD5.md5_gg(_local4, _local3, _local2, _local1, x[_local5+1], 5, -165796510);
_local1 = MD5.md5_gg(_local1, _local4, _local3, _local2, x[_local5+6], 9, -1069501632);
_local2 = MD5.md5_gg(_local2, _local1, _local4, _local3, x[_local5+11], 14, 643717713);
_local3 = MD5.md5_gg(_local3, _local2, _local1, _local4, x[_local5+0], 20, -373897302);
_local4 = MD5.md5_gg(_local4, _local3, _local2, _local1, x[_local5+5], 5, -701558691);
_local1 = MD5.md5_gg(_local1, _local4, _local3, _local2, x[_local5+10], 9, 38016083);
_local2 = MD5.md5_gg(_local2, _local1, _local4, _local3, x[_local5+15], 14, -660478335);
_local3 = MD5.md5_gg(_local3, _local2, _local1, _local4, x[_local5+4], 20, -405537848);
_local4 = MD5.md5_gg(_local4, _local3, _local2, _local1, x[_local5+9], 5, 568446438);
_local1 = MD5.md5_gg(_local1, _local4, _local3, _local2, x[_local5+14], 9, -1019803690);
_local2 = MD5.md5_gg(_local2, _local1, _local4, _local3, x[_local5+3], 14, -187363961);
_local3 = MD5.md5_gg(_local3, _local2, _local1, _local4, x[_local5+8], 20, 1163531501);
_local4 = MD5.md5_gg(_local4, _local3, _local2, _local1, x[_local5+13], 5, -1444681467);
_local1 = MD5.md5_gg(_local1, _local4, _local3, _local2, x[_local5+2], 9, -51403784);
_local2 = MD5.md5_gg(_local2, _local1, _local4, _local3, x[_local5+7], 14, 1735328473);
_local3 = MD5.md5_gg(_local3, _local2, _local1, _local4, x[_local5+12], 20, -1926607734);
_local4 = MD5.md5_hh(_local4, _local3, _local2, _local1, x[_local5+5], 4, -378558);
_local1 = MD5.md5_hh(_local1, _local4, _local3, _local2, x[_local5+8], 11, -2022574463);
_local2 = MD5.md5_hh(_local2, _local1, _local4, _local3, x[_local5+11], 16, 1839030562);
_local3 = MD5.md5_hh(_local3, _local2, _local1, _local4, x[_local5+14], 23, -35309556);
_local4 = MD5.md5_hh(_local4, _local3, _local2, _local1, x[_local5+1], 4, -1530992060);
_local1 = MD5.md5_hh(_local1, _local4, _local3, _local2, x[_local5+4], 11, 1272893353);
_local2 = MD5.md5_hh(_local2, _local1, _local4, _local3, x[_local5+7], 16, -155497632);
_local3 = MD5.md5_hh(_local3, _local2, _local1, _local4, x[_local5+10], 23, -1094730640);
_local4 = MD5.md5_hh(_local4, _local3, _local2, _local1, x[_local5+13], 4, 681279174);
_local1 = MD5.md5_hh(_local1, _local4, _local3, _local2, x[_local5+0], 11, -358537222);
_local2 = MD5.md5_hh(_local2, _local1, _local4, _local3, x[_local5+3], 16, -722521979);
_local3 = MD5.md5_hh(_local3, _local2, _local1, _local4, x[_local5+6], 23, 76029189);
_local4 = MD5.md5_hh(_local4, _local3, _local2, _local1, x[_local5+9], 4, -640364487);
_local1 = MD5.md5_hh(_local1, _local4, _local3, _local2, x[_local5+12], 11, -421815835);
_local2 = MD5.md5_hh(_local2, _local1, _local4, _local3, x[_local5+15], 16, 530742520);
_local3 = MD5.md5_hh(_local3, _local2, _local1, _local4, x[_local5+2], 23, -995338651);
_local4 = MD5.md5_ii(_local4, _local3, _local2, _local1, x[_local5+0], 6, -198630844);
_local1 = MD5.md5_ii(_local1, _local4, _local3, _local2, x[_local5+7], 10, 1126891415);
_local2 = MD5.md5_ii(_local2, _local1, _local4, _local3, x[_local5+14], 15, -1416354905);
_local3 = MD5.md5_ii(_local3, _local2, _local1, _local4, x[_local5+5], 21, -57434055);
_local4 = MD5.md5_ii(_local4, _local3, _local2, _local1, x[_local5+12], 6, 1700485571);
_local1 = MD5.md5_ii(_local1, _local4, _local3, _local2, x[_local5+3], 10, -1894986606);
_local2 = MD5.md5_ii(_local2, _local1, _local4, _local3, x[_local5+10], 15, -1051523);
_local3 = MD5.md5_ii(_local3, _local2, _local1, _local4, x[_local5+1], 21, -2054922799);
_local4 = MD5.md5_ii(_local4, _local3, _local2, _local1, x[_local5+8], 6, 1873313359);
_local1 = MD5.md5_ii(_local1, _local4, _local3, _local2, x[_local5+15], 10, -30611744);
_local2 = MD5.md5_ii(_local2, _local1, _local4, _local3, x[_local5+6], 15, -1560198380);
_local3 = MD5.md5_ii(_local3, _local2, _local1, _local4, x[_local5+13], 21, 1309151649);
_local4 = MD5.md5_ii(_local4, _local3, _local2, _local1, x[_local5+4], 6, -145523070);
_local1 = MD5.md5_ii(_local1, _local4, _local3, _local2, x[_local5+11], 10, -1120210379);
_local2 = MD5.md5_ii(_local2, _local1, _local4, _local3, x[_local5+2], 15, 718787259);
_local3 = MD5.md5_ii(_local3, _local2, _local1, _local4, x[_local5+9], 21, -343485551);
_local4 = MD5.safe_add(_local4, _local10);
_local3 = MD5.safe_add(_local3, _local9);
_local2 = MD5.safe_add(_local2, _local8);
_local1 = MD5.safe_add(_local1, _local7);
_local5 = _local5+16;
}
return (new Array(_local4, _local3, _local2, _local1));
};
_local1.md5_cmn = function(q, a, b, x, s, t) {
return (MD5.safe_add(MD5.bit_rol(MD5.safe_add(MD5.safe_add(a, q), MD5.safe_add(x, t)), s), b));
};
_local1.md5_ff = function(a, b, c, d, x, s, t) {
return (MD5.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t));
};
_local1.md5_gg = function(a, b, c, d, x, s, t) {
return (MD5.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t));
};
_local1.md5_hh = function(a, b, c, d, x, s, t) {
return (MD5.md5_cmn((b ^ c) ^ d, a, b, x, s, t));
};
_local1.md5_ii = function(a, b, c, d, x, s, t) {
return (MD5.md5_cmn(c ^ (b | (~d)), a, b, x, s, t));
};
_local1.bit_rol = function(num, cnt) {
return ((num << cnt) | (num >>> (32-cnt)));
};
_local1.safe_add = function(x, y) {
var _local1 = (x & 65535)+(y & 65535);
var _local2 = ((x >> 16)+(y >> 16))+(_local1 >> 16);
return ((_local2 << 16) | (_local1 & 65535));
};
_local1.str2binl = function(str) {
var _local3 = new Array();
var _local4 = 255;
var _local1 = 0;
while (_local1<(str.length*8)) {
_local3[_local1 >> 5] = _local3[_local1 >> 5] | ((str.charCodeAt(_local1/8) & _local4) << (_local1%32));
_local1 = _local1+8;
}
return (_local3);
};
_local1.binl2hex = function(binarray) {
var _local4 = new String("");
var _local3 = new String("0123456789abcdef");
var _local1 = 0;
while (_local1<(binarray.length*4)) {
_local4 = _local4+(_local3.charAt((binarray[_local1 >> 2] >> (((_local1%4)*8)+4)) & 15)+_local3.charAt((binarray[_local1 >> 2] >> ((_local1%4)*8)) & 15));
_local1++;
}
return (_local4);
};
(ASSetPropFlags(_global.MD5.prototype, null, 1));
// not popped
}

Можно сравнить с исходным.

iNils
17.03.2007, 23:38
Короче, все ломается :)

etc
17.03.2007, 23:42
CCCPirate, на тебе твою формулу:

var ff = new MD5 ();
a = "Name";
b = "Arcade";
c = 5000;
d = "key";
e = ff.calculate(((((((a + d) + c) + a) + d) + a) + b) + c);

:D

CCCPirate
18.03.2007, 00:49
Браво __etc! , аплодирую стоя!

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

*Примерно так. Так сказать, мои скромные двухчасовые ковыряния в формате swf…

-отсюда вопрос, если б файл состоял из 30 классов по 200-300 строк и был бы размером эдак в 500-1000 кб, эти ковыряния были бы настолько же успешны? и заняли бы они при этом столько же времени?

etc
18.03.2007, 01:04
В принципе да. Особой сложности нет.

CCCPirate
18.03.2007, 01:09
Ща пытаюсь нагуглить на тему того, что вы там цензурой повырезали)))

Может, когда пойму, тогда че-нють поострее придумаю

etc
18.03.2007, 01:11
Я нагуглил лишь описание формата swf, остальное методом тыка, проб и ошибок.

nuran
18.03.2007, 02:59
Браво __etc! , аплодирую стоя!

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

*Примерно так. Так сказать, мои скромные двухчасовые ковыряния в формате swf…

-отсюда вопрос, если б файл состоял из 30 классов по 200-300 строк и был бы размером эдак в 500-1000 кб, эти ковыряния были бы настолько же успешны? и заняли бы они при этом столько же времени?
чем больше зашифрованного кода тем сложнее ковыряния, правда смотря как шифруеться

etc
18.03.2007, 03:23
Сложнее-то сложнее, но рано или поздно будет сломано.

CCCPirate
18.03.2007, 04:48
чем больше зашифрованного кода тем сложнее ковыряния, правда смотря как шифруеться

шифруется все swfencryptom 3 на среднем уровне bytesizа и intesity в принципе можно и на максимум вывести,
мне главное не весь код спрятать, а лишь спрятать ту строку, которая показывает, что было вложено в мой мд5 шивровальщик , но так как я пока не разобрался с тем что творил __etc я не могу понять как ее лучше прятать...

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

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

...еще конечно надо мне прояснить как же там __etc ухитрился все выципить, но в принципе для highscore листа игрухи защита такая может оказаться вполне надежной, тем более еще остаются SQL-php хакеры, а всем не угодишь))). все-таки аркада - это не интернет казино:bye:

nuran
18.03.2007, 04:58
надо самому разбираться в формате SWF и шифровать вручную а не черзе сторонние проги, которые рано или поздно взломают...

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

etc
18.03.2007, 16:32
в принципе для highscore листа игрухи защита такая может оказаться вполне надежной
Сделаешь игру, кинь ссылку :D

iNils
18.03.2007, 16:34
Сделаешь игру, кинь ссылку :D
Ага, а то зря мы что ли ломали:taunt: Надо будет воспользоваться наработками.

CCCPirate
18.03.2007, 22:46
кстати там планируется логи писать - можно будет проверить реальность результатов, но на всякий случай ники iNils и __etc я планирую заносить в таблицу только после личной верификации)))

etc
18.03.2007, 23:28
Заноси, заноси :D
Мы под другими зашифруемся.

iNils
19.03.2007, 03:49
Нас можно сразу в таблице на самом верху поставить :) Результаты убрать и написать, что боги :)

etc
19.03.2007, 12:58
Тогда не надо вообще таблицы)

iNils
19.03.2007, 13:01
Тогда не надо вообще таблицы)
Согласен, мы вне таблицы (какой смысл с нами соревноваться?)

CCCPirate
19.03.2007, 17:18
Эт мы еще посмотрим товарищи хацкеры=)))