/P40_HarmonyOS_2.0.0_Developer_Beta1/src/main/java/com/huawei/server/security/securitydiagnose/RootDetectReport.java

https://github.com/dstmath/HWFramework · Java · 168 lines · 111 code · 11 blank · 46 comment · 11 complexity · b46b86f833088aadc201f4edee53d8a8 MD5 · raw file

  1. package com.huawei.server.security.securitydiagnose;
  2. import android.content.Context;
  3. import android.util.HiLog;
  4. import android.util.HiLogLabel;
  5. import com.huawei.android.os.SystemPropertiesEx;
  6. import java.io.BufferedReader;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.IOException;
  11. import java.io.InputStreamReader;
  12. public class RootDetectReport {
  13. private static final int BIT_RPROC_CLEAR = -1025;
  14. private static final int DOMAIN = 218115848;
  15. private static final int FILE_NOT_FOUND_ERR = -3;
  16. private static final String FILE_PROC_ROOT_SCAN = (File.separator + "proc" + File.separator + "root_scan");
  17. private static final int GENERIC_ERR = -1;
  18. private static final HiLogLabel HILOG_LABEL = new HiLogLabel(3, (int) DOMAIN, TAG);
  19. private static final int IO_EXCEPTION = -4;
  20. private static final String TAG = "RootDetectReport";
  21. private static long sEndTime = 0;
  22. private static RootDetectReport sInstance;
  23. private static long sStartTime = 0;
  24. private Context mContext;
  25. private boolean mIsRootScanHasTrigger = false;
  26. private Listener mListener;
  27. public interface Listener {
  28. void onRootReport();
  29. }
  30. private RootDetectReport(Context context) {
  31. this.mContext = context;
  32. }
  33. private void setRootStatusProperty(int rootstatus) {
  34. try {
  35. SystemPropertiesEx.set(HwSecDiagnoseConstant.PROPERTY_ROOT_STATUS, Integer.toString(rootstatus & BIT_RPROC_CLEAR));
  36. } catch (NumberFormatException e) {
  37. HiLog.error(HILOG_LABEL, "get number format exception when set root status property", new Object[0]);
  38. } catch (Exception e2) {
  39. HiLog.error(HILOG_LABEL, "setRootStatusProperty failed, stpGetStatusAllIDRetValue = %{public}d", new Object[]{Integer.valueOf(rootstatus & BIT_RPROC_CLEAR)});
  40. }
  41. }
  42. private int getRootStatusAndReport() {
  43. int ret = AppLayerStpProxy.getInstance().getRootStatusSync();
  44. if (ret < 0) {
  45. HiLog.error(HILOG_LABEL, "get root status by category failed. ret = %{public}b", new Object[]{Integer.valueOf(ret)});
  46. } else if (ret == 0) {
  47. setRootStatusProperty(ret);
  48. HiLog.info(HILOG_LABEL, "root status is ok. ret = %{public}d", new Object[]{Integer.valueOf(ret)});
  49. } else {
  50. ret = AppLayerStpProxy.getInstance().getEachItemRootStatus();
  51. if (ret < 0) {
  52. HiLog.error(HILOG_LABEL, "get each item root status failed. ret = %{public}d", new Object[]{Integer.valueOf(ret)});
  53. ret = -1;
  54. }
  55. setRootStatusProperty(ret);
  56. this.mListener.onRootReport();
  57. HiLog.info(HILOG_LABEL, "root status is risk. ret = %{public}d", new Object[]{Integer.valueOf(ret)});
  58. }
  59. return ret;
  60. }
  61. /* JADX WARNING: Code restructure failed: missing block: B:17:0x0036, code lost:
  62. r8 = move-exception;
  63. */
  64. /* JADX WARNING: Code restructure failed: missing block: B:19:?, code lost:
  65. r6.close();
  66. */
  67. /* JADX WARNING: Code restructure failed: missing block: B:20:0x003b, code lost:
  68. r9 = move-exception;
  69. */
  70. /* JADX WARNING: Code restructure failed: missing block: B:21:0x003c, code lost:
  71. r7.addSuppressed(r9);
  72. */
  73. /* JADX WARNING: Code restructure failed: missing block: B:22:0x003f, code lost:
  74. throw r8;
  75. */
  76. /* JADX WARNING: Code restructure failed: missing block: B:26:0x0042, code lost:
  77. r7 = move-exception;
  78. */
  79. /* JADX WARNING: Code restructure failed: missing block: B:28:?, code lost:
  80. r5.close();
  81. */
  82. /* JADX WARNING: Code restructure failed: missing block: B:29:0x0047, code lost:
  83. r8 = move-exception;
  84. */
  85. /* JADX WARNING: Code restructure failed: missing block: B:30:0x0048, code lost:
  86. r6.addSuppressed(r8);
  87. */
  88. /* JADX WARNING: Code restructure failed: missing block: B:31:0x004b, code lost:
  89. throw r7;
  90. */
  91. /* JADX WARNING: Code restructure failed: missing block: B:35:0x004e, code lost:
  92. r6 = move-exception;
  93. */
  94. /* JADX WARNING: Code restructure failed: missing block: B:37:?, code lost:
  95. r4.close();
  96. */
  97. /* JADX WARNING: Code restructure failed: missing block: B:38:0x0053, code lost:
  98. r7 = move-exception;
  99. */
  100. /* JADX WARNING: Code restructure failed: missing block: B:39:0x0054, code lost:
  101. r5.addSuppressed(r7);
  102. */
  103. /* JADX WARNING: Code restructure failed: missing block: B:40:0x0057, code lost:
  104. throw r6;
  105. */
  106. private void triggerRootScanProc() {
  107. int ret = 0;
  108. if (!this.mIsRootScanHasTrigger) {
  109. try {
  110. FileInputStream fileInputStream = new FileInputStream(new File(FILE_PROC_ROOT_SCAN));
  111. InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
  112. BufferedReader reader = new BufferedReader(inputStreamReader);
  113. if (reader.read() != -1) {
  114. this.mIsRootScanHasTrigger = true;
  115. }
  116. reader.close();
  117. inputStreamReader.close();
  118. fileInputStream.close();
  119. } catch (FileNotFoundException e) {
  120. HiLog.error(HILOG_LABEL, "triggerRootScan, trigger file cannot be found", new Object[0]);
  121. ret = -3;
  122. } catch (IOException e2) {
  123. HiLog.error(HILOG_LABEL, "failed to read the trigger proc file", new Object[0]);
  124. ret = -4;
  125. } catch (NumberFormatException e3) {
  126. HiLog.error(HILOG_LABEL, "some data is not of the type Integer during parsing trigger file", new Object[0]);
  127. ret = -1;
  128. }
  129. HiLog.debug(HILOG_LABEL, "bootcompleted trigger return value = %{public}d", new Object[]{Integer.valueOf(ret)});
  130. }
  131. }
  132. /* access modifiers changed from: package-private */
  133. public void setListener(Listener listener) {
  134. this.mListener = listener;
  135. }
  136. public void triggerRootScan() {
  137. sStartTime = System.currentTimeMillis();
  138. triggerRootScanProc();
  139. getRootStatusAndReport();
  140. sEndTime = System.currentTimeMillis();
  141. HiLog.debug(HILOG_LABEL, "trigger root scan success!, whole rootscan run TIME = %{public}d ms", new Object[]{Long.valueOf(sEndTime - sStartTime)});
  142. }
  143. public static void init(Context context) {
  144. synchronized (RootDetectReport.class) {
  145. if (sInstance == null) {
  146. sInstance = new RootDetectReport(context);
  147. }
  148. }
  149. }
  150. public static RootDetectReport getInstance() {
  151. RootDetectReport rootDetectReport;
  152. synchronized (RootDetectReport.class) {
  153. rootDetectReport = sInstance;
  154. }
  155. return rootDetectReport;
  156. }
  157. }