Android逆向分析01-静态分析android程序

《Android软件安全与逆向分析》是刚开始接触看的书,很不错。前期也主要是根据非虫的教程进行学习。

 附上Java分享知识网给出的PDF链接。链接:http://pan.baidu.com/s/1bTYOFW 密码:l5n4

1.静态分析定义

是指在不运行代码的情况下,采用词法分析、语法分析等手段对程序文件进行扫描从而生成程序的反汇编代码,然后阅读反汇编代码来掌握程序功能的一种技术。

2.快速定位关键代码

smali代码相对于java代码都显得非常的臃肿,而我们对软件进行逆向也并不是需要阅读全部代码,所以找到自己所需就很关键。

2.1 反编译apk

每个apk文件中都包含一个androidManifest.xml文件,它记录着软件的一些基本信息。比如包名、运行的系统版本,用到的组件。这一步主要是查看他的方法,找到主Activity。

2.2 主Activity

主Activity就是程序的入口,第一个运行的必然是主Activity,和c语言的main函数一样。

2.3 Application

这个类是传递全局变量,可以通过访问application来进行访问。

2.4 定位关键代码的六种方法。

(1).信息反馈发。
找到主Activity的一些反馈信息,比如登陆成功之类的字符提示信息,然后去string.xml中找到这个信息,通过查找它的变量名来找到它的id,通过id定位来寻找它的调用,确定程序所在位置。
(2).特征函数法:
在不管程序给出什么样的反馈信息,终究是需要调用android SDK中提供的相关API完成的,比如提示信息的方法就是调用Toast。
(3).顺序查看法:
顺序查看法是指从软件的启动代码开始,逐行的向下分析,掌握软件的执行流程。这种方法在分析病毒中经常用的到。
(4).代码注入法:
手动修改apk文件的反汇编代码,加入log输出,执行到特定点时的状态数据。在解密程序数据时经常用到。
(5).栈跟踪法
栈跟踪法属于动态调试方法,它的原理是输出运行时的栈跟踪信息,然后查看栈上的函数调用序列来理解方法的执行流程。
(6).Method Profiling
方法剖析属于动态调试方法,主要用于热点分析和性能优化。

3.smali文件格式

3.1 每个smali文件的统一头三行格式

.class<访问权限>[修饰关键字]<类名>
.super<父类名>
.source<源文件名>

3.2 前三行过后就是字段或方法组成,首先是字段的声明方式。

smali文件中字段的声明使用".field"
静态字段的声明格式:
static fields
.field<访问权限>static[修饰关键字]<字段名>:<字段类型>

3.3 方法的声明方式:

".method",方法分为直接方法与虚方法。
直接声明格式:
direct methods
.method<访问权限>[修饰关键字]<方法原型>
<.locals>//指定使用的局部变量的个数
<.parameter>//指定了方法的参数,有几个参数,就会有几个.parameter.
<.prologue>//指定了代码的开始处,如果是混淆过的代码可能会去掉该指令。
<.line>//指定了改指令在源代码中的行号。混淆后可能会除去了行号的信息。
<代码体>
.end method


虚方法的声明
虚方法只是在起始处的注释为:virtual methods

3.4 类实现了接口

smali文件中使用".implements"指令指出
interfaces
.implements<接口名>

3.5 注解smali表示

smali中是用".annotation"指令指出。注解格式如下:
annotation
.annotation[注解属性]<注解类名>
[注解字段=值]
.end annotation

4 smali基本逻辑代码

4.1 循环语句

4.2 switch语句

4.3 try/catch语句




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值