安卓逆向(一)

一、环境安装与配置:

// 没有技术要求,随便找一个安装视频按着步骤操作即可。
// jdk 安装
    (B站大学安装教程)
// IDEA 安装
    (B站大学安装教程)
// androidstudio 安装
    (B站大学)
// jadx 安装
    (B站大学安装教程)
// jeb 安装
    (B站大学安装教程)
// 雷电模拟器官网 | Magisk Delta(apk) | LSPosed(apk) 安装
    (B站大学安装教程)

二、adb介绍:

adb作用:pc端操作手机要用到它。

adb工作原理:
	在电脑中cmd命令行操作adb的客户端和电脑中的adb服务端交互,然后电脑中的adb的服务端和手机的daemon进程进行交互。然后在返回给电脑中的服务端,电脑中的服务端再返回给电脑中的客户端。cmd显示结果。

adb常用命令:
    adb help                        // 帮助信息,查看adb所支持的所有命令
    adb --version                   // 显示 adb 版本
	adb start-server                // 杀掉后重启
	adb kill-server                 // 杀死当前adb服务,如果连不上设备时,杀掉重启。(没事不要用它)
	adb devices                     // 查看当前连接的设备,已连接的设备会显示出来
    adb -p 6666 start-server        // 任意指定一个 adb shell 的端口(5037:adb默认端口,如果该端口被占用,可以指定一个端口号)
    
    adb shell pm list packages      // 列出当前设备/手机,所有的包名
    adb shell pm list packages -f   // 显示包和包相关联的文件(安装路径)
	adb install <文件路径\apk>      // 将本地的apk软件安装到设备(手机)上
	adb install -r <文件路径\apk>   // 覆盖安装
	adb uninstall <包名>            // 卸载该软件/app
    // 注意:安装时安装的是apk,卸载时是包名,可以通过 adb shell pm list packages 查看需要卸载的包名
			
	adb push <本地路径\文件或文件夹> <手机端路径>  // 把本地(pc机)的文件或文件夹复制到设备(手机).    
	adb pull <手机端路径> <本地路径\文件或文件夹>  // 把设备(手机)的文件或文件夹拉取出来本地(pc机)
    // 注意:pc机路径与Android机路径,分隔符是不同的。
			
	adb shell                       // 登录设备 shell,该命令将登录设备的shell(内核),登录shell后,可以使用 cd,ls,rm 等Linux命令
	adb -s 设备名 shell             // 当电脑插多台手机或模拟器时,指定一个设备号进行连接
    adb get-serialno                // 也可以查看设备号

三、logcat介绍:

logcat日志:
    adb logcat -help
   	adb logcat          			常规日志显示
	adb logcat -c       			清除日志
			
	adb logcat -s tag关键字
			
	adb shell
	ps -A|grep 包名  获取pid进程
	adb logcat |findstr 进程pid     // window系统下用findstr 安卓系统下用grep

四、apk文件结构:

1. AndroidManifest.xml文件‌(关键核心):
AndroidManifest.xml文件‌是每个Android应用不可或缺的配置文件,它包含了应用的关键信息。我们可以把它看作是应用的“蓝图”或“说明书”,它向系统声明了应用的基本属性、组件以及权限等。AndroidManifest.xml中包括以下重要部分:
    
    1. 应用的包名(package):每个Android应用都有一个唯一的包名,通过包名来区分不同的应用。
    2. 应用的组件(Activities, Services, Broadcast Receivers, Content Providers):声明应用包含哪些组件,以及这些组件的属性和功能。
    3. 权限声明:列出应用所需的权限,如访问网络、读取存储、使用相机等。
    4. 应用主题和图标:定义应用的UI样式、图标等。
    5. 最小SDK版本和目标SDK版本:确定应用能在什么版本的Android系统上运行


详细解析Manifest中的关键字段:
    <manifest>:包含整个应用的包信息及权限定义。
        package: 定义了应用的包名,通常为反向域名格式,如com.example.app。
        android:versionCode: 定义应用的版本号。
        android:versionName: 定义应用的版本名称。

    <application>:包含应用的核心配置,如主题、图标等。
        android:icon: 定义应用的图标。
        android:label: 定义应用的名称。
        android:theme: 应用的UI主题。

    <activity>:声明应用的各个界面(Activity),以及这些Activity的属性和行为。
        android:name: Activity的类名。
        android:label: Activity的标签。
        android:theme: Activity特有的UI主题。

    <uses-permission>:声明应用所需要的权限,如访问网络、发送短信等。

    <intent-filter>:定义组件的功能和响应的事件,如Activity的启动方式或Broadcast Receiver接收的广播类型。
2. assets文件:  
目录包含了应用程序的原始资源文件,这些资源不经过编译,直接以原始形式存储。通常,开发者可以在该目录中存放字体文件、音频文件、HTML文件等,应用在运行时通过API来读取这些资源。例如,游戏可能会将所有的地图文件或纹理图像存放在此目录中。通过AssetManager API,应用可以访问这些文件。
3. res文件‌:
 目录包含了Android应用所需的所有资源文件。与 assets/ 目录不同,res/ 目录中的资源文件是经过编译的,按照不同类型的资源进行组织,例如:

    drawable/:存放图像资源(如PNG、JPEG等格式的图片)。
    layout/:存放XML格式的布局文件,定义界面的结构。
    values/:存放各种配置文件,定义应用的常量、颜色、字符串等资源。例如:
        strings.xml:存储应用的文本字符串。
        colors.xml:存储应用使用的颜色资源。
        styles.xml:存储样式资源。

在values/目录下,除了strings.xml、colors.xml等常见资源文件,还会有像dimens.xml(尺寸定义文件)和attrs.xml(自定义属性)等资源文件。
 4. lib‌文件:
目录包含了本地库文件,通常是通过 JNI(Java Native Interface) 与C/C++编写的本地代码。这些库文件可以针对不同的硬件架构(如arm、x86等)进行编译,因此lib/目录下通常会为每个架构创建相应的子目录。这个目录中存放的本地库可以通过Java代码调用JNI接口实现与系统底层的交互。


├─arm64-v8a
│      libcyberpeace.so
│
├─armeabi-v7a
│      libcyberpeace.so
│
├─x86
│      libcyberpeace.so
│
└─x86_64
        libcyberpeace.so
5. META-INF文件‌:
目录与Java的JAR文件类似,用于存放APK文件的元数据,如签名文件、校验信息等。此目录主要包括以下文件:

MANIFEST.MF:存放APK的清单文件,包含关于APK文件本身的信息。
CERT.RSA:包含APK文件的数字签名。
CERT.SF:存放APK文件的签名摘要。
6.‌ classes.dex‌文件:
这是Android中的可执行文件。所有安卓代码集中在此文件。一个app可以有多个dex。因为一个dex文件最多可以放65535个方法。可以通过反编译工具dex2jar转为jar包再通过jd-gui查看其代码 
 7. resources.arsc文件‌:
文件包含了应用程序的所有编译后的资源映射信息。这个文件并不存储实际的资源内容(如图片或字符串),而是存储资源与资源ID的映射关系。例如,它会保存应用中的字符串、颜色、尺寸、样式等信息以及这些资源的ID。通过这个文件,Android系统能够在应用运行时快速访问和加载所需的资源。

五、apk打包流程:

使用 AAPT 工具打包资源文件 , 生成 R.java , resources.ap 文件 ;

使用 AIDL tool 工具 , 处理 AIDL 文件 , 生成对应的 Java 文件 ;

使用 javac 工具编译 Java 源码为 class 字节码文件 ;

使用 dx 工具将 class 字节码文件打包成 dex 字节码文件 , 这是 Dalvik 虚拟机字节码文件 ;

使用 apkbuilder 工具生成未签名的 apk 文件 ;

使用 jarsigner 工具对 apk 文件进行签名 , 生成签名后的文件 ;

使用 zipalign 工具对签名后的 apk 文件进行对齐操作 ;

六、apk的安装流程:

一、4种安装方式:

    系统程序安装 ;
    使用应用市场安装 ;
    手机自带安装 ;
    使用 adb 调试工具安装 ;

二、APK 安装流程:

    ① 将 APK 安装包复制到 /data/app 目录下解压 , 扫描安装包 ;
    ② 将 dex 文件保存 /data/dalvik-cache 目录中 ;
    ③ 在 /data/data/包名 下创建对应 apk 包名的应用数据目录 ;

    系统自带程序在 /system/app 目录下, 获得 adb root 权限后才能删除 ;
    用户安装的程序 /data/app 目录下, 安装时将apk文件复制到此目录;
    /data/data/ 目录下,  存放应用程序的数据
    /data/dalvik-cache 目录下, 将 apk中的 dex 文件保存 /data/dalvik-cache 目录中

三、应用卸载:

    就是将 /data/app/ , /data/dalvik-cache/ , /data/data/ 等目录下的相关文件删除 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值