由于公司应用需要过安全测试,测试那边说有so注入漏洞,所以找到了这份代码,并成功通过测试。
废话不多说。直接上代码
//非Debug 编译,反调试检测
if(!BuildConfig.DEBUG) {
if(isDebuggable()) {
exit(0);
}
Thread t = new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
sleep(100);
if(Debug.isDebuggerConnected()) {
exit(0);
}
if(isUnderTraced()) {
exit(0);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}, "SafeGuardThread");
t.start();
}
if(isUnderTraced()) {
System.exit(0);
}
CrashReport.initCrashReport(getApplicationContext(), "4abcbaaf23", BuildConfig.DEBUG);
}
private boolean isUnderTraced() {
String processStatusFilePath = String.format(Locale.US, "/proc/%d/status", android.os.Process.myPid());
File procInfoFile = new File(processStatusFilePath);
try {
BufferedReader b = new BufferedReader(new FileReader(procInfoFile));
String readLine;
while ((readLine = b.readLine()) != null) {
if(readLine.contains("TracerPid")) {
String[] arrays = readLine.split(":");
if(arrays.length == 2) {
int tracerPid = Integer.parseInt(arrays[1].trim());
if(tracerPid != 0) {
return true;
}
}
}
}
b.close();
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean isDebuggable() {
return 0 != ( getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE );
}
声明:疯人峰语|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权
转载:转载请注明原文链接 - Android应用防止so注入防止动态调试参考代码