Commit deefe57d by Fear1ess

4/23

parent 20242691
......@@ -26,6 +26,7 @@ import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.LinkProperties;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
......@@ -51,6 +52,7 @@ import com.reyun.wandun.WdMain;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.security.cert.Certificate;
......@@ -107,14 +109,6 @@ public class MainActivity extends AppCompatActivity {
e.printStackTrace();
}
CameraManager camera = (CameraManager) getSystemService(Service.CAMERA_SERVICE);
try {
String[] list = camera.getCameraIdList();
CameraCharacteristics cc = camera.getCameraCharacteristics("0");
Log.d("haha", "onCreate: ");
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
......@@ -144,5 +138,27 @@ public class MainActivity extends AppCompatActivity {
});
}
}
public String getDns() {
String result = "";
ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
for (Network network : cm.getAllNetworks()) {
NetworkInfo networkInfo = cm.getNetworkInfo(network);
if (networkInfo.getType() == activeNetworkInfo.getType()) {
LinkProperties lp = cm.getLinkProperties(network);
for (InetAddress addr : lp.getDnsServers()) {
// Get DNS IP address here:
result += addr.getHostAddress() + ",";
}
}
}
if(result.contains(",")){
result=result.substring(0, result.length() - 1);
}
result="[" + result + "]";
return result;
}
}
......@@ -16,6 +16,7 @@
#include <sys/mman.h>
#include <sys/sysinfo.h>
#include <sys/statfs.h>
#include <sys/stat.h>
#include "openssl/md5.h"
#include <arpa/inet.h>
#include <sys/syscall.h>
......@@ -88,13 +89,6 @@ jstring do_collect(JNIEnv* env) {
jstring data_jstr = (*env)->NewStringUTF(env, data);
return data_jstr;
/*
size_t len = strlen(data);
int fd = WDSYSCALL(SYS_openat, AT_FDCWD, "/sdcard/wd_data", O_CREAT|O_RDWR|O_TRUNC, S_IRWXU);
int err = errno;
WDSYSCALL(SYS_write, fd, data, len);
WDSYSCALL(SYS_close, fd);*/
}
void collect_app_info(JNIEnv* env, cJSON *json) {
......@@ -102,6 +96,7 @@ void collect_app_info(JNIEnv* env, cJSON *json) {
loge(WD_COLLECT, "%s", "collect_app_info func call env->pushLocalFrame failed!");
return;
}
//package_name
jobject pkgName = wdCallObjectMethod(env, g_app_context, "getPackageName", "()Ljava/lang/String;");
addJniStringToJson(env, json, "package_name", pkgName);
......@@ -181,6 +176,21 @@ void collect_app_info(JNIEnv* env, cJSON *json) {
fclose(fp);
}
//apk_path
jstring apk_path_jstr = wdCallObjectMethod(env, g_app_context, "getPackageResourcePath", "()Ljava/lang/String;");
if(apk_path_jstr != NULL) {
const char* path = (*env)->GetStringUTFChars(env, apk_path_jstr, NULL);
cJSON_AddStringToObject(json, "apk_path", path);
//apk_size
struct stat st;
if(WDSYSCALL(WD_SYS_fstatat, AT_FDCWD, path, &st, 0) == 0) {
cJSON_AddNumberToObject(json, "apk_size", st.st_size);
}
(*env)->ReleaseStringUTFChars(env, apk_path_jstr, path);
(*env)->DeleteLocalRef(env, apk_path_jstr);
}
logd(WD_COLLECT, "%s", "collect app info finished...");
(*env)->PopLocalFrame(env, NULL);
}
......@@ -221,8 +231,6 @@ void collect_imei(JNIEnv *env, cJSON *json) {
logd(WD_COLLECT, "%s", "collect imei finished...");
}
void collect_android_id(JNIEnv* env, cJSON* json) {
jstring key_str = (*env)->NewStringUTF(env, "android_id");
jobject cr = wdCallObjectMethod(env, g_app_context, "getContentResolver", "()Landroid/content/ContentResolver;");
......@@ -292,7 +300,8 @@ void collect_prop_info(JNIEnv* env, cJSON* json) {
cJSON* pi_json = cJSON_CreateObject();
const char* prop_key[] = {"wifi.interface", "gsm.sim.state", "gsm.version.baseband", "gsm.version.ril-impl",
"gsm.current.phone-type", "gsm.operator.isroaming", "gsm.network.type", "persist.sys.timezone",
"init.svc.adbd", "ro.build.date.utc", "gsm.operator.alpha", "ro.opengles.version"};
"init.svc.adbd", "ro.build.date.utc", "gsm.operator.alpha", "ro.opengles.version",
"ro.serialno"};
char buf[64];
for(int i = 0; i < sizeof(prop_key)/sizeof(const char*); ++i) {
memset((void*)buf, 0, 64);
......@@ -307,7 +316,7 @@ void collect_settings_info(JNIEnv *env, cJSON *json) {
const char* settings_secure_key[] = {"usb_mass_storage_enabled", "development_settings_enabled", "accessibility_enabled"};
const char* settings_system_key[] = {"screen_brightness", "accelerometer_rotation", "screen_brightness_mode",
"sound_effects_enabled", "screen_off_timeout"};
const char* settings_global_key[] = {"lock_pattern_autolock", "lock_pattern_visible_pattern"};
// const char* settings_global_key[] = {"lock_pattern_autolock", "lock_pattern_visible_pattern"};
jobject cr = wdCallObjectMethod(env, g_app_context, "getContentResolver", "()Landroid/content/ContentResolver;");
......@@ -322,13 +331,14 @@ void collect_settings_info(JNIEnv *env, cJSON *json) {
(*env)->DeleteLocalRef(env, key_str);
(*env)->DeleteLocalRef(env, jstr);
}
/*
for(int m = 0; m < sizeof(settings_global_key)/sizeof(const char*); ++m) {
jstring key_str = (*env)->NewStringUTF(env, settings_global_key[m]);
jint value = wdCallStaticIntMethod(env, "android/provider/Settings$Global", "getInt",
"(Landroid/content/ContentResolver;Ljava/lang/String;)I", cr, key_str);
cJSON_AddNumberToObject(si_json, settings_global_key[m], value);
(*env)->DeleteLocalRef(env, key_str);
}
}*/
for(int j = 0; j < sizeof(settings_system_key)/sizeof(const char*); ++j) {
jstring key_str = (*env)->NewStringUTF(env, settings_system_key[j]);
jint value = wdCallStaticIntMethod(env, "android/provider/Settings$System", "getInt",
......@@ -375,9 +385,9 @@ void collect_camera_info(JNIEnv *env, cJSON *json) {
cJSON* item_json = cJSON_CreateArray();
//获取CameraManager对象
jobject camera_Str=(*env)->NewStringUTF(env,"camera");
jobject cameraManager_obj=wdCallObjectMethod(env,g_app_context,"getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;",camera_Str);
jobject camera_Str=(*env)->NewStringUTF(env, "camera");
jobject cameraManager_obj=wdCallObjectMethod(env, g_app_context,"getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;", camera_Str);
jobjectArray cameraIdList_Obj=wdCallObjectMethod(env,cameraManager_obj,"getCameraIdList",
"()[Ljava/lang/String;");
int count=(*env)->GetArrayLength(env,cameraIdList_Obj);
......@@ -700,6 +710,7 @@ void collect_mem_info(JNIEnv *env, cJSON *json) {
}
void collect_network_info(JNIEnv *env, cJSON *json) {
cJSON* network = cJSON_CreateObject();
jstring ci_jstr = (*env)->NewStringUTF(env, "connectivity");
jobject ci = wdCallObjectMethod(env, g_app_context, "getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;", ci_jstr);
......@@ -743,37 +754,64 @@ void collect_network_info(JNIEnv *env, cJSON *json) {
default:
break;
}
cJSON_AddStringToObject(json, "network_type", network_type);
cJSON_AddStringToObject(network, "network_type", network_type);
}
//wifi
else if (conn_type == 1) {
cJSON_AddStringToObject(json, "network_type", "wifi");
cJSON_AddStringToObject(network, "network_type", "wifi");
//get wifi ssid bssid ip, need ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION permission on Android high version
jstring wm_jstr = (*env)->NewStringUTF(env, "wifi");
jobject wm = wdCallObjectMethod(env, g_app_context, "getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;", wm_jstr);
jobject wi = wdCallObjectMethod(env, wm, "getConnectionInfo", "()Landroid/net/wifi/WifiInfo;");
jobject ssid = wdCallObjectMethod(env, wi, "getSSID", "()Ljava/lang/String;");
addJniStringToJson(env, json, "ssid", ssid);
addJniStringToJson(env, network, "ssid", ssid);
(*env)->DeleteLocalRef(env, ssid);
jobject bssid = wdCallObjectMethod(env, wi, "getBSSID", "()Ljava/lang/String;");
addJniStringToJson(env, json, "bssid", bssid);
addJniStringToJson(env, network, "bssid", bssid);
(*env)->DeleteLocalRef(env, bssid);
jint wifi_ip_int = wdCallIntMethod(env, wi, "getIpAddress", "()I");
char wifi_ip[32] = {0};
inet_ntop(AF_INET, &wifi_ip_int, wifi_ip, 31);
cJSON_AddStringToObject(json, "wifi_ip", wifi_ip);
cJSON_AddStringToObject(network, "wifi_ip", wifi_ip);
(*env)->DeleteLocalRef(env, wi);
(*env)->DeleteLocalRef(env, wm);
(*env)->DeleteLocalRef(env, wm_jstr);
}
//dns
cJSON* dns = cJSON_CreateArray();
jobject nw = wdCallObjectMethod(env, ci, "getActiveNetwork", "()Landroid/net/Network;");
if(nw != NULL) {
jobject lp = wdCallObjectMethod(env, ci, "getLinkProperties", "(Landroid/net/Network;)Landroid/net/LinkProperties;", nw);
if(lp != NULL) {
jobject dns_list = wdCallObjectMethod(env, lp, "getDnsServers", "()Ljava/util/List;");
if(dns_list != NULL) {
jint size = wdCallIntMethod(env, dns_list, "size", "()I");
for(int i = 0; i < size; ++i) {
jobject ia = wdCallObjectMethod(env, dns_list, "get", "(I)Ljava/lang/Object;", i);
jstring address_jstr = wdCallObjectMethod(env, ia, "getHostAddress", "()Ljava/lang/String;");
addJniStringToArray(env, dns, address_jstr);
(*env)->DeleteLocalRef(env, address_jstr);
}
(*env)->DeleteLocalRef(env, dns_list);
}
(*env)->DeleteLocalRef(env, lp);
}
(*env)->DeleteLocalRef(env, nw);
}
cJSON_AddItemToObject(network, "dns", dns);
(*env)->DeleteLocalRef(env, ni);
return_label:
(*env)->DeleteLocalRef(env, ci);
(*env)->DeleteLocalRef(env, ci_jstr);
cJSON_AddItemToObject(json, "network", network);
logd(WD_COLLECT, "%s", "collect network info finished...");
}
......@@ -791,7 +829,6 @@ void collect_user_agent(JNIEnv *env, cJSON *json) {
(*env)->DeleteLocalRef(env, key_jstr);
(*env)->DeleteLocalRef(env, ua2_jstr);
logd(WD_COLLECT, "%s", "collect user agent finished...");
}
......@@ -1046,13 +1083,11 @@ void collect_risk_info(JNIEnv *env, cJSON *json) {
(*env)->DeleteLocalRef(env, files_path_jstr);
(*env)->DeleteLocalRef(env, files_dir);
cJSON_AddItemToObject(json, "risk", risk_item);
}
void collect_common_app(JNIEnv *env, cJSON *json) {
cJSON* item = cJSON_CreateArray();
const char* apps[] = {
"com.tencent.mm",
"com.tencent.mobileqq",
......@@ -1075,7 +1110,6 @@ void collect_common_app(JNIEnv *env, cJSON *json) {
"com.ss.android.article.news",
"com.tencent.news"
};
for(int i = 0; i < sizeof(apps)/sizeof(const char*); ++i) {
char path[128] = {0};
snprintf(path, 127, "/data/data/%s", apps[i]);
......@@ -1083,7 +1117,6 @@ void collect_common_app(JNIEnv *env, cJSON *json) {
cJSON_AddItemToArray(item, cJSON_CreateString(apps[i]));
}
}
cJSON_AddItemToObject(json, "common_used_apps", item);
}
......@@ -9,6 +9,7 @@
#include <jni.h>
void addJniStringToJson(JNIEnv* env, cJSON* json, const char* key, jobject jstr);
void addJniStringToArray(JNIEnv* env, cJSON* json, jobject jstr);
void getJniStringSha256(JNIEnv* env, jobject jstr, char* sha256);
void bytes2Hex(const unsigned char* source, char* dest, int sourceLen, int mac_format);
void hex2Bytes(const char* source, unsigned char* dest, int sourceLen);
......
......@@ -12,11 +12,13 @@
#ifdef __arm__
#define WDSYSCALL(cmd, args...) wd_syscall_arm(WDNUM(cmd), ##args)
#define WD_SYS_mmap SYS_mmap2
#define WD_SYS_fstatat SYS_fstatat64
#endif
#ifdef __aarch64__
#define WDSYSCALL(cmd, args...) wd_syscall_aarch64(WDNUM(cmd), ##args)
#define WD_SYS_mmap SYS_mmap
#define WD_SYS_fstatat SYS_newfstatat
#endif
#ifdef x86
......
......@@ -76,13 +76,19 @@ void hex2Bytes(const char* source, unsigned char* dest, int sourceLen)
return;
}
void addJniStringToArray(JNIEnv* env, cJSON* json, jobject jstr) {
addJniStringToJson(env, json, NULL, jstr);
}
void addJniStringToJson(JNIEnv *env, cJSON *json, const char *key, jobject jstr) {
if(jstr == NULL) {
cJSON_AddStringToObject(json, key, "");
if(key) cJSON_AddStringToObject(json, key, "");
else cJSON_AddItemToArray(json, cJSON_CreateString(""));
}else{
jboolean bl = 0;
const char* value= (*env)->GetStringUTFChars(env, jstr, &bl);
cJSON_AddStringToObject(json, key, value);
if(key) cJSON_AddStringToObject(json, key, value);
else cJSON_AddItemToArray(json, cJSON_CreateString(value));
(*env)->ReleaseStringUTFChars(env, jstr, value);
}
}
......
......@@ -251,6 +251,10 @@ jvalue wdCallStaticMethod(JNIEnv* env, const char* clsName, const char* methodNa
jvalue wdCallMethod(JNIEnv* env, jobject obj, const char* methodName, const char* methodSig, va_list args) {
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID methodId = (*env)->GetMethodID(env, cls, methodName, methodSig);
if(methodId == NULL) {
logd(WD_JNI, "not find method %s%s", methodName, methodSig);
goto return_label;
}
jvalue value = {0};
switch(wdGetMethodRetType(methodSig)) {
case 'V':
......@@ -287,6 +291,7 @@ jvalue wdCallMethod(JNIEnv* env, jobject obj, const char* methodName, const char
default: break;
}
wdCheckException(env);
return_label:
(*env)->DeleteLocalRef(env, cls);
return value;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment