spamsink: (Default)
[personal profile] spamsink
Потребовалось мне по делу написать обфускатор (амплуа такое амплуа), пусть и чисто символический, некоего конкретного кода, который не просто заменяет переменные на 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: Функцию пришлось переписывать.

Date: 2011-07-19 12:18 am (UTC)
From: [identity profile] kdv2005.livejournal.com
Неужли rot13?

Date: 2011-07-19 12:49 am (UTC)
From: [identity profile] kdv2005.livejournal.com
Что-то я к вечеру не соображу, в чем дело.

Date: 2011-07-19 01:24 am (UTC)
From: [identity profile] kdv2005.livejournal.com
Так гибнут замыслы с размахом.

Date: 2011-07-19 12:33 am (UTC)
From: [identity profile] yatur.livejournal.com
Генератор ругательств? :)
Цифры на первых позициях?(foobar ==> 42fdq)?
Пробелы в именах? (foobar ==> "dq az")?
Сломаный UTF8?

Date: 2011-07-19 12:58 am (UTC)
From: [identity profile] yatur.livejournal.com
Ах, да. НО это не отменяет генератор ругательств :)

Date: 2011-07-19 12:46 am (UTC)
From: [identity profile] dtim.livejournal.com
Ключевые слова, комментарии и строковые литералы тоже обфусцировались?

Date: 2011-07-19 12:52 am (UTC)
From: [identity profile] dvv.livejournal.com
Ключевые слова случались для некоторых переменных?

Date: 2011-07-19 01:36 am (UTC)
From: [identity profile] dvv.livejournal.com
RNG и должон быть повторяемый. По канонам-то… Я, кстати, ради хохмы посмотрел — gcc+stl в солярисе на спарке и х86 даёт одно и то же, а на фрибсде — уже другое (но тоже повторяемое). Забавно…

А seed от time(0) для нормального параноика маловато будет…

Date: 2011-07-19 02:42 am (UTC)
From: [identity profile] dvv.livejournal.com
Whatchu mean — „у кого-то ещё есть”?! Система вполне популярна среди народу, который инфраструктурные интернетные сервисы пасёт. Я это проверял на релизе фрибсды этого года.

Date: 2011-07-19 03:46 pm (UTC)
From: [identity profile] parovoz.livejournal.com
Уточнение зануды: не RNG, а PRNG (потому и повторяемый).

Date: 2011-07-19 03:58 pm (UTC)
From: [identity profile] parovoz.livejournal.com
Скоро будет! Соответствующий чип уже есть: http://www.intel.com/design/software/drivers/platform/security.htm

Date: 2011-07-19 01:42 am (UTC)
From: [identity profile] kcmamu.livejournal.com
А почему сперва init=false?

Date: 2011-07-19 01:54 am (UTC)
From: [identity profile] kcmamu.livejournal.com
Вопрос про "смысл слова" -- почему вначале false, а не true (естественно, при "init=truе" далее должно быть "if(init) { ... init=false; }").

Date: 2011-07-19 02:11 am (UTC)
From: [identity profile] kcmamu.livejournal.com
От же ж обфускатор!

Date: 2011-07-19 02:11 am (UTC)
From: [identity profile] archaicos.livejournal.com
А я себе предствил сокращение от initialized. Особо одаренные еще могут подумать об initiated, что в принципе, не так далеко от истинной сущности происходящего. :)

Date: 2011-07-19 01:50 am (UTC)
From: [identity profile] archaicos.livejournal.com
Он и shuffle[] - глобальные переменные (из-за static). При первом заходе в ф-цию выполняется тело if. При последующих - нет. Это делает одноразовую инициализацию shuffle[].

Date: 2011-07-19 01:52 am (UTC)
From: [identity profile] archaicos.livejournal.com
Ну, она еще не thread-safe, критичность чего, конечно, зависит от использования.

Date: 2011-07-19 02:08 am (UTC)
From: [identity profile] archaicos.livejournal.com
Сразу представил себе сказочные условия в проекте. :)

Date: 2011-07-19 02:42 am (UTC)
From: [identity profile] archaicos.livejournal.com
То, что это компилятор, сказочности только добавляет. :) Кому-бы компилятор поделать... за деньги... - два удовольствия сразу.

Date: 2011-07-19 03:44 am (UTC)
From: [identity profile] oldjackaroo.livejournal.com
Почему бы компилятору не генерировать параллельно код для нескольких функций в одном файле или не делать параллельно синтаксический разбор веток if-then-else? Или почему бы не просчитывать параллельно разные варианты оптимизации?

Date: 2011-07-19 06:15 am (UTC)
From: [identity profile] rezkiy.livejournal.com
Потому что в это время другое ядро компилирует другой файл этого же проекта. Смысла никакого.

оффтопик

Date: 2011-07-19 02:12 am (UTC)
From: [identity profile] jukern.livejournal.com
родилось, глядя на этот пост:

не программируй - и непрограммируем будешь! )

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 08:04 am
Powered by Dreamwidth Studios