《安卓Frida逆向与抓包实战》第2章-安卓逆向过程必备基础

2.1 Android 相关基础介绍

2.1.1 系统架构

  1. Linux内核层

  2. HAL硬件抽象层

  3. 系统运行库层

    • 第一部分:与标准Linux中一样的使用C/C++编写的原生库文件

      包括提供媒体库支持的libopengl.so,提供数据库存储功能的libsqlite3.so

    • 第二部分:Android特有的使用C/C++编写的原生库文件

      类似于Java中的JVM,被称为Android Runtime

      在系统运行过程中,每一个APP进程都有一个自己的Android Runtime实例,用于支持所有Java相关代码的加载与执行

  4. 应用框架层

    相当于Linux层级的so文件,用于给Android的Java层提供API支持

  5. 应用层

    App所在的层级,包括系统自带的应用(称为系统应用)以及后续用户自己所安装的应用(称为普通应用)

Android系统架构

2.1.2 Android 四大组件

  1. 活动(Activity)

    可以理解为界面,一个Activity就是一个界面

  2. 服务(Service)

    相当于Windows上的一个后台进程

  3. 广播接收器(Broadcast Receiver)

    用于响应来自其他应用程序或者系统的广播消息

  4. 内容提供者(Content Provider)

    用于进程间的交互,通常通过请求从一个应用程序向其他应用程序提供数据


2.2 从 Hello World 开始了解 Android 的开发流程

2.2.1 第一行代码 Hello World 的开发流程

  1. 新建项目
    “New Project” -> “Empty Activity”

  2. 配置项目名称、包名、保存路径、语言和最低支持的SDK版本

    等待完成

  3. Android Studio 工具栏 点击▶️ 运行APP(Shift+F10)
    运行截图

2.2.2 Hello World 分析和完善

  1. 修改activity_main.xml视图文件

    将TextView控件修改改成Button控件,并给这个控件分配一个id,代号为check

    修改前后的activity_main.xml对比

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
    -   <TextView
    +   <Button
    +       android:id="@+id/check"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    
  2. 修改MainActivity.java代码文件

    修改前后的MainActivity.java对比

    package com.cnlnn.demo01;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);  // 调用父类的onCreate()函数
            setContentView(R.layout.activity_main);  // 调用setContentView()函数加载了在src/main/layout目录下定义的activity_main.xml作为MainActivity对应的界面;一个Activity就是一个界面,R.layout.activity_main是activity_main.xml文件的唯一标志id
    +       Button bt_check = findViewById(R.id.check);  // 通过findViewByID()函数将按钮控件与bt_check变量绑定;R.id是前缀,check是刚才在界面描述文件中定义的id
    +       bt_check.setOnClickListener(new View.OnClickListener() {  // 添加点击事件响应
    +           @Override
    +           public void onClick(View v) {
    +               Log.i("cnlnn", "Hello world from bt_check")  // Log是日志打印类;调用Log.i()函数打印日志,第一个参数为日志标签,第二个参数为日志内容
    +           }
    +       });
        }
    
    }
    

运行截图


2.3 安卓逆向过程中的常用命令

2.3.1 常用Linux命令介绍

  1. cat
  2. touch和echo
  3. grep
  4. ps
  5. netstat
  6. lsof
  7. top

2.3.2 Android特有的adb命令介绍

  1. 查看当前处于前台的Activity

    adb shell dumpsys activity top
    
  2. 查看包信息(包括四大组件信息以及MINE等相关信息)

    adb shell dumpsys package 包名
    
  3. 查看App使用的数据库信息(包括执行操作的查询语句等信息都会被打印出来)

    adb shell dbinfo 包名
    
  4. 截图

    adb shell screencap -p 路径
    
  5. 在屏幕选中的输入框内输入文字(不支持中文)

    adb shell input text 文字
    
  6. pm命令

    adb shell pm 命令
    

    Android中packageManager的命令行,用于管理package的命令,示例:

    • 列出所有安装的apk包名

      adb shell pm list packages
      
    • 安装apk文件

      adb shell pm install 手机存储中的apk安装包路径
      
  7. am命令

    adb shell am 命令
    

    am命令是一个重要的调试工具,主要用于启动或停止服务、发送广播、启动Activity等,示例:

    • 以Debug模式启动App

      adb shell am start-activity -D -N 包名/类名
      
  8. 将电脑的apk安装到手机

    adb install 电脑中的apk安装包路径
    
  9. 从电脑推送文件到手机

    adb push 电脑中的文件路径 手机中的目录路径
    
  10. 从手机获取文件到电脑

    adb pull 手机中的文件路径 电脑中的目录路径
    
  11. 查看Android中日志的输出

    adb logcat
    

参考文章

平台架构 | Android 开发者 | Android Developers


转载请注明来源,欢迎对文章中的引用来源进行考证,文章可能具有时效性,欢迎指出任何有错误、已失效或不够清晰的表达 ,可通过[邮件](mailto:cnlnnn@qq.com)联系垃圾堆主人

文章标题:《安卓Frida逆向与抓包实战》第2章-安卓逆向过程必备基础

字数:1.2k

本文作者:cnlnn

发布时间:2022-07-10, 02:52:10

最后更新:2022-07-10, 02:52:10

原始链接:https://cnlnn.ml/posts/1771d0c0/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。