安卓逆向分析基础知识介绍
2023-5-26 08:56:10 Author: 网络安全与取证研究(查看原文) 阅读量:25 收藏

这篇主要是教大家APK基础知识,了解APK包的基础结构、APP多开原理、简易修改APK信息等内容。APK 的全称是Android Package,它相当于一个压缩文件,大多数压缩软件(7z、好压)都可以直接解压。

assets目录

存放的都是一些静态文件,比如图片、音视频等等。


lib 目录

用来存放应用程序所依赖的native库文件,native库一般是用C/C++进行编写的,这里的lib库可能包含4种不同类型,根据CPU型号的不同,我们大体可以分为ARM,ARM-v7a,MIPS,X86,分别对应着ARM架构,ARM-V7架构,MIPS架构和X86架构。

其中,不同的CPU架构对应着不同的目录,每个目录中可以存放非常多的对应版本的so库,而且这个目录的结构固定,用户只能按照这个目录来存放自己的so库。目前市场上使用的移动终端大多是基于ARM或者ARM-v7a架构的。从厂家上来分是有三种,arm,x86,MIPS,arm 系列是绝大多数手机上使用的,x86 主要是运用在平板上,而 MIPS ,我基本上就没见过。


META-INF目录

 保存应用程序的签名信息,签名信息可以验证APK文件的完整性。什么是签名呢?在android系统中,不同App之间是依靠包名、数字签名共同来进行区分的。虽然Google建议我们用自己的域名的反写作为包名的前缀来定义包名(例如com.google.),但是这并不能做到万无一失,我们不能单单利用包名来区分apk,所以提出了签名的概念。顾名思义,就是在apk上打上作者的烙印。


AndroidManifest.xml文件

 他是用来告诉android系统,这里面有关于APP的配置信息,你需要根据里面的设置的配置信息来运行这个app。每个应用程序在根目录下必须包含一个AndroidManifest.xml文件,且文件名不能修改。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="webapp.wawagongju" platformBuildVersionCode="30" platformBuildVersionName="S" android:versionCode="9" android:versionName="5.6" android:compileSdkVersion="30" android:compileSdkVersionCodename="S">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application android:theme="@style/Theme.WebApp" android:label="蛙蛙工具" android:icon="@drawable/icon" android:supportsRtl="true" android:usesCleartextTraffic="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory">
        <activity android:name="p063cn.woobx.webapp.WebAppMainActivity" android:configChanges="keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>
classes.dex文件

 是Java源码编译后生成的Java字节码文件,APK运行的主要逻辑。resources.arsc文件 是编译后的二进制资源文件,它实际上就是App的资源索引表。这两个前期先简单了解一下是什么就可以了。

在演示APK安装包和微信安装包里面多了我标记的这两个文件夹:

kotlin

Kotlin和Java是用于Android应用程序开发的两种编程语言,即使是有技术背景的人,也会混淆Kotlin和Java,更不要说那些不知道这两个词的人了。而自Google推出Kotlin作为Android应用程序开发的第二种官方编程语言以来,Java与Kotlin之战就变得更加激烈了。

okhttp3

OKHttp是一个当前主流的网络请求的开源框架,很多APK将其调用。

以上就是对APK基本架构的简述,通过对这些资源的一个介绍,在下面讲到的简易修改APK可以快速定位。比如我们要修改一个图片或音频,那我们第一时间应该直接找到 assets目录 去修改、替换。如果要修改APK的主要逻辑,就应该从 dex 文件中去修改。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg3NTU3NTY0Nw==&mid=2247487012&idx=1&sn=ac65ff6d3decbfab758408d939ee06c3&chksm=cf3e2e14f849a702d8a6b1abb4a17c50c2bf2bf77400731f029b6041ed771fdc98c6ca07b06e#rd
如有侵权请联系:admin#unsafe.sh