commit
0b7873f5a6
|
@ -60,6 +60,7 @@ _*.txt
|
|||
_*.diff
|
||||
tmp/
|
||||
|
||||
bindings/java/unicorn_Unicorn.h
|
||||
bindings/python/build/
|
||||
bindings/python/dist/
|
||||
bindings/python/src/
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
|
||||
.PHONY: gen_const clean
|
||||
|
||||
JAVA_HOME := $(shell jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')
|
||||
JC=javac
|
||||
|
||||
JAVA_INC := $(shell realpath $(JAVA_HOME)/../include)
|
||||
JAVA_HOME := $(shell readlink -f `which $(JC)` | sed "s:/bin/$(JC)::")
|
||||
|
||||
JAVA_INC := $(shell realpath $(JAVA_HOME)/include)
|
||||
|
||||
JAVA_PLATFORM_INC := $(shell dirname `find $(JAVA_INC) -name jni_md.h`)
|
||||
|
||||
|
@ -28,7 +30,6 @@ LIBS=-lunicorn
|
|||
LIBDIR=-L../../
|
||||
INCS=-I$(JAVA_INC) -I$(JAVA_PLATFORM_INC) -I$(UNICORN_INC)
|
||||
|
||||
JC=javac
|
||||
CLASSPATH=./
|
||||
|
||||
.SUFFIXES: .java .class
|
||||
|
@ -46,7 +47,7 @@ all: lib jar samples
|
|||
$(CC) -c $(CFLAGS) $(INCS) $< -o $@
|
||||
|
||||
unicorn_Unicorn.h: unicorn/Unicorn.java
|
||||
javah unicorn.Unicorn
|
||||
javac -h . $<
|
||||
|
||||
unicorn_Unicorn.o: unicorn_Unicorn.c unicorn_Unicorn.h
|
||||
$(CC) -c $(CFLAGS) $(INCS) $< -o $@
|
||||
|
@ -63,12 +64,12 @@ jar: jarfiles
|
|||
jar cf $(JARFILE) unicorn/*.class
|
||||
|
||||
install: lib jar
|
||||
cp libunicorn_java$(LIB_EXT) $(JAVA_HOME)/lib/ext
|
||||
cp $(JARFILE) $(JAVA_HOME)/lib/ext
|
||||
cp libunicorn_java$(LIB_EXT) /usr/lib
|
||||
cp $(JARFILE) /usr/share/java
|
||||
|
||||
uninstall:
|
||||
rm $(JAVA_HOME)/lib/ext/libunicorn_java$(LIB_EXT)
|
||||
rm $(JAVA_HOME)/lib/ext/$(JARFILE)
|
||||
rm /usr/lib/libunicorn_java$(LIB_EXT)
|
||||
rm /usr/share/java/$(JARFILE)
|
||||
|
||||
gen_const:
|
||||
cd .. && python const_generator.py java
|
||||
|
|
|
@ -30,12 +30,12 @@ import java.util.*;
|
|||
|
||||
public class SampleNetworkAuditing {
|
||||
|
||||
public static int next_id = 3;
|
||||
public static long next_id = 3;
|
||||
public static final int SIZE_REG = 4;
|
||||
|
||||
private static LogChain fd_chains = new LogChain();
|
||||
|
||||
public static int get_id() {
|
||||
public static long get_id() {
|
||||
return next_id++;
|
||||
}
|
||||
|
||||
|
@ -112,7 +112,7 @@ public class SampleNetworkAuditing {
|
|||
long mode = edx;
|
||||
String filename = read_string(uc, filename_addr);
|
||||
|
||||
Long dummy_fd = new Long(get_id());
|
||||
Long dummy_fd = get_id();
|
||||
uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd);
|
||||
|
||||
String msg = String.format("open file (filename=%s flags=%d mode=%d) with fd(%d)", filename, flags, mode, dummy_fd);
|
||||
|
@ -144,8 +144,8 @@ public class SampleNetworkAuditing {
|
|||
long sock_type = toInt(uc.mem_read(args + SIZE_REG, SIZE_REG));
|
||||
long protocol = toInt(uc.mem_read(args + SIZE_REG * 2, SIZE_REG));
|
||||
|
||||
Long dummy_fd = new Long(get_id());
|
||||
uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd.intValue());
|
||||
Long dummy_fd = get_id();
|
||||
uc.reg_write(Unicorn.UC_X86_REG_EAX, dummy_fd);
|
||||
|
||||
if (family == 2) { // AF_INET
|
||||
String msg = String.format("create socket (%s, %s) with fd(%d)", ADDR_FAMILY.get(family), SOCKET_TYPES.get(sock_type), dummy_fd);
|
||||
|
@ -401,7 +401,7 @@ public class SampleNetworkAuditing {
|
|||
mu.mem_write(ADDRESS, code);
|
||||
|
||||
// initialize stack
|
||||
mu.reg_write(Unicorn.UC_X86_REG_ESP, new Long(ADDRESS + 0x200000));
|
||||
mu.reg_write(Unicorn.UC_X86_REG_ESP, ADDRESS + 0x200000L);
|
||||
|
||||
// handle interrupt ourself
|
||||
mu.hook_add(new MyInterruptHook(), null);
|
||||
|
|
|
@ -40,9 +40,9 @@ public class Sample_arm {
|
|||
static void test_arm()
|
||||
{
|
||||
|
||||
Long r0 = new Long(0x1234); // R0 register
|
||||
Long r2 = new Long(0x6789); // R1 register
|
||||
Long r3 = new Long(0x3333); // R2 register
|
||||
Long r0 = 0x1234L; // R0 register
|
||||
Long r2 = 0x6789L; // R1 register
|
||||
Long r3 = 0x3333L; // R2 register
|
||||
Long r1; // R1 register
|
||||
|
||||
System.out.print("Emulate ARM code\n");
|
||||
|
@ -85,7 +85,7 @@ public class Sample_arm {
|
|||
static void test_thumb()
|
||||
{
|
||||
|
||||
Long sp = new Long(0x1234); // R0 register
|
||||
Long sp = 0x1234L; // R0 register
|
||||
|
||||
System.out.print("Emulate THUMB code\n");
|
||||
|
||||
|
|
|
@ -69,9 +69,9 @@ public class Sample_arm64 {
|
|||
static void test_arm64()
|
||||
{
|
||||
|
||||
Long x11 = new Long(0x1234); // X11 register
|
||||
Long x13 = new Long(0x6789); // X13 register
|
||||
Long x15 = new Long(0x3333); // X15 register
|
||||
Long x11 = 0x1234L; // X11 register
|
||||
Long x13 = 0x6789L; // X13 register
|
||||
Long x15 = 0x3333L; // X15 register
|
||||
|
||||
System.out.print("Emulate ARM64 code\n");
|
||||
|
||||
|
|
|
@ -68,26 +68,26 @@ public class Sample_m68k {
|
|||
|
||||
static void test_m68k()
|
||||
{
|
||||
Long d0 = new Long(0x0000); // d0 data register
|
||||
Long d1 = new Long(0x0000); // d1 data register
|
||||
Long d2 = new Long(0x0000); // d2 data register
|
||||
Long d3 = new Long(0x0000); // d3 data register
|
||||
Long d4 = new Long(0x0000); // d4 data register
|
||||
Long d5 = new Long(0x0000); // d5 data register
|
||||
Long d6 = new Long(0x0000); // d6 data register
|
||||
Long d7 = new Long(0x0000); // d7 data register
|
||||
|
||||
Long a0 = new Long(0x0000); // a0 address register
|
||||
Long a1 = new Long(0x0000); // a1 address register
|
||||
Long a2 = new Long(0x0000); // a2 address register
|
||||
Long a3 = new Long(0x0000); // a3 address register
|
||||
Long a4 = new Long(0x0000); // a4 address register
|
||||
Long a5 = new Long(0x0000); // a5 address register
|
||||
Long a6 = new Long(0x0000); // a6 address register
|
||||
Long a7 = new Long(0x0000); // a6 address register
|
||||
|
||||
Long pc = new Long(0x0000); // program counter
|
||||
Long sr = new Long(0x0000); // status register
|
||||
Long d0 = 0x0000L; // d0 data register
|
||||
Long d1 = 0x0000L; // d1 data register
|
||||
Long d2 = 0x0000L; // d2 data register
|
||||
Long d3 = 0x0000L; // d3 data register
|
||||
Long d4 = 0x0000L; // d4 data register
|
||||
Long d5 = 0x0000L; // d5 data register
|
||||
Long d6 = 0x0000L; // d6 data register
|
||||
Long d7 = 0x0000L; // d7 data register
|
||||
|
||||
Long a0 = 0x0000L; // a0 address register
|
||||
Long a1 = 0x0000L; // a1 address register
|
||||
Long a2 = 0x0000L; // a2 address register
|
||||
Long a3 = 0x0000L; // a3 address register
|
||||
Long a4 = 0x0000L; // a4 address register
|
||||
Long a5 = 0x0000L; // a5 address register
|
||||
Long a6 = 0x0000L; // a6 address register
|
||||
Long a7 = 0x0000L; // a6 address register
|
||||
|
||||
Long pc = 0x0000L; // program counter
|
||||
Long sr = 0x0000L; // status register
|
||||
|
||||
System.out.print("Emulate M68K code\n");
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ public class Sample_mips {
|
|||
static void test_mips_eb()
|
||||
{
|
||||
|
||||
Long r1 = new Long(0x6789); // R1 register
|
||||
Long r1 = 0x6789L; // R1 register
|
||||
|
||||
System.out.print("Emulate MIPS code (big-endian)\n");
|
||||
|
||||
|
@ -107,7 +107,7 @@ public class Sample_mips {
|
|||
|
||||
static void test_mips_el()
|
||||
{
|
||||
Long r1 = new Long(0x6789); // R1 register
|
||||
Long r1 = 0x6789L; // R1 register
|
||||
|
||||
System.out.print("===========================\n");
|
||||
System.out.print("Emulate MIPS code (little-endian)\n");
|
||||
|
|
|
@ -69,9 +69,9 @@ public class Sample_sparc {
|
|||
|
||||
static void test_sparc()
|
||||
{
|
||||
Long g1 = new Long(0x1230); // G1 register
|
||||
Long g2 = new Long(0x6789); // G2 register
|
||||
Long g3 = new Long(0x5555); // G3 register
|
||||
Long g1 = 0x1230L; // G1 register
|
||||
Long g2 = 0x6789L; // G2 register
|
||||
Long g3 = 0x5555L; // G3 register
|
||||
|
||||
System.out.print("Emulate SPARC code\n");
|
||||
|
||||
|
|
|
@ -171,8 +171,8 @@ public class Sample_x86 {
|
|||
}
|
||||
|
||||
static void test_i386() {
|
||||
Long r_ecx = new Long(0x1234); // ECX register
|
||||
Long r_edx = new Long(0x7890); // EDX register
|
||||
Long r_ecx = 0x1234L; // ECX register
|
||||
Long r_edx = 0x7890L; // EDX register
|
||||
|
||||
System.out.print("Emulate i386 code\n");
|
||||
|
||||
|
@ -234,8 +234,8 @@ public class Sample_x86 {
|
|||
|
||||
static void test_i386_inout()
|
||||
{
|
||||
Long r_eax = new Long(0x1234); // ECX register
|
||||
Long r_ecx = new Long(0x6789); // EDX register
|
||||
Long r_eax = 0x1234L; // ECX register
|
||||
Long r_ecx = 0x6789L; // EDX register
|
||||
|
||||
System.out.print("===================================\n");
|
||||
System.out.print("Emulate i386 code with IN/OUT instructions\n");
|
||||
|
@ -309,8 +309,8 @@ public class Sample_x86 {
|
|||
// emulate code that loop forever
|
||||
static void test_i386_loop()
|
||||
{
|
||||
Long r_ecx = new Long(0x1234); // ECX register
|
||||
Long r_edx = new Long(0x7890); // EDX register
|
||||
Long r_ecx = 0x1234L; // ECX register
|
||||
Long r_edx = 0x7890L; // EDX register
|
||||
|
||||
System.out.print("===================================\n");
|
||||
System.out.print("Emulate i386 code that loop forever\n");
|
||||
|
@ -346,8 +346,8 @@ public class Sample_x86 {
|
|||
// emulate code that read invalid memory
|
||||
static void test_i386_invalid_mem_read()
|
||||
{
|
||||
Long r_ecx = new Long(0x1234); // ECX register
|
||||
Long r_edx = new Long(0x7890); // EDX register
|
||||
Long r_ecx = 0x1234L; // ECX register
|
||||
Long r_edx = 0x7890L; // EDX register
|
||||
|
||||
System.out.print("===================================\n");
|
||||
System.out.print("Emulate i386 code that read from invalid memory\n");
|
||||
|
@ -393,8 +393,8 @@ public class Sample_x86 {
|
|||
// emulate code that read invalid memory
|
||||
static void test_i386_invalid_mem_write()
|
||||
{
|
||||
Long r_ecx = new Long(0x1234); // ECX register
|
||||
Long r_edx = new Long(0x7890); // EDX register
|
||||
Long r_ecx = 0x1234L; // ECX register
|
||||
Long r_edx = 0x7890L; // EDX register
|
||||
|
||||
System.out.print("===================================\n");
|
||||
System.out.print("Emulate i386 code that write to invalid memory\n");
|
||||
|
@ -453,8 +453,8 @@ public class Sample_x86 {
|
|||
// emulate code that jump to invalid memory
|
||||
static void test_i386_jump_invalid()
|
||||
{
|
||||
Long r_ecx = new Long(0x1234); // ECX register
|
||||
Long r_edx = new Long(0x7890); // EDX register
|
||||
Long r_ecx = 0x1234L; // ECX register
|
||||
Long r_edx = 0x7890L; // EDX register
|
||||
|
||||
System.out.print("===================================\n");
|
||||
System.out.print("Emulate i386 code that jumps to invalid memory\n");
|
||||
|
@ -527,22 +527,22 @@ public class Sample_x86 {
|
|||
u.mem_write(ADDRESS, X86_CODE64);
|
||||
|
||||
// initialize machine registers
|
||||
u.reg_write(Unicorn.UC_X86_REG_RSP, new Long(rsp));
|
||||
|
||||
u.reg_write(Unicorn.UC_X86_REG_RAX, new Long(rax));
|
||||
u.reg_write(Unicorn.UC_X86_REG_RBX, new Long(rbx));
|
||||
u.reg_write(Unicorn.UC_X86_REG_RCX, new Long(rcx));
|
||||
u.reg_write(Unicorn.UC_X86_REG_RDX, new Long(rdx));
|
||||
u.reg_write(Unicorn.UC_X86_REG_RSI, new Long(rsi));
|
||||
u.reg_write(Unicorn.UC_X86_REG_RDI, new Long(rdi));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R8, new Long(r8));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R9, new Long(r9));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R10, new Long(r10));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R11, new Long(r11));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R12, new Long(r12));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R13, new Long(r13));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R14, new Long(r14));
|
||||
u.reg_write(Unicorn.UC_X86_REG_R15, new Long(r15));
|
||||
u.reg_write(Unicorn.UC_X86_REG_RSP, rsp);
|
||||
|
||||
u.reg_write(Unicorn.UC_X86_REG_RAX, rax);
|
||||
u.reg_write(Unicorn.UC_X86_REG_RBX, rbx);
|
||||
u.reg_write(Unicorn.UC_X86_REG_RCX, rcx);
|
||||
u.reg_write(Unicorn.UC_X86_REG_RDX, rdx);
|
||||
u.reg_write(Unicorn.UC_X86_REG_RSI, rsi);
|
||||
u.reg_write(Unicorn.UC_X86_REG_RDI, rdi);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R8, r8);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R9, r9);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R10, r10);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R11, r11);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R12, r12);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R13, r13);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R14, r14);
|
||||
u.reg_write(Unicorn.UC_X86_REG_R15, r15);
|
||||
|
||||
// tracing all basic blocks with customized callback
|
||||
u.hook_add(new MyBlockHook(), 1, 0, null);
|
||||
|
@ -598,9 +598,9 @@ public class Sample_x86 {
|
|||
|
||||
static void test_x86_16()
|
||||
{
|
||||
Long eax = new Long(7);
|
||||
Long ebx = new Long(5);
|
||||
Long esi = new Long(6);
|
||||
Long eax = 7L;
|
||||
Long ebx = 5L;
|
||||
Long esi = 6L;
|
||||
|
||||
System.out.print("Emulate x86 16-bit code\n");
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ public class Sample_x86_mmr {
|
|||
|
||||
uc.reg_write(Unicorn.UC_X86_REG_LDTR, ldtr1);
|
||||
uc.reg_write(Unicorn.UC_X86_REG_GDTR, gdtr1);
|
||||
uc.reg_write(Unicorn.UC_X86_REG_EAX, new Long(0xdddddddd));
|
||||
uc.reg_write(Unicorn.UC_X86_REG_EAX, 0xddddddddL);
|
||||
|
||||
// read the registers back out
|
||||
eax = (int)((Long)uc.reg_read(Unicorn.UC_X86_REG_EAX)).longValue();
|
||||
|
|
|
@ -113,7 +113,7 @@ public class Shellcode {
|
|||
|
||||
static void test_i386()
|
||||
{
|
||||
Long r_esp = new Long(ADDRESS + 0x200000); // ESP register
|
||||
Long r_esp = ADDRESS + 0x200000L; // ESP register
|
||||
|
||||
System.out.print("Emulate i386 code\n");
|
||||
|
||||
|
@ -158,4 +158,4 @@ public class Shellcode {
|
|||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ import java.util.*;
|
|||
|
||||
public class Unicorn implements UnicornConst, ArmConst, Arm64Const, M68kConst, SparcConst, MipsConst, X86Const {
|
||||
|
||||
private long eng;
|
||||
public long eng;
|
||||
private int arch;
|
||||
private int mode;
|
||||
|
||||
|
|
Loading…
Reference in New Issue