Android应用保护
2016-05-23 19:44
337 查看
if ((getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0){ Log.e("com.droider.antidebug", "程序被修改为可调试状态"); android.os.Process.killProcess(android.os.Process.myPid()); } if (android.os.Debug.isDebuggerConnected()) { //检测调试器 Log.e("com.droider.antidebug", "检测到测试器"); android.os.Process.killProcess(android.os.Process.myPid()); }
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(); 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; } public static String getProp(Context context, String property) { try { ClassLoader cl = context.getClassLoader(); Class SystemProperties = cl.loadClass("android.os.SystemProperties"); Method method = SystemProperties.getMethod("get", String.class); Object[] params = new Object[1]; params[0] = new String(property); return (String)method.invoke(SystemProperties, params); } catch (Exception e) { return null; } }
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; }
private boolean checkCRC() { boolean beModified = false; long crc = Long.parseLong(getString(R.string.crc)); ZipFile zf; try { zf = new ZipFile(getApplicationContext().getPackageCodePath()); ZipEntry ze = zf.getEntry("classes.dex"); Log.d("com.droider.checkcrc", String.valueOf(ze.getCrc())); if (ze.getCrc() == crc) { beModified = true; } } catch (IOException e) { e.printStackTrace(); beModified = false; } return beModified; }
转自:
http://blog.csdn.net/allenwells/article/details/47019605 http://blog.csdn.net/allenwells/article/details/47019615
相关文章推荐
- Android中混淆的使用
- Android 仿iOS右滑 finish 界面
- android录音和播放录音
- android Activity深层次研究
- Android实现手写板和涂鸦功能
- Android编程之SparseArray<E>详解
- Android线程总结
- Android一种字幕效果的实现
- Android多用户模式的特性
- Android开发的四大组件详解
- Android 6.0 关于WiFi的改变
- Android 获得view的宽和高
- android 布局问题(1)
- Android项目框架搭建 (所需要的资料)
- 深入懂得android view 生命周期
- Android Touch事件传递总结
- android 控件 翻页 ViewPager TabLayout RecyclerView
- 手淘双十一性能优化项目揭秘
- AndroidManifest.xml
- 超简单实现Android自定义Toast(附源码)