Androidプログラミングの逆コンパイル防止方法


本論文の例は、Androidプログラミングの逆コンパイル防止の実現方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
1.プログラムがシミュレータ上で実行されているかどうかを判断する

boolean isRunningInEmualtor() {
  boolean qemuKernel = false;
  Process process = null;
  DataOutputStream os = null;
  try{ 
   process = Runtime.getRuntime().exec("getprop ro.kernel.qemu"); 
   os = new DataOutputStream(process.getOutputStream());
   BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));
   os.writeBytes("exit
"); os.flush(); process.waitFor(); // getprop ro.kernel.qemu == 1 // getprop ro.product.model == "sdk" // getprop ro.build.tags == "test-keys" qemuKernel = (Integer.valueOf(in.readLine()) == 1); Log.d("com.droider.checkqemu", " :" + qemuKernel); } catch (Exception e){ qemuKernel = false; Log.d("com.droider.checkqemu", "run failed" + e.getMessage()); } finally { try{ if (os != null) { os.close(); } process.destroy(); } catch (Exception e) { } Log.d("com.droider.checkqemu", "run finally"); } return qemuKernel; }
2.keystoreのサインをチェックして、前と比較します。

public int getSignature(String packageName) {  
  PackageManager pm = this.getPackageManager();
  PackageInfo pi = null;
  int sig = 0;
  try {
   pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
   Signature[] s = pi.signatures;
   sig = s[0].hashCode(); 
  } catch (Exception e1) {
   sig = 0;
   e1.printStackTrace();
  }
  return sig;
}

3.パッケージ名、バージョン名とバージョン番号を検査して判断する:

private String getAppInfo() {
   try {
    String pkName = this.getPackageName();
    String versionName = this.getPackageManager().getPackageInfo(
      pkName, 0).versionName;
    int versionCode = this.getPackageManager()
      .getPackageInfo(pkName, 0).versionCode;
    return pkName + " " + versionName + " " + versionCode;
   } catch (Exception e) {
   }
   return null;
}

4.jpgの写真をpng形式の写真と書く  最新バージョンのapptoolはすでに修復されました。
5.花指令、影響jd-gi  しかし、最新バージョンのjd-guiはすでに修復されました。

private static final char[] wJ = "0123456789abcdef".toCharArray();
public static String imsi = "204046330839890";
public static String p = "0";
public static String keyword = "  ";
public static String tranlateKeyword = "%E7%94%B5%E8%AF%9D";

各クラスに上記のフィールドを追加します。
https://***/  サードパーティの「暗号化好き」サイト  1.公式のパッケージキーツールを使って包装して「暗号化する」ウェブサイトにアップロードして処理し、サイト上でダウンロードし、ダウンロード後は「暗号化する」パッケージツールで再度包装すればいいです。
ここで述べたように、皆さんのAndroidプログラムの設計に役に立ちます。