Рубрики
Без рубрики

guard теперь с открытым исходным кодом – запутывание проще простого

Инструмент для обфускации байт-кода Java с открытым исходным кодом, который упрощает обфускацию. Помеченный java, запутывание, байт-код.

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

Я работаю в компании под названием works . Они создают библиотеки для графиков это (имхо) современное состояние, а также веселая компания для работы 🍺

Поскольку эти библиотеки являются сложными, компания очень склонна защищать свою интеллектуальную собственность. В золотой век Java (который был как раз в то время, когда они выпустили это на рынок) было бы крайне важно внедрить некоторые виды защиты, чтобы обеспечить этот IP. Вот почему изначально был разработан guard (примечание: когда я впервые коснулся хранилища, некоторым активам было всего 11 лет).

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

Я составил контрольный список вещей, которые необходимо было решить, прежде чем публиковать его на GitHub:

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

Закончив с этим списком, я рад объявить: мы выпустили guard в дикую природу (некоторое время назад)!

Этот пост, однако, должен быть не только простым объявлением о выпуске, но я собираюсь поместить здесь несколько примеров кода, чтобы стало ясно, что на самом деле делает эта запутанность 💡

Скажем, у нас есть довольно полное Java-приложение, у которого есть точка входа примерно так:

package com.yworks.example;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

Теперь, учитывая, что мы используем Gradle в качестве нашей системы сборки, мы могли бы использовать очень простую задачу guard для запутывания результирующего .jar

task obfuscate {
  dependsOn jar

  doLast {
    ant.taskdef(
            name: 'yguard',
            classname: 'com.yworks.yguard.YGuardTask',
            classpath: sourceSets.main.runtimeClasspath.asPath
    )

    def archivePath = jar.archiveFile.get().asFile.path
    ant.yguard {
      inoutpair(in: archivePath, out: archivePath.replace(".jar", "_obf.jar"))
      shrink(logfile: "${buildDir}/yshrink.log.xml") {
        keep {
          method(name: "void main(java.lang.String[])", "class": application.mainClassName)
        }
      }
      rename(mainclass: application.mainClassName, logfile: "${buildDir}/yguard.log.xml") {
        property(name: "error-checking", value: "pedantic")
      }
    }
  }
}

Это сообщает системе сборки:

  • настройка Муравьиной задачи так что мы можем использовать guard
  • выполните задачу guard с вводом и выводом .jar
  • уменьшите полученный .jar , оставляя только классы и методы , загруженные из главный
  • запутать все имена классов, имена функций, имена переменных, … за исключением для главный

Как только мы вызовем gradle obfuscate , это создаст запутанный .jar , не оставляя ничего, кроме странного следа символов в именах файлов и классах.

Вы заметили свойство файл журнала ? Это самая лучшая часть. Мы можем использовать сопоставление, установленное во время запутывания, для расшифровки трассировок стека!

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

Оригинал: “https://dev.to/fohlen/yguard-is-now-open-source-obfuscation-easy-as-pie-1do5”