diff --git a/app/src/main/java/com/reyun/sdktestdemo/MainActivity.java b/app/src/main/java/com/reyun/sdktestdemo/MainActivity.java index 82dba04..5e7a519 100644 --- a/app/src/main/java/com/reyun/sdktestdemo/MainActivity.java +++ b/app/src/main/java/com/reyun/sdktestdemo/MainActivity.java @@ -57,6 +57,7 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.util.Enumeration; import java.util.List; +import java.util.Properties; public class MainActivity extends AppCompatActivity { private TextView mText; @@ -110,13 +111,12 @@ public class MainActivity extends AppCompatActivity { } catch (CameraAccessException e) { e.printStackTrace(); } - - } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if(requestCode == 100) { + String aa = System.getProperty("http.agent"); //初始化sdk环境 WdMain wm = WdMain.getInstance(); wm.init(getApplicationContext(), "test-a341fsfr3123ddadfs"); @@ -138,7 +138,6 @@ public class MainActivity extends AppCompatActivity { Log.d(TAG, "onError: " + errorMsg); }*/ }); - } } } diff --git a/wandun/src/main/cpp/CMakeLists.txt b/wandun/src/main/cpp/CMakeLists.txt index c9ba67d..68944be 100644 --- a/wandun/src/main/cpp/CMakeLists.txt +++ b/wandun/src/main/cpp/CMakeLists.txt @@ -6,11 +6,15 @@ include_directories(${CMAKE_SOURCE_DIR}/include) if(${CMAKE_ANDROID_ARCH_ABI} STREQUAL "arm64-v8a") set(ARCH_DEPENDED_SRC - wd_syscall64.s) + wd_syscall_aarch64.s) elseif (${CMAKE_ANDROID_ARCH_ABI} STREQUAL "armeabi-v7a") set(ARCH_DEPENDED_SRC - wd_syscall32.s) + wd_syscall_arm.s) + +elseif (${CMAKE_ANDROID_ARCH_ABI} STREQUAL "x86") + set(ARCH_DEPENDED_SRC + wd_syscall_x86.s) endif() add_library( diff --git a/wandun/src/main/cpp/collect.c b/wandun/src/main/cpp/collect.c index 8a9ea91..a6b69c2 100644 --- a/wandun/src/main/cpp/collect.c +++ b/wandun/src/main/cpp/collect.c @@ -386,11 +386,10 @@ void collect_env(JNIEnv *env, cJSON *json) { void collect_libs_info(JNIEnv *env, cJSON *json) { cJSON* item = cJSON_CreateObject(); const char* lib_names[] = {"libwdun.so", "libc.so"}; - int pid = WDSYSCALL(SYS_getpid); for(int j = 0; j < sizeof(lib_names)/sizeof(const char*); ++j) { char cmd[64] = {0}; char line[1024] = {0}; - snprintf(cmd, 63, "cat /proc/%d/maps | grep %s", pid, lib_names[j]); + snprintf(cmd, 63, "cat /proc/self/maps | grep %s", lib_names[j]); FILE *fp = g_funcs.wd_popen(cmd, "r"); if(fgets(line, 1024, fp)) { int pos = 0; @@ -589,6 +588,15 @@ void collect_user_agent(JNIEnv *env, cJSON *json) { addJniStringToJson(env, json, "user-agent", ua_jstr); (*env)->DeleteLocalRef(env, ua_jstr); + jstring key_jstr = (*env)->NewStringUTF(env, "http.agent"); + jobject ua2_jstr = wdCallStaticObjectMethod(env, "java/lang/System", "getProperty", + "(Ljava/lang/String;)Ljava/lang/String;", key_jstr); + addJniStringToJson(env, json, "user-agent2", ua2_jstr); + + (*env)->DeleteLocalRef(env, key_jstr); + (*env)->DeleteLocalRef(env, ua2_jstr); + + logd(WD_COLLECT, "%s", "collect user agent finished..."); } @@ -701,5 +709,63 @@ void collect_risk_info(JNIEnv *env, cJSON *json) { vpn = ""; } cJSON_AddStringToObject(json, "vpn", vpn); + + //emulator + const char* emulator_files[] = { + "/dev/socket/qemud", + "/dev/qemu_pipe", + "/goldfish", + "/system/lib/libc_malloc_debug_qemu.so", + "/sys/qemu_trace", + "/system/bin/microvirt-prop", + "/system/lib/libdroid4x.so", + "/system/bin/windroyed", + "/system/bin/microvirtd", + "/system/bin/nox-prop", + "/system/bin/ttVM-prop", + "/system/bin/droid4x-prop", + "/data/.bluestacks.prop", + "/data/app/com.bluestacks.appmart-1.apk", + "/data/app/com.bluestacks.home-1.apk", + "/data/app/com.bluestacks.searchapp-1.apk", + "/data/data/com.bluestacks.setup", + "/dev/vboxuser", + "/fstab.vbox86", + "/init.vbox86.rc", + "/init.svc.vbox86-setup", + "/sys/bus/pci/drivers/vboxguest/module", + "/sys/bus/pci/drivers/vboxguest/new_id", + "/sys/bus/pci/drivers/vboxguest/remove_id", + "/sys/bus/pci/drivers/vboxguest/uevent", + "/sys/bus/platform/drivers/qemu_pipe", + "/sys/bus/platform/drivers/qemu_trace", + "/init.svc.droid4x", + "/init.svc.noxd", + "/init.svc.microvirtd", + "/ro.kernel.android.qemud", + "/androVM.vbox_dpi", + "/androVM.vbox_graph_mode", + "/system/bin/qemu_props", + "/system/bin/androVM-prop", + "/system/lib/libaligl2.so", + "/system/lib/libalitag.so", + "/system/lib/libcloudletevent.so", + "/system/lib/libcloudletos.so", + "/system/lib/nemuguest.ko", + "/system/lib/nemusf.ko", + "/system/lib/nemuvideo.ko", + "/system/lib/vpipe.ko", + "/system/lib/vpipe_novt.ko", + "/system/lib/vboxguest.ko", + "/system/lib/vboxsf.ko", + }; + + cJSON* emulator = cJSON_CreateArray(); + for(int i = 0; i < sizeof(emulator_files)/sizeof(const char*); ++i) { + if(is_file_exists(emulator_files[i])) { + cJSON_AddItemToArray(emulator, cJSON_CreateString(emulator_files[i])); + } + } + cJSON_AddItemToObject(json, "emulator", emulator); } diff --git a/wandun/src/main/cpp/include/wd_syscall.h b/wandun/src/main/cpp/include/wd_syscall.h index adf0783..094e6db 100644 --- a/wandun/src/main/cpp/include/wd_syscall.h +++ b/wandun/src/main/cpp/include/wd_syscall.h @@ -10,18 +10,30 @@ #ifdef __arm__ -#define WDSYSCALL(cmd, args...) wd_syscall32(WDNUM(cmd), ##args) +#define WDSYSCALL(cmd, args...) wd_syscall_arm(WDNUM(cmd), ##args) #define WD_SYS_mmap SYS_mmap2 #endif #ifdef __aarch64__ -#define WDSYSCALL(cmd, args...) wd_syscall64(WDNUM(cmd), ##args) +#define WDSYSCALL(cmd, args...) wd_syscall_aarch64(WDNUM(cmd), ##args) +#define WD_SYS_mmap SYS_mmap +#endif + +#ifdef x86 +#define WDSYSCALL(cmd, args...) wd_syscall_x86(WDNUM(cmd), ##args) +#define WD_SYS_mmap SYS_mmap +#endif + +#ifdef x86_64 +#define WDSYSCALL(cmd, args...) wd_syscall_x64(WDNUM(cmd), ##args) #define WD_SYS_mmap SYS_mmap #endif #define IMPORTWDSYSCALL \ -__attribute__((visibility("hidden"))) extern long wd_syscall32(int cmd, ...);\ -__attribute__((visibility("hidden"))) extern long wd_syscall64(int cmd, ...); +__attribute__((visibility("hidden"))) extern long wd_syscall_arm(int cmd, ...);\ +__attribute__((visibility("hidden"))) extern long wd_syscall_aarch64(int cmd, ...);\ +__attribute__((visibility("hidden"))) extern long wd_syscall_x86(int cmd, ...);\ +__attribute__((visibility("hidden"))) extern long wd_syscall_x64(int cmd, ...); long wd_set_errno(int n); diff --git a/wandun/src/main/cpp/utils.c b/wandun/src/main/cpp/utils.c index 26960f5..401f2c6 100644 --- a/wandun/src/main/cpp/utils.c +++ b/wandun/src/main/cpp/utils.c @@ -14,6 +14,7 @@ #include "syscall.h" #include "fcntl.h" #include "errno.h" +#include "unistd.h" IMPORTWDSYSCALL @@ -150,9 +151,8 @@ int read_file(const char *file_path, const char *mode, char *r_buf, size_t r_len } int is_file_exists(const char *file_path) { - int fd = WDSYSCALL(SYS_faccessat, AT_FDCWD, file_path, R_OK, 0); + int res = WDSYSCALL(SYS_faccessat, AT_FDCWD, file_path, F_OK, 0); int err = errno; - if(fd == -1) return 0; - WDSYSCALL(SYS_close, fd); + if(res == -1) return 0; return 1; } diff --git a/wandun/src/main/cpp/wd_syscall64.s b/wandun/src/main/cpp/wd_syscall_aarch64.s similarity index 86% rename from wandun/src/main/cpp/wd_syscall64.s rename to wandun/src/main/cpp/wd_syscall_aarch64.s index 7b92cff..388e9b4 100644 --- a/wandun/src/main/cpp/wd_syscall64.s +++ b/wandun/src/main/cpp/wd_syscall_aarch64.s @@ -2,12 +2,12 @@ // Created by Fear1ess on 2021/3/31. // -.global wd_syscall64 +.global wd_syscall_aarch64 .extern wd_set_errno -.type wd_syscall64, %function +.type wd_syscall_aarch64, %function -wd_syscall64: +wd_syscall_aarch64: /* Move syscall No. from x0 to x8 */ sub x0, x0, #0xcd mov x8, x0 diff --git a/wandun/src/main/cpp/wd_syscall32.s b/wandun/src/main/cpp/wd_syscall_arm.s similarity index 85% rename from wandun/src/main/cpp/wd_syscall32.s rename to wandun/src/main/cpp/wd_syscall_arm.s index c8b5652..6bb0c16 100644 --- a/wandun/src/main/cpp/wd_syscall32.s +++ b/wandun/src/main/cpp/wd_syscall_arm.s @@ -2,12 +2,12 @@ // Created by Fear1ess on 2021/3/31. // -.global wd_syscall32 +.global wd_syscall_arm .extern wd_set_errno -.type wd_syscall32, %function +.type wd_syscall_arm, %function -wd_syscall32: +wd_syscall_arm: mov ip, sp stmfd sp!, {r4, r5, r6, r7} sub r0, r0, #0xcd diff --git a/wandun/src/main/cpp/wd_syscall_x86.s b/wandun/src/main/cpp/wd_syscall_x86.s new file mode 100644 index 0000000..81bc6fa --- /dev/null +++ b/wandun/src/main/cpp/wd_syscall_x86.s @@ -0,0 +1,45 @@ +.global wd_syscall_x86 +.extern wd_set_errno + +.type wd_syscall_x86, %function + +wd_syscall_x86: + # Push the callee save registers. + push %ebx + push %esi + push %edi + push %ebp + + # Get and save the system call entry address. + int $80 + push %eax + + # Load all the arguments from the calling frame. + # (Not all will be valid, depending on the syscall.) + mov 24(%esp),%eax + mov 28(%esp),%ebx + mov 32(%esp),%ecx + mov 36(%esp),%edx + mov 40(%esp),%esi + mov 44(%esp),%edi + mov 48(%esp),%ebp + + # Make the system call. + call *(%esp) + addl $4, %esp + + # Error? + cmpl $-4096, %eax + jb 1f + # Yes, so set errno. + negl %eax + pushl %eax + call wd_set_errno + addl $4, %esp + 1: + # Restore the callee save registers. + pop %ebp + pop %edi + pop %esi + pop %ebx + ret \ No newline at end of file