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来进行一下了解。