Android静态分析(一)smali静态分析(常用注入)
目录:
1.关键字定位分析
2.从启动开始分析
3.改变布局样式
4.使用log进行注入
5.使用Toast进行注入
6.栈跟踪
0x00 关键字定位分析
1.具体定位查看
2.也可以查看
0x01 从启动开始分析
1.之前自己编写了一个APK,就是非常简单的HelloWorld,我们就从这个APK来进行分析。
2.首先来看AndroidMainfest.xml
2.1 代码
2.2 找到入口Activity
一般的入口函数都会包含这样的信息。
2.3 对应的activity名称。
入口Activity是.MainActivity
找到对应位置打开即可。
3. 分析主Activity内容
.class public Lcom/example/hanlei/myapplication/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"
direct methods
.method public constructor ()V
.locals 0
.prologue
.line 6
invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;->()V
return-void
.end method
# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
.locals 1
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.prologue
.line 10
invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V
.line 11
const v0, 0x7f04001b
invoke-virtual {p0, v0}, Lcom/example/hanlei/myapplication/MainActivity;->setContentView(I)V
.line 12
return-void
.end method
具体分析看
如果想使用submit详细分析smali语言的话,请看:
0x02 改变布局样式
1.改变布局样式就要从android的layout来进行调整了,需要一些layout的基本知识,首先要知道一些控件的使用等。
2.我们这里使用button按钮,改变布局
2.1 改变前的布局
2.2 改变前的布局代码
xmlns:android="http://schemas.android.com/apk/res/android">
2.3 使用button代码进行改变布局
2.4 查看注入效果
0x03 使用log进行注入
1.利用log进行注入可以获取到一些重要信息,在动态调试中有很好的应用。
2.log的基本格式
注意这里需要将内存器加一
const-string v4,"message"
invoke-static{v4,v4};Landroid/unit/log;->d(Ljava/lang/String;)I
之后的动态调试将会详细进行使用这个功能。
0x04 使用Toast进行注入
1.使用最简单的Toast进行注入。
1.1 使用代码
复制粘贴到需要使用的地方即可
const-string v0, "Message"#这里就是需要输出的内容。
const/4 v1, 0x1
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
1.2.使用参考传送门
1.3效果
2.第二种Toast
2.1代码
new-instance v0, Landroid/app/AlertDialog$Builder;
invoke-direct {v0, p0}, Landroid/app/AlertDialog$Builder;->(Landroid/content/Context;)V
const-string v1, ""#输入想要输出的内容
invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
move-result-object v0
invoke-virtual {v0}, Landroid/app/AlertDialog$Builder;->show()Landroid/app/AlertDialog;
2.2使用效果
我们在入口函数添加我们的代码。就输出内容为smali注入吧。
3.第三种Toast
3.1 代码
new-instance v0, Landroid/app/AlertDialog$Builder;
invoke-direct {v0, p0}, Landroid/app/AlertDialog$Builder;->(Landroid/content/Context;)V
const-string v1, ""#这里输入想要弹出的内容
invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
move-result-object v0
invoke-virtual {v0}, Landroid/app/AlertDialog$Builder;->show()Landroid/app/AlertDialog;
3.2 效果说明
4.第四种Toast窗
4.1 代码
new-instance v0, Landroid/app/AlertDialog$Builder;
invoke-direct {v0, p0}, Landroid/app/AlertDialog$Builder;->(Landroid/content/Context;)V
const-string v1, ""#标题
invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
move-result-object v0
const-string v1, ""#内容
invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
move-result-object v0
invoke-virtual {v0}, Landroid/app/AlertDialog$Builder;->show()Landroid/app/AlertDialog;
4.2效果
0x05 栈跟踪
这个在之后的动态调试进行详细了解,可能需要先学习一下OD来进行一下了解。