Comments 18
Если библиотека внутренняя и для нее просто потерялись исходники — заменить или проапгрейдить ее не получится. Если библиотека сторонняя — скорее всего ее первым делом добавлят в исключения сканирования SAST'ом, анализ зависимостей — это задача для всяких composition analysis и dependency checking решений.
Во-первых, часто компании хотят, чтобы код анализировался у нас/в облаке, но не хотят (или не могут из-за каких-нибудь регламентов) отдавать исходники наружу вообще.
Потом, есть довольно популярный воркфлоу: проанализировать приложение из Google Play и оценить его безопасность. Анализ происходит просто по ссылке на приложение. Никаких исходников тут нет, а какого рода ошибки выявлены — посмотреть надо.
Ну и кейс с легаси-библиотеками уже озвучивали: в таком случае если в библиотеке есть уязвимость, то ее можно либо поправить прямо в байткоде, либо настроить WAF в соответствие с теми уязвимостями, которые найдены, например.
Декомпилируешь тот кусок кода где баг, правишь баг, компилируешь его заново, подкладываешь в JAR-ку.
Итого, нам нужно уметь делать две вещи:
- декомпилировать байткод;
- строить соответствие между инструкциями в байткоде и строками исходного кода.
Спойлер: ни в одном из известных декомпиляторов нету инструментария для того, чтобы осуществить второе.
Так вот же оно: https://github.com/JetBrains/intellij-community/blob/master/plugins/java-decompiler/engine/testData/results/PrivateClasses.dec#L406-L473
Вот же github.com/java-decompiler/jd-core
Спасибо за коммент. Сейчас добавлю ссылку в текст.
Иногда хочется согласиться даже не на декомпиляцию в полноценные Java-исходники, а на удобный просмотр байт-кода. К сожалению, то, что выдаёт javap и "Show bytecode" в IDEA, читать бывает очень сложно. Нужен какой-нибудь "дизассемблер", но чтобы получался легко читаемый текст. А так же желателен "ассемблер", чтобы поправить полученные исходники и скомпилировать в байт-код обратно.
Много лет назад пользовался каким-то дизассемблером, но думаю, он уже давно устарел и не поддериживается.
Вот вам ассемблер и дизассемблер: https://wiki.openjdk.java.net/display/CodeTools/asmtools
Также не могу не отметить патчи над FernFlower в ForgeFlower. Тот же
0025-Add-try-with-resource-support.patch
есть.
Сравнительный анализ некоторых Java-декомпиляторов