Android逆向文档阅读笔记-Android Application Fundamentals
Posted IT1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android逆向文档阅读笔记-Android Application Fundamentals相关的知识,希望对你有一定的参考价值。
Fundamentals Review
android应用程序是在APK格式的文件中的,APK是基于ZIP文件的(可以将APK后缀改成ZIP后缀,然后可以使用unzip去解压)。
APK文件内容:
AndroidManfest.xml
META-INF/
·存储签名相关的信息
classes.dex
·Dalvik字节码,存储在dex后缀的文件中。android的dalvik虚拟机则是.dex可执行文件,你可以理解为是.class的进一步封装。
lib/
·Native库,包含CPU的库模拟,如armeabi、mips等;
assets/
·每个应用程序都需要这个目录;
·可以包含额外的native以及dex文件。恶意代码、native库、Dalik经常都是放在这个地方。
Dalvik & Smali
Android应用大部分都是Java写的,在Android上,Java会被编译为DEX(Dalvik Executable)。
正向开发是吧Java代码编译成DEX代码,逆向开发刚好相反:
逆向工程师:
Smali代码就是Android上的汇编代码。
如下面的Java代码:
public static void printHelloWorld() {
System.out.println("Hello World")
}
对应的Smali代码是:
.method public static printHelloWorld()V
.registers 2
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1, "Hello World"
invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
return-void
.end method
程序的入口点
逆工程最重要的事情是找到程序的入口点,便于分析。有以下几个入口点:
1.Launcher Activity:哪些带有UI的程序,会有一个活动页,当运行Android程序时会首先加载这个活动页,在AndroidManfest.xml中定义了主活动页,
<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2.Services:无UI界面的Android应用,要关注Services,当startService调用启动服务时,onStart方法将会被执行。
3.Broadcast Receivers:有时消息传递就是使用广播。Broadcast Receivers监听器广播。这个监听器有两种方法:一个是调用registerReceiver()这个API,另一个是在代码中重写onReceive此方法。
4.Exported Components(Services & Activities):Services和Activities可以被导出,允许其他进程和服务进行调用,导出的Services和Activities可以被其他进程或设备调用,通过查看AndroidManfest.xml中的结点信息可只他是否被导出:
<service android:name=".ExampleExportedService" android:exported="true"/>
<activity android:name=".ExampleExportedActivity" android:exported="true"/>
5.Application Subclass:一般程序会继承Application类,首先考虑attachBaseContext,其次考虑onCreate。
以上是关于Android逆向文档阅读笔记-Android Application Fundamentals的主要内容,如果未能解决你的问题,请参考以下文章
Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档
什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战
Android逆向笔记-IDA Pro动态调试Android程序(真机)