?

Log in

No account? Create an account

Рабочее - Общество дровосеков Бердичева по изучению Мишны

Jul. 18th, 2011

04:58 pm - Рабочее

Previous Entry Share Next Entry

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

std::string obfuscate(const std::string & s) {
    static bool init = false;
    static char shuffle[256];
    if (!init) {
        for (int i = 0; i < 256; i++) shuffle[i] = i;
        std::random_shuffle(shuffle + 'a', shuffle + 'z' + 1);
        std::random_shuffle(shuffle + 'A', shuffle + 'Z' + 1);
        init = true;
    }
    std::string ret;
    for (unsigned i = 0; i < s.size(); i++)
        ret += shuffle[(unsigned char)s[i]];
    return ret;
}
Угадайте, что получилось, с моим-то еврейским счастьем.
Hint: Функцию пришлось переписывать.

Comments:

[User Picture]
From:kdv2005
Date:July 19th, 2011 12:18 am (UTC)
(Link)
Неужли rot13?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 12:26 am (UTC)
(Link)
Я не думаю, что отличил бы rot13 от произвольной пермутации при беглом просмотре.
(Дал подсказку: функцию пришлось переписывать, хотя в ней нет ничего inherently неправильного.)

Edited at 2011-07-19 12:28 am (UTC)
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:yatur
Date:July 19th, 2011 12:33 am (UTC)
(Link)
Генератор ругательств? :)
Цифры на первых позициях?(foobar ==> 42fdq)?
Пробелы в именах? (foobar ==> "dq az")?
Сломаный UTF8?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 12:49 am (UTC)
(Link)
Откуда же? Перемешиваются только два диапазона: a-z и A-Z.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:dtim
Date:July 19th, 2011 12:46 am (UTC)
(Link)
Ключевые слова, комментарии и строковые литералы тоже обфусцировались?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 12:52 am (UTC)
(Link)
Нет. Я менял уже существующий правильно работающий обфускатор, который менял идентификаторы на vNNN. obfuscate() как вызывалась, так и вызывается только для настоящих идентификаторов.
(Reply) (Parent) (Thread)
[User Picture]
From:dvv
Date:July 19th, 2011 12:52 am (UTC)
(Link)
Ключевые слова случались для некоторых переменных?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 12:59 am (UTC)
(Link)
Ага. :) Сначала я напоролся на int, а RNG в STL повторяемый. Когда написал random_shuffle с третьим аргументом и вызывал srandom(time(0)), то при первом запуске напоролся на do. Third time was a charm.
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]
From:kcmamu
Date:July 19th, 2011 01:42 am (UTC)
(Link)
А почему сперва init=false?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 01:48 am (UTC)
(Link)
Чтобы войти в if (!init) при первом вызове функции. Или я не понял вопроса?
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:archaicos
Date:July 19th, 2011 01:52 am (UTC)
(Link)
Ну, она еще не thread-safe, критичность чего, конечно, зависит от использования.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 02:02 am (UTC)
(Link)
Уж не знаю, к счастью или к сожалению, но о thread-safety мне на моей работе совершенно не приходится беспокоиться (последний раз приходилось в 1998 году). Т.е., конечно, где-то в глубине сознания я теоретически знаю, что доступ к глобальным данным нужно защищать, но оформлять это на письме нет ни желания, ни необходимости.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:jukern
Date:July 19th, 2011 02:12 am (UTC)

оффтопик

(Link)
родилось, глядя на этот пост:

не программируй - и непрограммируем будешь! )
(Reply) (Thread)
[User Picture]
From:spamsink
Date:July 19th, 2011 02:24 am (UTC)

Re: оффтопик

(Link)
Нейролингвистически-то? Уверен?
(Reply) (Parent) (Thread)
From:secondary_tea
Date:August 24th, 2011 06:51 am (UTC)
(Link)
логичнее было бы объявить класс и хранить таблицу в объекте, а инит - в конструкторе, нет?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:August 24th, 2011 07:01 am (UTC)
(Link)
Концептуальнее, да. Но ключевые слова "по-быстрому". :)
(Reply) (Parent) (Thread)