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逆向自学笔记入门到实战

IDA 调试 Android 方法及简单的脱壳实现

Android逆向笔记-IDA Pro动态调试Android程序(真机)

Android逆向笔记-Proguard混淆Android代码以及去打印日志信息

Android逆向从未如此简单