这里强调一句,在学习的时候,一定要进行笔记的书写,这样才可以
1.对安卓开发的进行简单的复习(由于本人是Android开发的,所以layout就不重复了)。
2.对最简单的安卓App进行开发。
3.对smali代码进行进一步的学习。
4.对dex文件的分析
5.简单的动态调试
6.静态分析
7.Davlik虚拟机
8.简单的APK文件分析。
以上待补充
1.Android studio 基本操作
2.apktool
3.APKIDE
4.AndroidKiller
5.jd-gui
1.android简单开发能力
2.smali代码简单了解
3.java了解
4.一些简答工具的使用
本次学习内容:
Android开发简单的HelloWorld
对开发的HelloWorld进行反编译
开发了一些简单的App所以对于这个Android项目建立就不赘述,想学的可以去单独看看Android开发。
新建一个project,更改名称
选择API
默认选择,然后下一步。
选择activity的名称,也就是我们主Activity的名称,什么是主Activity,就是类似于c语言的main函数,当然只是类似。
因为Android studio新建的程序有基本xml,还有helloworld,所以这里不讲解。也不用谷歌自带的模拟器了,直接生成apk。
Build —— Build APK
然后等待,就会Build APK。
在first_demo\app\build\outputs\apk下就可以看到我们生成的APK。
这个APK就可以在手机或者其他的虚拟机上进行测试了。
我这里使用的是夜神模拟器,自己百度下载就好。这里不提供下载链接。
把自己的APK拖进去就可以了。
这个是Android studio自带的神器,以前没有用过,这次写的时候才发现,用的方法很简单。
Build ——Analyze APK就可以了。
这个东西以后如果用的到的话就进行详细了解。
APK的实质就是一个特殊的zip文件包。
把APK拖到Submit中进行一个查看,当然也可以用其他工具。
这次我们只是做一个查看,不进行分析。
这是我重新写的,之前写的那份不知道为什么没有保存,这两天回家,网卡到爆炸。好气emmmm。
把APK后缀改成.zip然后解压,就会得到一些文件。
这里就是所有的文件了。我们来依次做一个简单的认识。
这里就是签名文件了。这次只是简单的认识。
这里面放的是一些图片资源文件,比如说是一些图标。
简单的说就是R.等资源存放的地方,这个可能开发的人更能理解吧。
dex文件就是java代码编译之后的内容,也是我们手机可以直接运行的文件。
这个文件里是是一些权限的描述,还有主文件的问题。
这些文件以后都会进行详细的分析。
使用java -jar apktool.jar d demo.apk指令进行反编译,但是可能会出现一个问题,就是apktool可能因为版本过低的,编译的时候会出问题。
我们在cmd中输入命令。
然后就反编译成功了。
这个文件夹里里面就是签名文件和AndroidManifest.xml
反编译后还是资源文件。
这个就是我们的主要文件,dex文件被编译出来的就是samli文件,这个也是我们要主要研究的东西。
这个文件就是资源文件。并不是我们主要看的文件。
首先来看看代码
.class public Lcom/example/hanlei/first_demo/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/first_demo/MainActivity;->setContentView(I)V
.line 12
return-void
.end method
有没有觉得这个模块很熟悉,就是之前我们学习的开头文件。描述了一个路径,以及名称。
这个模块就是,之前的通用模块,只是多了一句继承语句。support。
第三个模块就是onCreate模块,学习过Android编程的肯定知道这个就是启动模块,相当于main函数。
我们来看看具体都有哪些内容吧。
.param p1, "savedInstanceState" # Landroid/os/Bundle;
这一句话之前没有见到过,意思就是说传入的参数名为savedInstanceState。
invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V
这句话很简单,就是调用Landroid/support/v7/app/AppCompatActivity这一串的onCreate方法。然后返回值就是空。
const v0, 0x7f04001b
定义一个v0寄存器,赋值为0x7f04001b
invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V
然后调用setContentView方法把v0的值传进去。
有没有感觉到之前在反编译java得到的smali对现在很有帮助呢。
使用方法很简单拖进去,简单粗暴易懂。
这个是编译之后的内容,和我们用apktool编译出来的一样但是这个提供了很多插件功能,这个之后再进行细说。
这个是我自己喜欢用的,之前喜欢用APKIDE之后喜欢用AndroidKiller了。
方法也是很简单。直接拖进去就好了。
具体怎么使用之后详细说明。
如果说smali代码看不懂的话,那么java代码是不是相对要容易一点呢了。
JD-GUI这个工具的作用就是用来查看JAR文件的。我们把dex文件转成jar,然后就可以使用JD-GUI来查看了。
这个是查看apktool.jar文件做的演示。
使用命令:
java -jar apktool.jar b demo
生成的APK会存放在这个文件里,见图。
至于回编译的具体流程之后会慢慢讲到。
这里只说APKTOOl的,其他的之后慢慢来,超级简单,自己研究吧。
我在想要不要再加点c语言,python什么的,是不是有点乱了。我觉得要复习的还有很多东西哦。
最后加上一个简单的总结吧。
1.APK内容文件的分析(网络问题,我写了四遍)
2.apktool的使用(我第一次用你敢信?)
3.工具(我本来就会用基本的,也不算是所得吧)
4.思路
5.其它
有兴趣可以看看这个java基础系列,对smali理解可能有帮助。
Android逆向-java代码基础(1)
Android逆向-java代码基础(2)
Android逆向-java代码基础(3)
Android逆向-java代码基础(4)
Android逆向-java代码基础(5)
Android逆向-java代码基础(6)
Android逆向-java代码基础(7)
Android逆向-java代码基础(8)