静态分析android代码, 循环与trycatch
一:阅读dalvik字节码,可用ida阅读dex, 或直接文本阅读smali文件
二:阅读java源码,可用dex2jar生成jar文件,再使用jd-gui来阅读jar文件的源码。
Android.intent.category.LAUNCHER 在程序列表中可见。
1. application类用于组件之间传递全局变量在主activity启动之前做一些工作,主activity可以通过AndroidManifest.xml中的android.intent.action.MAIN来定位。
2. dex文件的数据结构大部分在dalvik\libdex\DexFile.h中,可以整理成ida的idc脚本来导入ida6.1中。
3. ida分析中,imp表明该方法为androidSDK中的API,@后为声明,类名与方法名用_分开,并且能识别隐参数this,由于this取代p0, 则后面的参数命名都依次-1.
4. 1. d2j-dex2jar xxx.apk 2. Ja-gui
Smali文件格式:
//smali文件的头三行描述类信息
.class <访问权限>[修饰关键字]<类名>
.super<父类名>
.source<源文件名>
#static fields
.field<访问权限>static[修饰关键字]<字段名>:<字段类型>
#instance fields
.field<访问权限>[修饰关键字]<字段名>:<字段类型>
#direct methods
.method <访问权限> [修饰关键字] <方法原型>
<.locals> #局部变量数
[.parameter] #dalvik使用.parameters指定参数个数,而这表示一个参数,多个参数者出现多个.parameter.
[.prologue] #代码开始处
[.line] #指定该处指令在源码中行号
<代码体>
.end method
#interfaces
.implements <接口名>
如何类使用注解,则生成.annotation指令
#annotation
.annotation[注解属性]<注解类名>
[注解字段=值]
.end annotation
循环语句:
Iterator<对象><对象名> = <方法返回一个对象列表>;
For(<对象><对象名>:<对象列表>){
[处理单个对象代码]
}
Iterator<对象><迭代器> = <方法返回一个迭代器>;
While(<迭代器>.hasNext()){
<对象><对象名> = <迭代器>.next();
[处理单个对象的代码]
}
:goto_0
invoke-interface{v2}, Ljava/util/Iterator;->hasNext()Z
move-result v5
if-nez v5, :cond_0
…
:cond_0
invoke-interface {v2},Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v1
…
goto :goto_0
try catch:
try {
String a = "sdf";
Toast.makeText(this,a,Toast.LENGTH_SHORT);
try {
if( true ){
throw newNumberFormatException();
}
} catch (NumberFormatException e) {
Toast.makeText(this,"number format exception", Toast.LENGTH_SHORT);
}
} catch (IllegalArgumentException e){
Toast.makeText(this,"IllegalArgumentException",Toast.LENGTH_SHORT);
}
Smali:
.line 19
:try_start_0
const-string v0, "sdf"
.line 20
.local v0, "a":Ljava/lang/String;
const/4 v2, 0x0
invoke-static {p0, v0, v2},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
:try_end_0
.catch Ljava/lang/IllegalArgumentException;{:try_start_0 .. :try_end_0} :catch_1
.line 23
:try_start_1
new-instance v2,Ljava/lang/NumberFormatException;
invoke-direct {v2},Ljava/lang/NumberFormatException;-><init>()V
throw v2
:try_end_1
.catch Ljava/lang/NumberFormatException;{:try_start_1 .. :try_end_1} :catch_0
.catch Ljava/lang/IllegalArgumentException;{:try_start_1 .. :try_end_1} :catch_1
.line 25
:catch_0
move-exception v1
.line 26
.local v1,"e":Ljava/lang/NumberFormatException;
:try_start_2
const-string v2, "number format exception"
const/4 v3, 0x0
invoke-static {p0, v2, v3},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
:try_end_2
.catch Ljava/lang/IllegalArgumentException;{:try_start_2 .. :try_end_2} :catch_1
Ida6.1 ctrl+s 选择String 搜索字符串, 选择code搜索api
Dex2jar 转换apk to jar, jd-gui 查看jar源码。
静态分析android代码, 循环与trycatch相关推荐
- php in循环与for循环,详谈js中标准for循环与foreach(for in)的区别
js中遍历数组的有两种方式 var array=['a'] //标准的for循环 for(var i=1;i alert(array[i]) } //foreach循环 for(var i in ar ...
- for循环与while循环效率对比·5年以下编程经验必看C#】
for效率测试代码: using System; using System.Diagnostics; namespace Action {class Program{static void Main( ...
- ssis for循环容器_SSIS Foreach循环与For循环容器
ssis for循环容器 In this article, first, we will briefly describe foreach loops and for loops. Then, we ...
- Android代码规约
Android代码规约 写在前面的话 对软件来说,适当的规范和标准绝不是消灭代码内容的创造性.优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,高效协作即降低协同成本.所谓无 ...
- C语言之for循环与while循环
文章目录 一.单层for循环 二.for循环与if选择的嵌套 三.多层for循环的嵌套 四.while循环 五.总结 一.单层for循环 引例:C语言实现求1到10的和(用for循环实现) #incl ...
- Python中For循环与While 循环的使用
Python中For循环与While 循环的使用 For循环在枚举中使用: Continue和Break在For循环中的使用: 举例: For 循环与While 循环区别: break语句在While ...
- python getitem_Python for循环与getitem的关系详解
这篇文章主要介绍了Python for循环与getitem的关系详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个类里面如果由__iter__ ...
- for循环与while循环
for循环与while循环 一.for循环 1.for为关键字,表示循环控制 2.for有四要素:循环变量初始化.循环条件.循环操作.循环变量迭代 3.循环操作,这里可以有多条语句,也就是我们要循环执 ...
- 下载最新Android代码的方法
之前我是去Android官方网站下载最新Android代码,但是这种方法需要翻墙,而且有时候翻墙又不太方便,今天我发现一个不错的网站,是清华大学搞的,跟Android官方的代码基本保持同步,而且下载方 ...
最新文章
- 职业-把工作当作职业 or 事业?
- linux wine 中文乱码,Linux下使用Wine出现中文乱码的解决方法
- shell 中去掉末尾换行符
- 防数据泄密:是否应实施“多重认证”?
- Vue学习笔记之Vue学习前的准备工作
- 永恒之蓝(MS17010)漏洞kali使用MSF进行漏洞复现
- 树言树语:QQ影音和暴风影音用户体现
- 恶意软件相似度检测过程
- [BZOJ5064]B-number
- 怎么把PDF转换成图片?教大家两种方式转换
- Excel一个图中设置两个纵坐标
- 05-【VirtualBox】VirtualBox 导入、导出虚拟机,实现从一台电脑中的虚拟机复制到另一台电脑
- 一键重装系统后电脑黑屏怎么办,电脑系统重装黑屏
- Yocto系列讲解[技巧篇]90 - toolchain交叉编译器SDK中安装的软件
- 大数据、趋势与黑天鹅
- html中如何引用其外部字体,css引入外部字体
- 执行kubectl get csr显示NoT found.
- 周末的一点心得和总结(Latex技巧,多巴胺和韦伯-费希纳定律还有微商)
- l36h android os,魅族FlymeOS 3.0适配索尼Xperia Z (L36h)官方ROM发布
- 枚举与模拟总结--常梓良
热门文章
- Py之distance:distance的简介、安装、使用方法之详细攻略
- Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)
- Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
- 密码检验规则(字母数字和特殊字符组成的混合体)
- CentOS通过日志反查入侵(转)
- day05 Spring中自定义注解的用处-之获取自定义的Servie
- Nrf51822中设置128bit UUID service
- Google App Engine平台下JDOQL查询报异常的问题解决方案
- javascript 学习笔记(四) 倒计时程序
- mysql使用从c3p0_使用c3p0連接池操作mysql數據庫中文亂碼解決辦法