android反编译语句实例分析
来源:互联网 发布:大数据盈利模式 编辑:程序博客网 时间:2024/06/04 23:35
1.if语句
先看实例对比:
private boolean isSimExist() { if ((mTelephonyManager.getSimState() == 1) || (mTelephonyManager.getSimState() == 0)) return true; else return false; }反编译后:
private boolean isSimExist() { int i = 1; if ((this.mTelephonyManager.getSimState() != i) && (this.mTelephonyManager.getSimState() != 0)) i = 0; return i; }反编译中会把if的中的条件取反,先处理else部分,如没有else部分,后面会直接跟一个return语句;
有时会还会跟一个break语句:
if (this.power < 100) break label857; str9 = getResources().getString(2130968578);label1857的部分:
label857: String str8 = getResources().getString(2130968577) + "(%d%%)"; Object[] arrayOfObject = new Object[1]; arrayOfObject[0] = Integer.valueOf(this.power); str9 = String.format(str8, arrayOfObject);源代码是:
if (this.power >= 100) { str9=getResources().getString(R.string.chargingHint2); } else { String str8 = getResources().getString(R.string.chargingHint1) + "(%d%%)"; Object[] arrayOfObject = new Object[1]; arrayOfObject[0] = Integer.valueOf(this.power); str6 = String.format(str7, arrayOfObject); }以上的分析都是基于if语句在反编译后逻辑发生了改变的,但很多时候反编译过来的if语句逻辑是正常的就用不着以上的分析了。
2.for语句:
先看实例对比:
for(int k=0;k<tubiao.length;k++) { if (k % 2 == 0) { tubiao[k] = (x_unlockbg + tubiao[k] * imgunlockBg.getWidth() / 320); } else { tubiao[k] = (y + tubiao[k] * imgunlockBg.getWidth() / 320); } }反编译后:
if (i1 >= this.tubiao.length) { } else { if (i1 % 2 == 0) this.tubiao[i1] = (i + this.tubiao[i1] * this.imgunlockBg.getWidth() / 320); while (true) { ++i1; break label439: this.tubiao[i1] = (j + this.tubiao[i1] * this.imgunlockBg.getWidth() / 320); } }反编译后咋一看确认很难看出有for语句的迹象,但细分析还是可以看出一些眉目,
外面有if判断,里面有while(true),++语句。与for语句的逻辑还是有些像的。
3.switch语句,这个已有前人总结了,这里附上链接
http://blog.csdn.net/xyz_fly/article/details/8014455
4.枚举类型
先看实例对比:
private static enum lockstate { PHONE, CAMERA, LOCK, NONE }反编译后:
private static enum lockstate { static { CAMERA = new lockstate("CAMERA", 1); LOCK = new lockstate("LOCK", 2); NONE = new lockstate("NONE", 3); lockstate[] arrayOflockstate = new lockstate[4]; arrayOflockstate[0] = PHONE; arrayOflockstate[1] = CAMERA; arrayOflockstate[2] = LOCK; arrayOflockstate[3] = NONE; ENUM$VALUES = arrayOflockstate; } }可以看出枚举数值存储在一数组中。
- android反编译语句实例分析
- Android 反编译apk 语句
- Android反编译app实例
- Android反编译分析软件
- Android反编译分析工具
- android逆向分析之反编译
- 【转+原】Android代码反编译及分析
- Android HAL实例分析
- Android HAL实例分析
- Android NotePad 实例分析
- Android Uevent实例分析
- android 实例和分析
- Android------Binder 实例分析
- android ANR实例分析
- 【Android安全】APK静态分析-源码反编译逆向分析
- android反编译防止反编译
- 实例详解:反编译Android APK,修改字节码后再回编译成APK
- 实例详解:反编译Android APK,修改字节码后再回编译成APK
- boost thread pool
- 概述 - Node.js API 文档
- tcpdump批处理命令获取root权限的方法总结
- Jquery Datepicker操作案例
- 转:Python2入门教程 超详细1小时学会Python
- android反编译语句实例分析
- Configure Secure FTP, with VSFTPD
- ExtJS的TabPanel在Java应用中使用总结
- js 去除数组中重复的的数
- HTML图标制作工具----ECharts
- chapter 2: Representing and manipulating information
- 获取网卡MAC地址
- 你还敢用VC6吗??
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)