в основном им пытаются создать вредоносные программы обнаружения в Java, что обнаружить самомодифицирующийся код, программы должны запустить файл банки и определить, если он содержит самостоятельно модифицировать кодява инструкция манипулирования байткода/программа/самостоятельное обнаружение модифицирования кода
в один конец, я решил сделать это, получив исходный байт-код файла .class, и они сравнивают его с запущенным байтовым файлом приложения, байт-код работающего .class-файла должен быть таким же и изначально, если байт-код разный в определенный момент это означало бы, что программа модифицирует свою собственную структуру
вопрос в том, как получить байт-код работающего приложения Я хочу получить байт-код каждые 0,1 секунды и сравнить его с исходным байт-кодом.
есть в любом случае, чтобы получить его?
Я попробовал его с помощью java-агента, и ASM, однако, я мог получить только байт-код перед тем, как программа будет выполнена, а java-агент запускается до того, как будет запущен основной метод программы.
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
public class asm {
//java agent
public static void premain(String agentArgs, Instrumentation inst){
inst.addTransformer(new ClassFileTransformer() {
@Override
public byte[] transform(ClassLoader classLoader, /*class name*/String s, Class<?> aClass, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException {
if ("other/Stuff".equals(s)) {
// ASM Code
ClassReader reader = new ClassReader(bytes);
ClassWriter writer = new ClassWriter(reader, 0);
//ClassPrinter visitor = new ClassPrinter(writer);
//reader.accept(visitor, 0);
return writer.toByteArray();
}
//else{
//System.out.println("class not loaded");
return null;
//}
}
})
}
этот код использует Java агента и ASM, однако то, что мне нужно знать, как я получаю байт-код приложения во время его выполнения. также, если кто-то может предложить другой подход о том, как определить самомодифицирующийся код в Java, я был бы признателен
заранее спасибо
Что вы намерены делать ** если ** приложение использует * самомодифицирующийся * код? –
Я бы просто хотел показать сообщение «приложение является вредоносным ПО». система im, пытающаяся реализовать, является очень простой системой обнаружения вредоносных программ, поэтому, когда она идентифицирует самомодифицирующий код, она должна рассматривать ее как вредоносную программу и информировать пользователя о том, что эта программа является вредоносным. –
Приложения Java используют самомодифицирующийся код без вредоносного ПО, ваш эвристический кажется мне. Вы можете изучить [JPDA] (https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/index.html). –