一:阅读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相关推荐

  1. 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 ...

  2. for循环与while循环效率对比·5年以下编程经验必看C#】

    for效率测试代码: using System; using System.Diagnostics; namespace Action {class Program{static void Main( ...

  3. ssis for循环容器_SSIS Foreach循环与For循环容器

    ssis for循环容器 In this article, first, we will briefly describe foreach loops and for loops. Then, we ...

  4. Android代码规约

    Android代码规约 写在前面的话 对软件来说,适当的规范和标准绝不是消灭代码内容的创造性.优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,高效协作即降低协同成本.所谓无 ...

  5. C语言之for循环与while循环

    文章目录 一.单层for循环 二.for循环与if选择的嵌套 三.多层for循环的嵌套 四.while循环 五.总结 一.单层for循环 引例:C语言实现求1到10的和(用for循环实现) #incl ...

  6. Python中For循环与While 循环的使用

    Python中For循环与While 循环的使用 For循环在枚举中使用: Continue和Break在For循环中的使用: 举例: For 循环与While 循环区别: break语句在While ...

  7. python getitem_Python for循环与getitem的关系详解

    这篇文章主要介绍了Python for循环与getitem的关系详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个类里面如果由__iter__ ...

  8. for循环与while循环

    for循环与while循环 一.for循环 1.for为关键字,表示循环控制 2.for有四要素:循环变量初始化.循环条件.循环操作.循环变量迭代 3.循环操作,这里可以有多条语句,也就是我们要循环执 ...

  9. 下载最新Android代码的方法

    之前我是去Android官方网站下载最新Android代码,但是这种方法需要翻墙,而且有时候翻墙又不太方便,今天我发现一个不错的网站,是清华大学搞的,跟Android官方的代码基本保持同步,而且下载方 ...

最新文章

  1. 职业-把工作当作职业 or 事业?
  2. linux wine 中文乱码,Linux下使用Wine出现中文乱码的解决方法
  3. shell 中去掉末尾换行符
  4. 防数据泄密:是否应实施“多重认证”?
  5. Vue学习笔记之Vue学习前的准备工作
  6. 永恒之蓝(MS17010)漏洞kali使用MSF进行漏洞复现
  7. 树言树语:QQ影音和暴风影音用户体现
  8. 恶意软件相似度检测过程
  9. [BZOJ5064]B-number
  10. 怎么把PDF转换成图片?教大家两种方式转换
  11. Excel一个图中设置两个纵坐标
  12. 05-【VirtualBox】VirtualBox 导入、导出虚拟机,实现从一台电脑中的虚拟机复制到另一台电脑
  13. 一键重装系统后电脑黑屏怎么办,电脑系统重装黑屏
  14. Yocto系列讲解[技巧篇]90 - toolchain交叉编译器SDK中安装的软件
  15. 大数据、趋势与黑天鹅
  16. html中如何引用其外部字体,css引入外部字体
  17. 执行kubectl get csr显示NoT found.
  18. 周末的一点心得和总结(Latex技巧,多巴胺和韦伯-费希纳定律还有微商)
  19. l36h android os,魅族FlymeOS 3.0适配索尼Xperia Z (L36h)官方ROM发布
  20. 枚举与模拟总结--常梓良

热门文章

  1. Py之distance:distance的简介、安装、使用方法之详细攻略
  2. Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)
  3. Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
  4. 密码检验规则(字母数字和特殊字符组成的混合体)
  5. CentOS通过日志反查入侵(转)
  6. day05 Spring中自定义注解的用处-之获取自定义的Servie
  7. Nrf51822中设置128bit UUID service
  8. Google App Engine平台下JDOQL查询报异常的问题解决方案
  9. javascript 学习笔记(四) 倒计时程序
  10. mysql使用从c3p0_使用c3p0連接池操作mysql數據庫中文亂碼解決辦法