本文实例讲述了Android编程之防止反编译的实现方法。分享给大家供大家参考,具体如下:
1. 判断程序是否运行在模拟器上
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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\n" );
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签名,再与之前得做比较
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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. 检测包名,版本名和版本号,然后做判断:
1
2
3
4
5
6
7
8
9
10
11
12
|
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格式得图片 但是最新版本的apktool已经修复了
5. 花指令,影响jd-gui 但是最新版本的jd-gui已经修复
1
2
3
4
5
|
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.需要使用官方的打包key工具打包后上传到"爱加密"网站进行处理,然后到网站上面下载,下载后还要用"爱加密"的打包工具再次进行打包即可。
希望本文所述对大家Android程序设计有所帮助。