我是起了一个springboot,在里面调用unidbg。服务在centos上跑是正常的,但是效率比直接hook手机算差一些,直接hook手机的话,100ms以内就算出来了。用unidbg算的话,大概要500ms左右。
后面就想提高效率,不知道把unidbg放到树莓派上跑arm,效率会不会高一些。
直接把unidbg放到树莓派上,有一个错误:
Exception in thread "worker@583ecf" java.lang.NoClassDefFoundError: Could not initialize class unicorn.Unicorn
at com.github.unidbg.AbstractEmulator.(AbstractEmulator.java:80)
at com.github.unidbg.arm.AbstractARMEmulator.(AbstractARMEmulator.java:47)
at com.github.unidbg.linux.android.AndroidARMEmulator.(AndroidARMEmulator.java:50)
at com.github.unidbg.linux.android.AndroidARMEmulator.(AndroidARMEmulator.java:42)
at com.inewy.unidbgweb.unidbg.CcdWorker.(CcdWorker.java:40)
at com.inewy.unidbgweb.unidbg.CcdWorkerPool.lambda$new$0(CcdWorkerPool.java:23)
at com.inewy.unidbgweb.unidbg.worker.DefaultWorkerPool.createWorker(DefaultWorkerPool.java:46)
at com.inewy.unidbgweb.unidbg.worker.DefaultWorkerPool.run(DefaultWorkerPool.java:65)
at java.lang.Thread.run(Thread.java:745)
看了一下jar包里,可能是unicorn没有arm平台的库,然后我去unicorn官网按教程在树莓派上编译,再继续跑unidbg,有一个新的错误:
Exception in thread "worker@56be13" java.lang.NoSuchMethodError: unicorn.Unicorn.hook_add_new(Lunicorn/EventMemHook;ILjava/lang/Object;)Ljava/util/Map;
at com.github.unidbg.arm.AbstractARMEmulator.(AbstractARMEmulator.java:51)
at com.github.unidbg.linux.android.AndroidARMEmulator.(AndroidARMEmulator.java:50)
at com.github.unidbg.linux.android.AndroidARMEmulator.(AndroidARMEmulator.java:42)
at com.inewy.unidbgweb.unidbg.CcdWorker.(CcdWorker.java:40)
at com.inewy.unidbgweb.unidbg.CcdWorkerPool.lambda$new$0(CcdWorkerPool.java:23)
at com.inewy.unidbgweb.unidbg.worker.DefaultWorkerPool.createWorker(DefaultWorkerPool.java:46)
at com.inewy.unidbgweb.unidbg.worker.DefaultWorkerPool.run(DefaultWorkerPool.java:65)
at java.lang.Thread.run(Thread.java:745)
unidbg用的unicorn和官方不一样,增加了一些东西,然后我把大佬的版本https://github.com/zhkl0228/unicorn下下来准备重新编一下。
但是编译出错误如下:
pi@raspberrypi:~/Desktop/unicorn-zhkl0228 $ ./make.sh
GEN libunicorn.so.1
GEN libunicorn.a
ar: creating libunicorn.a
make -C samples
make[1]: Entering directory '/home/pi/Desktop/unicorn-zhkl0228/samples'
CC sample_arm.o
CC sample_armeb.o
LINK sample_arm
../libunicorn.so: undefined reference to `qemu_log'
../libunicorn.so: undefined reference to `qemu_anon_ram_free'
../libunicorn.so: undefined reference to `helper_div_i32'
../libunicorn.so: undefined reference to `register_accel_types'
../libunicorn.so: undefined reference to `smp_cpus'
../libunicorn.so: undefined reference to `qemu_thread_create'
../libunicorn.so: undefined reference to `g_malloc'
../libunicorn.so: undefined reference to `helper_divu_i64'
../libunicorn.so: undefined reference to `qemu_fls'
../libunicorn.so: undefined reference to `bitmap_clear'
../libunicorn.so: undefined reference to `g_new0_'
../libunicorn.so: undefined reference to `cpu_generic_init'
../libunicorn.so: undefined reference to `g_free'
../libunicorn.so: undefined reference to `qemu_thread_join'
../libunicorn.so: undefined reference to `g_new_'
../libunicorn.so: undefined reference to `qemu_getauxval'
../libunicorn.so: undefined reference to `object_property_set_bool'
../libunicorn.so: undefined reference to `bitmap_set'
../libunicorn.so: undefined reference to `object_initialize'
../libunicorn.so: undefined reference to `pstrcpy'
../libunicorn.so: undefined reference to `g_renew_'
../libunicorn.so: undefined reference to `object_class_is_abstract'
../libunicorn.so: undefined reference to `crc32c'
../libunicorn.so: undefined reference to `AES_sbox'
../libunicorn.so: undefined reference to `g_hash_table_lookup'
../libunicorn.so: undefined reference to `visit_type_str'
../libunicorn.so: undefined reference to `g_list_prepend'
../libunicorn.so: undefined reference to `visit_type_uint64'
../libunicorn.so: undefined reference to `g_list_sort'
../libunicorn.so: undefined reference to `error_set_errno'
../libunicorn.so: undefined reference to `object_property_del_child'
../libunicorn.so: undefined reference to `qemu_clock_get_ns'
../libunicorn.so: undefined reference to `helper_divu_i32'
../libunicorn.so: undefined reference to `qemu_register_machine'
../libunicorn.so: undefined reference to `g_hash_table_new'
../libunicorn.so: undefined reference to `qemu_log_mask'
../libunicorn.so: undefined reference to `pstrcat'
../libunicorn.so: undefined reference to `object_class_dynamic_cast_assert'
../libunicorn.so: undefined reference to `object_property_add_child'
../libunicorn.so: undefined reference to `object_get_canonical_path'
../libunicorn.so: undefined reference to `cpu_dump_state'
../libunicorn.so: undefined reference to `cpu_exit'
../libunicorn.so: undefined reference to `type_register_static'
../libunicorn.so: undefined reference to `object_class_by_name'
../libunicorn.so: undefined reference to `g_strdup_printf'
../libunicorn.so: undefined reference to `qemu_system_shutdown_request'
../libunicorn.so: undefined reference to `g_hash_table_new_full'
../libunicorn.so: undefined reference to `visit_type_int32'
../libunicorn.so: undefined reference to `helper_rem_i32'
../libunicorn.so: undefined reference to `qemu_loglevel'
../libunicorn.so: undefined reference to `object_get_class'
../libunicorn.so: undefined reference to `helper_remu_i32'
../libunicorn.so: undefined reference to `mulu64'
../libunicorn.so: undefined reference to `helper_rem_i64'
../libunicorn.so: undefined reference to `qdev_get_machine'
../libunicorn.so: undefined reference to `error_propagate'
../libunicorn.so: undefined reference to `find_next_bit'
../libunicorn.so: undefined reference to `g_int_hash'
../libunicorn.so: undefined reference to `smp_cores'
../libunicorn.so: undefined reference to `helper_shr_i64'
../libunicorn.so: undefined reference to `g_hash_table_insert'
../libunicorn.so: undefined reference to `object_class_get_name'
../libunicorn.so: undefined reference to `object_property_add'
../libunicorn.so: undefined reference to `helper_remu_i64'
../libunicorn.so: undefined reference to `cpu_class_by_name'
../libunicorn.so: undefined reference to `object_new'
../libunicorn.so: undefined reference to `object_get_canonical_path_component'
../libunicorn.so: undefined reference to `g_hash_table_destroy'
../libunicorn.so: undefined reference to `find_next_zero_bit'
../libunicorn.so: undefined reference to `g_list_free'
../libunicorn.so: undefined reference to `cpu_reset'
../libunicorn.so: undefined reference to `smp_threads'
../libunicorn.so: undefined reference to `g_int_equal'
../libunicorn.so: undefined reference to `g_realloc'
../libunicorn.so: undefined reference to `helper_shl_i64'
../libunicorn.so: undefined reference to `g_memdup'
../libunicorn.so: undefined reference to `object_class_dynamic_cast'
../libunicorn.so: undefined reference to `AES_isbox'
../libunicorn.so: undefined reference to `object_unref'
../libunicorn.so: undefined reference to `g_malloc0'
../libunicorn.so: undefined reference to `object_ref'
../libunicorn.so: undefined reference to `object_dynamic_cast_assert'
../libunicorn.so: undefined reference to `helper_sar_i64'
../libunicorn.so: undefined reference to `g_strdup'
../libunicorn.so: undefined reference to `qemu_vfree'
../libunicorn.so: undefined reference to `qemu_system_reset_request'
../libunicorn.so: undefined reference to `qemu_logfile'
../libunicorn.so: undefined reference to `cpu_paging_enabled'
../libunicorn.so: undefined reference to `helper_div_i64'
../libunicorn.so: undefined reference to `cpu_resume'
../libunicorn.so: undefined reference to `AES_ishifts'
../libunicorn.so: undefined reference to `AES_shifts'
../libunicorn.so: undefined reference to `type_register'
../libunicorn.so: undefined reference to `g_hash_table_foreach'
../libunicorn.so: undefined reference to `helper_muluh_i64'
../libunicorn.so: undefined reference to `cpu_get_memory_mapping'
../libunicorn.so: undefined reference to `object_property_add_bool'
../libunicorn.so: undefined reference to `error_abort'
../libunicorn.so: undefined reference to `qemu_anon_ram_alloc'
../libunicorn.so: undefined reference to `helper_mulsh_i64'
../libunicorn.so: undefined reference to `machine_initialize'
../libunicorn.so: undefined reference to `g_list_foreach'
../libunicorn.so: undefined reference to `qemu_memalign'
../libunicorn.so: undefined reference to `muls64'
collect2: error: ld returned 1 exit status
Makefile:104: recipe for target 'sample_arm' failed
make[1]: *** [sample_arm] Error 1
make[1]: Leaving directory '/home/pi/Desktop/unicorn-zhkl0228/samples'
Makefile:225: recipe for target 'all' failed
make: *** [all] Error 2
pi@raspberrypi:~/Desktop/unicorn-zhkl0228/bindings/java $ make
cd .. && python const_generator.py java
make -f Makefile.build all
make[1]: Entering directory '/home/pi/Desktop/unicorn-zhkl0228/bindings/java'
find: `/include': No such file or directory
dirname: missing operand
Try 'dirname --help' for more information.
/bin/javah -classpath target/classes unicorn.Unicorn
gcc -c -fPIC -I/include -I -I../../include unicorn_Unicorn.c -o unicorn_Unicorn.o
In file included from unicorn_Unicorn.c:29:0:
unicorn_Unicorn.h:2:17: fatal error: jni.h: No such file or directory
#include
^
compilation terminated.
Makefile.build:49: recipe for target 'unicorn_Unicorn.o' failed
make[1]: *** [unicorn_Unicorn.o] Error 1
make[1]: Leaving directory '/home/pi/Desktop/unicorn-zhkl0228/bindings/java'
Makefile:4: recipe for target 'all' failed
make: *** [all] Error 2
太菜不会解决,求助大佬
树莓派是:Linux raspberrypi 4.9.28-v7+
jdk 1.8