Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование чисел, обфускация числовых констант 
:(
    Опции темы
KSURi
Дата 11.2.2008, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Хотелось бы услышать ваши предложения по поводу обфускации чисел. Т.е. нужно превратить данное число в сложное, визуально "пугающее" выражение, которое в итоге все равно дает это заданное число.
Чем больше вариантов, тем лучше)

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

PS: у меня почему-то фантазия в данном направлении работать отказалась =(


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
amg
Дата 11.2.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(KSURi @  11.2.2008,  01:36 Найти цитируемый пост)
визуально "пугающее" выражение
Код

$code = '25 + 42';
$obf_code = obf($code);

print $code, "\n", eval($code), "\n";
print $obf_code, "\n", eval($obf_code), "\n";

sub obf {
  my $code = shift;
  $code =~ s/(\d+)/
    ($_=$1) =~ tr|0-9|"-+|;
    s|'|\\'|g;
    "\${[\$_='$_',y;!-,;\/-:;]}[0]";
  /eg;
  return $code;
}
Я бы испугался smile Хотя расшифровать эти варажения большого труда не составит, но немного подумать придется.

Это сообщение отредактировал(а) amg - 11.2.2008, 12:32
PM MAIL   Вверх
KSURi
Дата 11.2.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



amg, спасибо, пригодится.

Тема все еще актуальна, буду рад вашим предложениям (не только JAPH, но и математическим манипуляциям)

UPDATE2:
на 9ой строке варианта amg лучше будет заменить регулярку вот на эту: 
Код

^(\d+\.?\d*)

чтобы правильно обрабатывать вещественные числа

Это сообщение отредактировал(а) KSURi - 11.2.2008, 15:15


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
AlexPet
Дата 11.2.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: 1
Всего: 1



Цитата(KSURi @  11.2.2008,  01:36 Найти цитируемый пост)
Т.е. нужно превратить данное число в сложное, визуально "пугающее" выражение, которое в итоге все равно дает это заданное число.

Правильно ли я понимаю, что нужно построить некую биекцию (взаимно-однозначное соответствие) между любым числом и неким "пугающим выражением"?
PM MAIL ICQ Jabber   Вверх
KSURi
Дата 11.2.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Прочитал в вики, что такое биекция...) Да, вы правильно поняли.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
amg
Дата 11.2.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(KSURi @  11.2.2008,  13:19 Найти цитируемый пост)
на 9ой строке варианта amg лучше будет заменить регулярку вот на эту
Там еще много чего надо предусмотреть. Например, обработку переменных типа $var123. Нужно рассматривать этот вариант лишь как набросок идеи.

Добавлено через 3 минуты и 50 секунд
Цитата(AlexPet @  11.2.2008,  13:36 Найти цитируемый пост)
взаимно-однозначное соответствие
А я понял, что, кроме этого, скрипт должен правильно исполниться без применения внешних средств (а то можно зазиповать, будет максимально нечитабельно, и взаимно-однозначное соответствие тоже будет)

Добавлено через 14 минут и 47 секунд
Еще одна мысль. Переопределить какой нибудь оператор так, чтобы он, например, декодировал base64, и, соответственно, операндом ему давать закодированное число. Правда, при этом придется к скрипту модуль прилагать.
PM MAIL   Вверх
AlexPet
Дата 11.2.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: 1
Всего: 1



Тогда еще вопрос по математическому преобразованию (безо всяких хитрых обфукаторов и JAPH):
Допустимо ли выдавать вместо числа X функцию F(X), при условии, что известна обратная функция F^{-1}(X), т.ч. F^{-1}(F(X)) = X?
Если да (т.е. не требуется выдавать некое выражение, после применения eval к которому получим исходное число), то таких хитрых функций можно придумать великое множество.
Простейший пример:
F(X) = X*X
F^{-1}(X) = sqrt(X)
(здесь в силу машинной погрешности рискуем не получить исходный икс)
Или так:
F(X) = X + 1
F^{-1} = X - 1

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

Это сообщение отредактировал(а) AlexPet - 11.2.2008, 14:24
PM MAIL ICQ Jabber   Вверх
under_sun
Дата 11.2.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 3.10.2007
Где: Ебург

Репутация: нет
Всего: 17



Цитата(KSURi @  11.2.2008,  13:19 Найти цитируемый пост)
не только JAPH, но и математическим манипуляциям

Вариант с мат. манипуляциями:
Код

$x = 12.34; #0!
$ob = O_o ($x) ;
print "x = $x\nx = $ob = ", eval $ob;

sub O_o {
  my ($n, $a, $b) = shift;
  $n < 0 ? ( $b = ($a = rand -$n) - $n ) : ( $a = $n + ($b = rand $n) ); 
  my $s = "(($a*($a-2) - $b*($b+2) + sqrt($a*$b)*($b-$a+2))/($a + $b - sqrt($a*$b)))/(1 + 2 * ( ($a*$a + $b*$b + $a*$b)/($b*$b*$b - $a*$a*$a) ) )";
  return $s;
}
  
Конечно, не так "страшно", как у amg smile , вот еще примерчик:
Код

$x = 12; #0! 1! - ограничения.
$ob = O_o ($x) ;
print "x = $x\nx = $ob = ", eval $ob;

sub O_o {
  my ($m, $n, $s) = shift;
  $n = sqrt(abs $m) - 1;
  $s = ($m < 0) ? "-exp( log($n) + 0.5*log(4) ) - exp( log(8) * log($n * $n) / (3*log(2))) - 1" : "exp( log($n) + 0.5*log(4) ) + exp( log(8) * log($n * $n) / (3*log(2))) + 1";
  return $s;
}

--------------------
TMTOWTDI
PM MAIL ICQ   Вверх
KSURi
Дата 11.2.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



under_sun, спасибо, результат очень похож на то, на что я нацелился изначально. Осталось внедрить случайную расстановку скобок без влияния на конечный результат, но это я уж сам)

Если можно, вопрос: каким образом вы подбирали цепочку мат. вычислений?


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
AlexPet
Дата 12.2.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: 1
Всего: 1



KSURi, 
under_sun изящно подобрал математические тождества. Знаете, часто в учебниках бывают задачи: "Докажите тождество". Или: "Упростите выражение". Здесь именно это.
В первом случае формулы сокращенного умножения + разложение на множители (и получаем в итоге a - b), во втором случае - свойства натурального логарифма (и получаем в итоге то же m).
Совет - посмотреть учебники 9-11 классов в области преобразований и упрощений ;)

Это сообщение отредактировал(а) AlexPet - 12.2.2008, 09:54
PM MAIL ICQ Jabber   Вверх
under_sun
Дата 12.2.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 3.10.2007
Где: Ебург

Репутация: нет
Всего: 17



AlexPet абсолютно прав, каждое из выражений упрощается с использованием школьных формул.
--------------------
TMTOWTDI
PM MAIL ICQ   Вверх
KSURi
Дата 12.2.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Ну застыдили прям) Спасибо, не обратил внимания.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.