基本上我嘗試在Java中創建惡意軟件檢測程序,檢測程序自修改, 程序應該運行jar文件,並確定它是否包含自我修改代碼的Java操作字節/程序指令/自修改代碼檢測
一個方式,我認爲這樣做是,得到一個.class文件的字節碼初始並將它們進行比較agains正在運行的應用程序文件的字節碼,正在運行的.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程序自修改了不同的方法,我將不勝感激會事先
感謝
你有什麼打算做** **如果應用程序使用*自修改*代碼? –
我只想顯示消息「的應用程序是一個惡意軟件」。該系統即時試圖實現是一個非常基本的惡意軟件檢測系統,所以當它確定自修改代碼,應該把它當作惡意軟件和告知用戶該程序是惡意 –
Java應用程序使用自修改代碼沒有被惡意軟件,你的啓發似乎對我來說。您可能需要調查[JPDA(https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/index.html)。 –