Конференция "Прочее" » Генератор мусорного кода на паскале?
 
  • DayGaykin © (31.10.16 14:07) [0]
    Может быть у кого-нибудь есть? Чтобы генерировать функции и процедуры, которые не имеют смысла, но выглядят, будто имеют?
  • DayGaykin © (31.10.16 14:09) [1]
    P.S. И чтобы он еще и собирался.
  • SergeyIT © (31.10.16 14:23) [2]
    Видел наоброт - фунции, которые выглядят будто бред, но имеют большой смысл...
  • Dimka Maslov © (31.10.16 14:30) [3]
    Delphi?
  • DayGaykin © (31.10.16 14:35) [4]

    > Dimka Maslov ©   (31.10.16 14:30) [3]
    > Delphi?

    Delphi подойдет, да
  • stas © (31.10.16 15:54) [5]
    DayGaykin ©   (31.10.16 14:07)
    Другими словами Вам нужно сделать обфускацию кода.
    Ищите, есть готовые обфускаторы.
  • DayGaykin © (31.10.16 15:59) [6]

    > stas ©   (31.10.16 15:54) [5]

    Мне не нужна обфускация. Мне нужен код, который делает бессмысленную работу.
  • Rouse_ © (31.10.16 16:46) [7]
    Вот это возьми и накидай пару тройку ничего не делающих функций:
    https://dl.dropboxusercontent.com/u/70911765/vm_core_demo.zip
    особенно с использованием vmCmp().
    Всего пара тройка строчек, а на выходе глазки сломаешь в дизассемблере (кода нагенерируется реально прорва).
  • NoUser © (31.10.16 18:56) [8]
    > Rouse_ ©  [7]
    "and not mov", в общем, и не рыпайся!  )))

    теперь тебе, наверное, с охраной ходить нужно. ))
  • Rouse_ © (31.10.16 23:52) [9]
    Ну да, там банально стрелка пирса and+not, этого за глаза :)
  • Германн © (01.11.16 00:32) [10]
    Удалено модератором
    Примечание: Правила читаем и уважаем
  • Rouse_ © (03.11.16 15:14) [11]
    Дим, ты хоть отписался бы - подошло или не подошло, или че другое нашел, тогда поделился бы с народом, мне такие вещи тоже интересны :)
  • DayGaykin © (03.11.16 15:27) [12]

    > Rouse_ ©   (03.11.16 15:14) [11]

    Отпишусь.
    Это факультатив, занимаюсь по выходным.
  • Rouse_ © (03.11.16 15:33) [13]
    Ниче се, этож что за факультатив такой что такие задачки дают?
  • DayGaykin © (03.11.16 15:42) [14]

    > Rouse_ ©   (03.11.16 15:33) [13]

    Так это я сам себе. Это еще отсыл к той задаче, что про защиту Java кода. Проблему то нужно решить хоть как-то.
  • Rouse_ © (03.11.16 16:01) [15]
    Ты бы тогда с Ваней Пермяковым связался - от у кого в этом плане голова золотая, он бы тебе подкинул пару идеек в какую сторону вообще смотреть в этом плане.
  • Rouse_ © (03.11.16 16:02) [16]
    Вообще - тут только в сторону виртуализации нужно смотреть, иначе не выйдет.
  • Rouse_ © (03.11.16 16:03) [17]
    На вот тебе, почитай на досуге: http://www.sternkn.com/wp-content/uploads/pdf/vm_showdown_stack_versus_registers.pdf
  • DayGaykin © (03.11.16 16:40) [18]

    > Rouse_ ©   (03.11.16 16:03) [17]
    >

    На начальном этапе мне важно соблюсти баланс между трудозатратами и степенью защиты.
    Мне нужна защита от пересборки java-приложения и от использования его частей. Задачи скрыть логику или какую-либо формулу чего-либо нет. Это облегчает работу.
    Еще облегчает то, что мы имеем полный доступ к ОС (и это всегда linux, хоть и на разных процессорах).
    Усложняет задачу то, что я не хочу отказываться от рефлексии в Java и от динамической подгрузки классов извне.

    Степень защиты - от продвинутого дурака. Человек такого уровня как ты вряд ли будет привлечен для этой задачи.

    Есть несколько идей на данный момент, я их все прорабатываю.

    Идея А

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

    Если перенести код на другой компьютер - работать не будет вообще, что будет подозрительным.

    Идея Б
    Все методы в class-файлах делаются native. Создается .so-шник, который экспортирует все эти native методы. Все методы так или иначе делают вывод ошибки и завершение программы. В добавок .so файл содержит зашифрованные нормальные class-файлы (причем шифрование кодом, для большей запутанности).
    На лету class-файлы подменяются при их загрузке и вся эта "муть" с .so файлами для отвода глаз.

    Хакер подумает, что логика запрятана в .so и сдастся.

    Идея В
    Аналог идеи Б, только native методы реально ими и являются. Т.е. часть логики "нативится". Это сложный путь.

    Как делается расшифровка.
    В линуксе есть замечательная функция L D_P R E L O A D (вставляю пробелы, чтобы по этим словам не находилась тема), с помощью которой замечательно перехватывается функция J a v a_j a v a_l a n g_C l a s s L o a d e r_d e f i n e C l a s s 1, которая превращает байткод в класс. Именно тут я могу и расшифровать класс. Тут же я могу (точнее я надеюсь, что могу) понять идет ли отладка и т. п. При отладке или при наличии открытого терминала перехват не происходит.
    Хорошо еще то, что сам JRE не модифицируется.

    Еще думаю, можно сделать подмену кодов команд байткода, а JRE собрать самому (только я пока не понял, есть ли исходники у Oracle JDK).

    Прошу сильно не ругать.
  • Rouse_ © (03.11.16 17:23) [19]
    Все верно.
    "_Java_java_lang_ClassLoader_defineClass1@32" - перехватываешь в java.dll, подменяешь своей - исполняешь шифрованный байткод.
    У меня есть образчик такого исполнения, но извини - не дам, могу только подсказать :)
 
Конференция "Прочее" » Генератор мусорного кода на паскале?
Есть новые Нет новых   [134431   +14][b:0][p:0.001]