0基础安卓逆向原理与实践:第4章:安卓逆向环境搭建

2024 最新 安卓逆向环境搭建-亲测有效 本文介绍了安卓环境的下载、安装、配置以及adb命令,服务命令,应用管理命令,文件管理命令。 阅读详情

第4章:安卓逆向环境搭建

4.1 环境搭建概述

4.1.1 逆向分析环境架构

安卓逆向分析需要一个完整的工具链环境,包括静态分析工具、动态分析工具、调试环境和辅助工具:

graph TB
    subgraph Host[主机环境]
        IDE[开发IDE]
        StaticTools[静态分析工具]
        NetworkTools[网络分析工具]
    end
    
    subgraph VM[虚拟机环境]
        AndroidVM[安卓虚拟机]
        LinuxVM[Linux分析环境]
    end
    
    subgraph Physical[物理设备]
        TestDevice[测试设备]
        RootedDevice[Root设备]
    end
    
    subgraph Tools[分析工具]
        Disassembler[反汇编器]
        Debugger[调试器]
        Decompiler[反编译器]
        Hooking[Hook工具]
    end
    
    Host --> VM
    Host --> Physical
    Tools --> Host
    Tools --> VM
    Tools --> Physical

4.1.2 环境要求

硬件要求:

  • CPU:Intel i5或AMD Ryzen 5以上,支持虚拟化技术
  • 内存:至少16GB RAM(推荐32GB)
  • 存储:至少100GB可用空间(推荐SSD)
  • 网络:稳定的互联网连接

软件要求:

  • 操作系统:Windows 10/11、macOS 10.15+、Ubuntu 18.04+
  • 虚拟化:VMware Workstation/Fusion、VirtualBox
  • Java:JDK 8或11
  • Python:3.7+

4.2 基础环境配置

4.2.1 Java开发环境

# Ubuntu/Debian安装OpenJDK
sudo apt update
sudo apt install openjdk-11-jdk

# 验证安装
java -version
javac -version

# 配置环境变量
echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> ~/.bashrc
echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc
source ~/.bashrc

Windows环境配置:

# 下载并安装Oracle JDK或OpenJDK
# 设置环境变量
set JAVA_HOME=C:\Program Files\Java\jdk-11.0.x
set PATH=%PATH%;%JAVA_HOME%\bin

# 验证安装
java -version
javac -version

4.2.2 Android SDK配置

# 下载Android SDK命令行工具
wget https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip
unzip commandlinetools-linux-8512546_latest.zip

# 创建SDK目录结构
mkdir -p ~/Android/Sdk/cmdline-tools
mv cmdline-tools ~/Android/Sdk/cmdline-tools/latest

# 配置环境变量
export ANDROID_HOME=~/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export PATH=$PATH:$ANDROID_HOME/build-tools/30.0.3

# 安装必要的SDK组件
sdkmanager "platform-tools" "platforms;android-31" "build-tools;30.0.3"
sdkmanager "system-images;android-31;google_apis;x86_64"
sdkmanager "emulator"

# 接受许可协议
sdkmanager --licenses

4.2.3 Python环境配置

# 安装Python和pip
sudo apt install python3 python3-pip python3-venv

# 创建虚拟环境
python3 -m venv ~/android-reverse-env
source ~/android-reverse-env/bin/activate

# 安装常用Python库
pip install --upgrade pip
pip install requests beautifulsoup4 lxml
pip install pycryptodome cryptography
pip install frida-tools
pip install androguard
pip install r2pipe

4.3 静态分析工具

4.3.1 反编译工具

APKTool安装和使用:

# 下载APKTool
wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.6.1.jar

# 设置执行权限
chmod +x apktool
sudo mv apktool /usr/local/bin/
sudo mv apktool_2.6.1.jar /usr/local/bin/apktool.jar

# 使用示例
apktool d app.apk -o output_dir    # 反编译APK
apktool b output_dir -o new_app.apk # 重新打包APK

dex2jar工具:

# 下载dex2jar
wget https://github.com/pxb1988/dex2jar/releases/download/2.1/dex-tools-2.1.zip
unzip dex-tools-2.1.zip
sudo mv dex-tools-2.1 /opt/dex2jar
sudo ln -s /opt/dex2jar/d2j-dex2jar.sh /usr/local/bin/d2j-dex2jar

# 使用示例
d2j-dex2jar app.apk                # 将APK转换为JAR
d2j-dex2jar classes.dex            # 将DEX转换为JAR

JD-GUI安装:

# 下载JD-GUI
wget https://github.com/java-decompiler/jd-gui/releases/download/v1.6.6/jd-gui-1.6.6.jar

# 创建启动脚本
cat > /usr/local/bin/jd-gui << 'EOF'
#!/bin/bash
java -jar /opt/jd-gui/jd-gui-1.6.6.jar "$@"
EOF

chmod +x /usr/local/bin/jd-gui

4.3.2 反汇编工具

Radare2安装:

# 从源码安装Radare2
git clone https://github.com/radareorg/radare2
cd radare2
sys/install.sh

# 或使用包管理器安装
sudo apt install radare2

# 验证安装
r2 -v

# 基本使用
r2 binary_file
[0x00000000]> aaa    # 分析所有
[0x00000000]> pdf    # 打印当前函数的反汇编
[0x00000000]> afl    # 列出所有函数

Ghidra安装:

# 下载Ghidra
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_10.2.2_build/ghidra_10.2.2_PUBLIC_20221115.zip
unzip ghidra_10.2.2_PUBLIC_20221115.zip
sudo mv ghidra_10.2.2_PUBLIC /opt/ghidra

# 创建启动脚本
cat > /usr/local/bin/ghidra << 'EOF'
#!/bin/bash
cd /opt/ghidra
./ghidraRun
EOF

chmod +x /usr/local/bin/ghidra

4.3.3 代码分析工具

Androguard安装和使用:

# 安装Androguard
pip install androguard

# 使用示例
from androguard.misc import AnalyzeAPK

def analyze_apk(apk_path):
    """分析APK文件"""
    a, d, dx = AnalyzeAPK(apk_path)
    
    # 获取基本信息
    print(f"Package: {a.get_package()}")
    print(f"Version: {a.get_androidversion_name()}")
    print(f"Permissions: {a.get_permissions()}")
    
    # 获取活动组件
    activities = a.get_activities()
    services = a.get_services()
    receivers = a.get_receivers()
    
    print(f"Activities: {len(activities)}")
    print(f"Services: {len(services)}")
    print(f"Receivers: {len(receivers)}")
    
    # 分析DEX文件
    for dex in d:
        print(f"DEX classes: {len(dex.get_classes())}")
    
    return a, d, dx

# 使用示例
if __name__ == "__main__":
    apk_path = "example.apk"
    a, d, dx = analyze_apk(apk_path)

MobSF (Mobile Security Framework):

# 安装MobSF
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
cd Mobile-Security-Framework-MobSF

# 安装依赖
pip install -r requirements.txt

# 运行MobSF
python manage.py runserver 127.0.0.1:8000

4.4 动态分析环境

4.4.1 Android模拟器配置

Android Studio AVD配置:

# 创建AVD
avdmanager create avd -n "Android31_x64" -k "system-images;android-31;google_apis;x86_64"

# 启动模拟器
emulator -avd Android31_x64 -writable-system -selinux permissive

# 获取root权限
adb root
adb remount

Genymotion配置:

# 下载Genymotion
# 注册账户并下载个人版

# 安装VirtualBox
sudo apt install virtualbox

# 配置Genymotion
# 创建虚拟设备,选择合适的Android版本
# 启动虚拟设备并安装必要的工具

4.4.2 物理设备配置

设备Root和调试配置:

# 启用开发者选项和USB调试
# 设置 -> 关于手机 -> 连续点击版本号7次
# 设置 -> 开发者选项 -> 启用USB调试

# 连接设备并验证
adb devices

# 获取设备信息
adb shell getprop ro.build.version.release  # Android版本
adb shell getprop ro.product.cpu.abi        # CPU架构
adb shell getprop ro.build.version.sdk      # API级别

# Root设备(需要解锁Bootloader)
# 1. 解锁Bootloader(厂商特定)
# 2. 刷入自定义Recovery(如TWRP)
# 3. 刷入Magisk获取Root权限

# 验证Root权限
adb shell su -c "id"

4.4.3 Frida环境搭建

Frida服务端安装:

# 在主机上安装Frida工具
pip install frida-tools

# 下载Frida服务端
# 访问 https://github.com/frida/frida/releases
# 下载对应架构的frida-server

# 推送到设备
adb push frida-server-15.1.14-android-arm64 /data/local/tmp/frida-server
adb shell chmod 755 /data/local/tmp/frida-server

# 启动Frida服务端
adb shell su -c "/data/local/tmp/frida-server &"

# 验证连接
frida-ps -U  # 列出设备上的进程

Frida脚本示例:

// hook_example.js
Java.perform(function() {
    // Hook Activity的onCreate方法
    var Activity = Java.use("android.app.Activity");
    Activity.onCreate.implementation = function(savedInstanceState) {
        console.log("[+] Activity.onCreate called");
        console.log("[+] Activity: " + this.getClass().getName());
        
        // 调用原始方法
        this.onCreate(savedInstanceState);
    };
    
    // Hook字符串比较
    var String = Java.use("java.lang.String");
    String.equals.implementation = function(other) {
        var result = this.equals(other);
        console.log("[+] String.equals called");
        console.log("[+] this: " + this.toString());
        console.log("[+] other: " + other.toString());
        console.log("[+] result: " + result);
        return result;
    };
});
# 运行Frida脚本
frida -U -f com.example.app -l hook_example.js --no-pause

4.5 网络分析环境

4.5.1 代理工具配置

Burp Suite配置:

# 下载Burp Suite Community Edition
wget https://portswigger.net/burp/releases/download?product=community&version=2022.12.7&type=Linux

# 安装Java(如果未安装)
sudo apt install openjdk-11-jre

# 运行Burp Suite
java -jar burpsuite_community_v2022.12.7.jar

# 配置代理
# Proxy -> Options -> Proxy Listeners
# 添加监听器:127.0.0.1:8080

mitmproxy配置:

# 安装mitmproxy
pip install mitmproxy

# 启动代理
mitmproxy -p 8080

# 或使用Web界面
mitmweb -p 8080

# 配置设备代理
# 设置 -> Wi-Fi -> 长按网络 -> 修改网络 -> 高级选项
# 代理:手动,主机名:电脑IP,端口:8080

# 安装证书
# 浏览器访问 mitm.it 下载证书
# 设置 -> 安全 -> 加密与凭据 -> 从存储设备安装

4.5.2 网络监控工具

Wireshark配置:

# 安装Wireshark
sudo apt install wireshark

# 添加用户到wireshark组
sudo usermod -a -G wireshark $USER

# 重新登录后启动Wireshark
wireshark

# 捕获移动设备流量
# 1. 创建热点或使用同一网络
# 2. 选择对应网络接口
# 3. 设置过滤器:ip.addr == 设备IP

tcpdump使用:

# 在Android设备上使用tcpdump
adb shell su -c "tcpdump -i wlan0 -w /sdcard/capture.pcap"

# 拉取捕获文件
adb pull /sdcard/capture.pcap

# 分析捕获文件
wireshark capture.pcap

4.6 调试环境配置

4.6.1 GDB调试环境

GDB for Android配置:

# 下载Android NDK
wget https://dl.google.com/android/repository/android-ndk-r23c-linux.zip
unzip android-ndk-r23c-linux.zip
export NDK_HOME=~/android-ndk-r23c

# 配置GDB
export PATH=$PATH:$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin

# 推送gdbserver到设备
adb push $NDK_HOME/prebuilt/android-arm64/gdbserver/gdbserver /data/local/tmp/
adb shell chmod 755 /data/local/tmp/gdbserver

# 启动gdbserver
adb shell su -c "/data/local/tmp/gdbserver :1234 --attach $(pidof target_process)"

# 端口转发
adb forward tcp:1234 tcp:1234

# 启动GDB客户端
aarch64-linux-android-gdb
(gdb) target remote :1234
(gdb) continue

4.6.2 LLDB调试环境

# 安装LLDB
sudo apt install lldb

# 配置LLDB for Android
# 下载LLDB服务端
adb push lldb-server /data/local/tmp/
adb shell chmod 755 /data/local/tmp/lldb-server

# 启动LLDB服务端
adb shell su -c "/data/local/tmp/lldb-server platform --listen '*:1234'"

# 连接LLDB
lldb
(lldb) platform select remote-android
(lldb) platform connect connect://device_ip:1234
(lldb) attach -p process_id

4.7 专用分析工具

4.7.1 Xposed框架

Xposed安装(需要Root):

# 下载Xposed Installer
# 从官方网站下载对应版本的Xposed框架

# 安装Xposed Installer APK
adb install XposedInstaller.apk

# 刷入Xposed框架
# 通过Recovery模式刷入框架ZIP包
# 或使用Magisk模块安装

# 验证安装
# 打开Xposed Installer检查框架状态

Xposed模块开发环境:

// build.gradle (Module: app)
dependencies {
    compileOnly 'de.robv.android.xposed:api:82'
    compileOnly 'de.robv.android.xposed:api:82:sources'
}

// XposedModule.java
public class XposedModule implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (!lpparam.packageName.equals("com.example.target"))
            return;
        
        XposedHelpers.findAndHookMethod("com.example.target.MainActivity", 
            lpparam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                XposedBridge.log("MainActivity.onCreate called");
            }
        });
    }
}

4.7.2 专业逆向工具

IDA Pro配置:

# IDA Pro是商业软件,需要购买许可证
# 免费版本IDA Free可用于非商业用途

# 配置IDA Pro for Android
# 1. 安装IDA Pro
# 2. 配置Android调试器
# 3. 设置符号路径和源码路径

# IDA Python脚本示例
import idaapi
import idc

def analyze_functions():
    """分析所有函数"""
    for func_ea in Functions():
        func_name = idc.get_func_name(func_ea)
        func_size = idc.get_func_attr(func_ea, idc.FUNCATTR_END) - func_ea
        print(f"Function: {func_name}, Size: {func_size}")

if __name__ == "__main__":
    analyze_functions()

Binary Ninja配置:

# Binary Ninja Python API示例
import binaryninja as bn

def analyze_binary(file_path):
    """分析二进制文件"""
    bv = bn.open_view(file_path)
    
    # 获取函数列表
    functions = bv.functions
    print(f"Found {len(functions)} functions")
    
    # 分析每个函数
    for func in functions:
        print(f"Function: {func.name}")
        print(f"Address: 0x{func.start:x}")
        print(f"Size: {len(func)}")
        
        # 获取基本块
        for bb in func.basic_blocks:
            print(f"  Basic Block: 0x{bb.start:x} - 0x{bb.end:x}")
    
    return bv

# 使用示例
if __name__ == "__main__":
    bv = analyze_binary("target_binary")

4.8 环境优化与自动化

4.8.1 Docker容器化环境

Dockerfile示例:

FROM ubuntu:20.04

# 设置非交互模式
ENV DEBIAN_FRONTEND=noninteractive

# 安装基础工具
RUN apt-get update && apt-get install -y \
    wget curl unzip git vim \
    python3 python3-pip \
    openjdk-11-jdk \
    android-tools-adb \
    && rm -rf /var/lib/apt/lists/*

# 设置工作目录
WORKDIR /opt/android-reverse

# 安装Python依赖
COPY requirements.txt .
RUN pip3 install -r requirements.txt

# 下载和安装分析工具
RUN wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.6.1.jar -O apktool.jar
RUN wget https://github.com/pxb1988/dex2jar/releases/download/2.1/dex-tools-2.1.zip && \
    unzip dex-tools-2.1.zip && \
    mv dex-tools-2.1 dex2jar

# 设置环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
ENV PATH=$PATH:$JAVA_HOME/bin:/opt/android-reverse

# 创建启动脚本
COPY start.sh .
RUN chmod +x start.sh

EXPOSE 8080 5555

CMD ["./start.sh"]

docker-compose.yml:

version: '3.8'

services:
  android-reverse:
    build: .
    ports:
      - "8080:8080"
      - "5555:5555"
    volumes:
      - ./workspace:/workspace
      - ./samples:/samples
    environment:
      - DISPLAY=${DISPLAY}
    network_mode: host
    privileged: true
    
  mobsf:
    image: opensecurity/mobsf:latest
    ports:
      - "8000:8000"
    volumes:
      - ./mobsf_data:/home/mobsf/.MobSF
    environment:
      - MOBSF_ANALYZER_IDENTIFIER=docker

4.8.2 自动化脚本

环境检查脚本:

#!/bin/bash
# check_environment.sh

echo "=== Android Reverse Engineering Environment Check ==="

# 检查Java
if command -v java &> /dev/null; then
    echo "✓ Java: $(java -version 2>&1 | head -n1)"
else
    echo "✗ Java not found"
fi

# 检查ADB
if command -v adb &> /dev/null; then
    echo "✓ ADB: $(adb version | head -n1)"
    
    # 检查设备连接
    devices=$(adb devices | grep -v "List of devices" | grep -v "^$" | wc -l)
    if [ $devices -gt 0 ]; then
        echo "✓ Connected devices: $devices"
        adb devices | grep -v "List of devices" | grep -v "^$"
    else
        echo "⚠ No devices connected"
    fi
else
    echo "✗ ADB not found"
fi

# 检查Python和依赖
if command -v python3 &> /dev/null; then
    echo "✓ Python: $(python3 --version)"
    
    # 检查关键Python包
    packages=("frida" "androguard" "requests")
    for package in "${packages[@]}"; do
        if python3 -c "import $package" 2>/dev/null; then
            echo "✓ Python package: $package"
        else
            echo "✗ Python package missing: $package"
        fi
    done
else
    echo "✗ Python3 not found"
fi

# 检查分析工具
tools=("apktool" "d2j-dex2jar" "r2" "frida-ps")
for tool in "${tools[@]}"; do
    if command -v $tool &> /dev/null; then
        echo "✓ Tool: $tool"
    else
        echo "✗ Tool missing: $tool"
    fi
done

echo "=== Environment Check Complete ==="

快速分析脚本:

#!/usr/bin/env python3
# quick_analysis.py

import os
import sys
import subprocess
import argparse
from pathlib import Path

class QuickAnalyzer:
    def __init__(self, apk_path):
        self.apk_path = Path(apk_path)
        self.output_dir = self.apk_path.parent / f"{self.apk_path.stem}_analysis"
        
    def run_analysis(self):
        """运行快速分析"""
        print(f"[+] Analyzing: {self.apk_path}")
        print(f"[+] Output directory: {self.output_dir}")
        
        # 创建输出目录
        self.output_dir.mkdir(exist_ok=True)
        
        # 1. APKTool反编译
        self.run_apktool()
        
        # 2. dex2jar转换
        self.run_dex2jar()
        
        # 3. 提取字符串
        self.extract_strings()
        
        # 4. 分析权限
        self.analyze_permissions()
        
        # 5. 生成报告
        self.generate_report()
        
    def run_apktool(self):
        """运行APKTool"""
        print("[+] Running APKTool...")
        cmd = ["apktool", "d", str(self.apk_path), "-o", str(self.output_dir / "apktool")]
        subprocess.run(cmd, capture_output=True)
        
    def run_dex2jar(self):
        """运行dex2jar"""
        print("[+] Running dex2jar...")
        jar_output = self.output_dir / f"{self.apk_path.stem}.jar"
        cmd = ["d2j-dex2jar", str(self.apk_path), "-o", str(jar_output)]
        subprocess.run(cmd, capture_output=True)
        
    def extract_strings(self):
        """提取字符串"""
        print("[+] Extracting strings...")
        strings_file = self.output_dir / "strings.txt"
        cmd = ["strings", str(self.apk_path)]
        result = subprocess.run(cmd, capture_output=True, text=True)
        
        with open(strings_file, 'w') as f:
            f.write(result.stdout)
            
    def analyze_permissions(self):
        """分析权限"""
        print("[+] Analyzing permissions...")
        try:
            from androguard.misc import AnalyzeAPK
            a, d, dx = AnalyzeAPK(str(self.apk_path))
            
            permissions = a.get_permissions()
            activities = a.get_activities()
            services = a.get_services()
            
            report = {
                'package': a.get_package(),
                'version': a.get_androidversion_name(),
                'permissions': permissions,
                'activities': activities,
                'services': services
            }
            
            import json
            with open(self.output_dir / "analysis.json", 'w') as f:
                json.dump(report, f, indent=2)
                
        except ImportError:
            print("[-] Androguard not available, skipping detailed analysis")
            
    def generate_report(self):
        """生成分析报告"""
        print("[+] Generating report...")
        report_file = self.output_dir / "report.md"
        
        with open(report_file, 'w') as f:
            f.write(f"# Analysis Report for {self.apk_path.name}\n\n")
            f.write(f"## File Information\n")
            f.write(f"- File: {self.apk_path.name}\n")
            f.write(f"- Size: {self.apk_path.stat().st_size} bytes\n")
            f.write(f"- Analysis Date: {subprocess.run(['date'], capture_output=True, text=True).stdout.strip()}\n\n")
            
            # 添加其他分析结果
            if (self.output_dir / "analysis.json").exists():
                f.write("## Detailed Analysis\n")
                f.write("See analysis.json for detailed results.\n\n")
            
            f.write("## Files Generated\n")
            for file in self.output_dir.iterdir():
                if file.is_file():
                    f.write(f"- {file.name}\n")
        
        print(f"[+] Analysis complete! Results saved to: {self.output_dir}")

def main():
    parser = argparse.ArgumentParser(description="Quick APK Analysis Tool")
    parser.add_argument("apk", help="Path to APK file")
    args = parser.parse_args()
    
    if not Path(args.apk).exists():
        print(f"Error: APK file not found: {args.apk}")
        sys.exit(1)
    
    analyzer = QuickAnalyzer(args.apk)
    analyzer.run_analysis()

if __name__ == "__main__":
    main()

4.9 常见问题与解决方案

4.9.1 环境配置问题

Q1:ADB无法连接设备

解决方案:

# 检查USB调试是否开启
adb devices

# 如果显示unauthorized,需要在设备上确认
# 重启ADB服务
adb kill-server
adb start-server

# 检查USB驱动(Windows)
# 安装对应厂商的USB驱动

# 检查udev规则(Linux)
sudo vim /etc/udev/rules.d/51-android.rules
# 添加设备规则,例如:
# SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"
sudo udevadm control --reload-rules

Q2:Frida连接失败

解决方案:

# 检查Frida版本匹配
frida --version
adb shell /data/local/tmp/frida-server --version

# 确保版本一致,重新下载对应版本
# 检查SELinux状态
adb shell getenforce

# 如果是Enforcing,尝试设置为Permissive
adb shell su -c "setenforce 0"

# 检查端口转发
adb forward --list
adb forward tcp:27042 tcp:27042

Q3:模拟器性能问题

解决方案:

# 启用硬件加速
emulator -avd Android31_x64 -gpu host

# 增加内存分配
emulator -avd Android31_x64 -memory 4096

# 使用x86镜像而非ARM镜像
# 在AVD Manager中选择x86或x86_64系统镜像

# 启用KVM加速(Linux)
sudo apt install qemu-kvm
sudo usermod -a -G kvm $USER

4.9.2 工具使用问题

Q4:APKTool反编译失败

解决方案:

# 更新APKTool到最新版本
wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.6.1.jar

# 使用--no-res参数跳过资源解析
apktool d app.apk --no-res

# 安装framework文件
apktool if framework-res.apk

Q5:证书安装问题

解决方案:

# Android 7.0+需要将证书安装为系统证书
# 1. 获取证书hash
openssl x509 -inform PEM -subject_hash_old -in cert.pem | head -1

# 2. 重命名证书文件
cp cert.pem <hash>.0

# 3. 推送到系统证书目录
adb root
adb remount
adb push <hash>.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/<hash>.0
adb reboot

4.10 本章小结

本章详细介绍了安卓逆向分析环境的搭建:

  1. 基础环境配置:Java、Android SDK、Python环境
  2. 静态分析工具:APKTool、dex2jar、JD-GUI、Radare2、Ghidra
  3. 动态分析环境:Android模拟器、物理设备、Frida框架
  4. 网络分析环境:Burp Suite、mitmproxy、Wireshark
  5. 调试环境配置:GDB、LLDB调试器
  6. 专用分析工具:Xposed框架、IDA Pro、Binary Ninja
  7. 环境优化:Docker容器化、自动化脚本

完整的环境搭建为后续的逆向分析工作提供了强有力的工具支持。合理配置和使用这些工具,能够大大提高逆向分析的效率和准确性。

学习检查清单:

  • 成功配置Java和Android SDK环境
  • 安装并测试静态分析工具
  • 配置Android模拟器或物理设备
  • 成功部署Frida动态分析环境
  • 配置网络代理和抓包工具
  • 测试调试环境的可用性
  • 了解专业逆向工具的基本使用
  • 掌握环境问题的常见解决方案

下一章预告:
在下一章中,我们将深入学习APK文件的结构分析和解包技术,这是进行安卓逆向分析的第一步,也是理解安卓应用内部结构的关键。

安卓逆向之环境搭建 安卓逆向之环境搭建 前言 Hello,大家好,我是星期八,在我的带领下,一起来看看安卓逆向的世界吧! 工具善其事,必先利其器,还是先来配置一下环境吧! 下载文件 链接:https://pan.baidu.com/s/1dXMFMxr4VDEYXFwNjWRkSw 提取码:i14p 复制这段内容后打开百度网盘手机App,操作更方便哦 JDK配置 目前来说,还是Java8版本大行其道。 用到的文件 分别是32位和64位,根据个人电脑安装 本次使用的是64位 安装 双击下载好的jdk安装包 选择 阅读详情

相关推荐

Android逆向工程入门:从零开始搭建你的第一个分析环境(附工具清单)

本文详细介绍了如何从零开始搭建Android逆向工程分析环境,涵盖硬件配置、核心工具链安装(如Jadx、IDA Pro、Frida)及常见问题解决方案。通过实战案例和效率技巧,帮助初学者快速掌握逆向工程基础,避开常见配置陷阱,建立稳定的分析工作流。

dell8的博客 233

2024最新版Android逆向教程——第4天:真机环境的配置

工欲善其事必先利其器,本文详细讲解如何进行真机环境的配置

XAMO Lab|代码、调试与复盘笔记 1万+

分析android逆向的学习路线

俗话说:“一入逆向深似海,从此头发是路人”。 安卓逆向作为当下热门行业“网络安全”的主要技术之一,已经受到了越来越多人的青睐。但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。本文就分享一下android逆向的学习路线供大家参考。 目前学习安卓逆向的人群大约分为两种: 第一种是完全没有任何基础的计算机纯小白; 第二种是本来就做开发懂编程的IT行业人员。 我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。 一、无基础小白想入门 作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤: (一

Hacker_by_V的博客 3078

Android逆向环境搭建大全

(可以是其他目录,只要那个目录有执行权限,但还是别折腾了,这就挺好,如果有其他特殊需求,需要换目录,一定要时刻注意是否挂上了执行权限,安卓环境很变态,会变化)CPU架构,下载对应版本和架构的Frida-server包,以模拟器-雷电9为例是:x86_64架构,于是下载。chmod 777 frida-server-16.5.6-android-arm64(刚刚复制进去的文件)./frida-server-16.5.6-android-x86_64(开启frida-server)ls -l (查看权限)

u011587070的专栏 601

【游戏基础】安卓手游逆向必须基础

学习的前提是你已经掌握了一定的0x86汇编基础,掌握了一定的端游逆向基础,在0x86汇编基础和端游逆向基础上对比学习即可,如果没有一定的端游逆向基础,可以回去看看我之前的端游逆向基础。Thumb模式下等于当前指令地址加4,因为流水线优化,有3个过程,取指,译指,执行,PC指向取指的代 码,PC-4指向译指的代码,PC-8指向译指的代码。Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度但是它不如ARM指令的效率高。

douluo998的博客 2461

app安卓逆向之native层代码静态分析基础

app安卓逆向之Native层代码静态分析基础Native层代码静态分析1.背景分析2.概述3.开始3.1 ARM指令3.2 IDA基本使用方法3.3 Java层调用Native层方法原理3.4 Native层代码的修改3.5 So文件替换4.总结 Native层代码静态分析 1.背景分析 在安卓逆向的过程当中会遇到以下场景 经过上一阶段的Java层代码静态分析以及动态调试,发现加密参数的生成方法调用了Native层方法 经过对Native层代码分析后修改对应代码,替换原so文件发现app运行异常 针对

weixin_43900244的博客 6636

2024最新版Android逆向教程——第1天:Android Studio的安装与配置

超详细的 AndroidStudio 安装配置学习笔记

XAMO Lab|代码、调试与复盘笔记 1万+

Frida 16.1.4安卓逆向环境搭建与Hook实战指南

动态代码插桩技术是软件逆向分析与安全测试中的核心方法,它允许在程序运行时注入自定义代码,实时监控和修改其行为。其原理是通过向目标进程注入JavaScript或Python脚本,实现对函数调用、内存访问等操作的拦截与处理。这项技术的核心价值在于能够绕过静态分析的局限性,直接观察程序动态执行逻辑,广泛应用于漏洞挖掘、协议分析、算法还原等场景。本文聚焦于安卓平台,详细讲解如何利用Frida这一主流动态插桩框架,通过配置清华源加速安装,并结合版本匹配策略(如Frida 16.1.4与Frida-tools 12.3

weixin_29741447的博客 864

安卓逆向 和 手游辅助 学习 路线

From:https://zhuanlan.zhihu.com/p/95915254 知乎:Android 逆向分析学习路线?:https://www.zhihu.com/question/25626303 入门篇 --- 学习Android安全和逆向开发的路线总结:https://www.52pojie.cn/thread-1065039-1-1....

墨鱼菜鸡 7537

TouchSocket TcpService:构建高性能Tcp服务的终极利器

/ 接收到的数据data");// 回复客户端await ((ITcpSessionClient)client).SendAsync("服务端已收到消息!");// 继续执行后续插件TouchSocket的TCPService以极简的API、强大的扩展性和卓越的性能,重新定义了.NET TCP服务的开发体验。无论是物联网平台还是金融级实时通信系统,TCPService均能提供可靠的基础设施支持。立即探索示例项目,开启你的高性能服务开发之旅!扩展阅读如何实现WebSocket服务?

若汝棋茗 的博客 1461

攻防世界 web高手进阶区 9分题 Web_python_flask_sql_injection

继续ctf的旅程,开始攻防世界web高手进阶区的9分题,本文是Web_python_flask_sql_injection的writeup

闵行小鱼塘 1473

CTF-安卓逆向入门题目

介绍 以下题目都是比较简单的安卓逆向题目,主要训练目的是熟悉安卓逆向的一些基础题目,如果是第一次接触安卓逆向,建议先去学一点安卓开发的相关知识,这样做题目就更快一些,当然题目做多了自然也就熟悉了,题目我都上传到Github上了,需要的可以下载。 题目1-androideasy 链接: https://github.com/ThunderJie/CTF-Practice/tree/master/CT...

CharlesGodX的博客 2万+

作物生长模型Oryza V3实战2:下载、安装与使用

摘要:ORYZA 现在的应用范围已从单一水稻作物模拟扩展到多个水稻作物模拟。我在csdn站内也上传了“作物生长模型oryza v3大全(含所有参数模板和4个校准程序1个分析工具)”,可以说是全网最全的吧。网上搜索一般下载的v3只有一个a3主程序,不适合作全面与深入的研究,本版本从国外下载回来,一开始少了一个“SoilHydrau.exe”文件,说是有病毒被隔离了,后经历各种技术手段,并向国际水道研究所发送邮件,才得以补全所有的参数化及校准程序、分析工具,来之不易,有缘人得之。

502

跟肉丝姐学 Frida 之 快速搭建 Frida 安卓逆向环境

快速搭建 Frida 安卓逆向环境这段时间空闲的时间一直在跟着肉丝姐补课,手残把手机搞崩了,借着这个机会写一篇文章记录下如何从零完成 Frida 安卓逆向环境的搭建。按照肉丝姐的教程,非...

咸鱼学Python的博客 3843

博途S7-1500T 使用工艺对象驱动液压轴(含SimaHydTO库)

利用工艺对象控制液压轴位置含PLC控制和仿真程序文档资料下载地址如下:液压比例伺服阀的相关应用知识请参看下面的博客文章:液压位置闭环控制(比例伺服阀应用)_RXXW_Dor的博客-优快云博客。

RXXW_Dor的博客 2899

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

学 Frida 安卓逆向之快速搭建 Frida 安卓逆向环境

这段时间空闲的时间一直在跟着肉丝姐补课,手残把手机搞崩了,借着这个机会写一篇文章记录下如何从零完成 Frida 安卓逆向环境的搭建。按照肉丝姐的教程,非常顺利的完成了准备好这些工具以及相关的软件包之后开始刷机。相关的软件放在后台,公众号后台回复20200530获取。

A_991128a的博客 2336

从零开始讲DDR(7)——modelsim独立仿真DDR4

本文主要内容为DDR4 MIG ip核仿真,modelsim独立仿真DDR4。在进行DDR仿真的时候,我们会面临一个以往常规仿真不存在的问题:DDR本身并不是一个我们通过RTL代码设计出来的部件,常规的模块或者IP仿真,都是基于RTL代码就能进行的,但是回顾一下我们DDR的开发流程,调用的IP核也只是MIG ip,其本质是一个DDRC+DDRPYH的组合,并不能模拟任何DDR本身的行为,因此,在进行仿真之前,我们首先要做的就是获取DDR的仿真模型。

apple_53311083的博客 3225

0基础安卓逆向原理与实践:第1章:计算机系统与安卓架构基础

本文介绍了计算机体系结构基础和安卓系统架构的核心知识。首先讲解了冯·诺依曼架构的组成(CPU、内存、存储、I/O设备)和指令执行周期,分析了内存层次结构的特点。其次阐述了操作系统的功能,包括进程管理、虚拟内存机制等核心概念。最后详细解析了安卓系统的五层架构(Linux内核层、HAL层、运行库层、应用框架层和应用层),其中重点介绍了ART运行时环境的工作机制。这些基础知识为深入理解安卓逆向工程奠定了重要理论基础。

THMAIL的博客 1443

核磁共振常用的文件格式介绍:NIfTI volume 格式 (*.nii), GIFTI 格式 (*.gii), CIFTI 格式 (*.nii)

NIfTI volume 格式 (*.nii)GIFTI 格式 (*.gii)CIFTI 格式 (*.nii)Scene file文件 (*.scene)规格文件 (*.spec)解剖 (*.annot)一个场景文件包含一个或多个场景;每个场景实际上是保存时 wb_view 内部状态的快照。这包括有关加载哪些文件、如何显示、如何配置选项卡的信息(选择了哪些表面、在每个层中选择了哪些文件、打开了哪些层、哪些视图旋转、调色板设置、平铺选项卡等),以及在它们上面添加了哪些注释(文本、箭头、圆圈等)。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3043

分布式优化 (Distributed Optimization) 算法详解及案例分析

分布式优化是一种将优化问题分解为多个子问题并在多个计算节点上并行求解的方法。其目标是通过分布式计算资源高效地求解大规模优化问题。

闲人编程的博客 2709

跟肉丝姐学 Frida 安卓逆向之快速搭建 Frida 安卓逆向环境

这段时间空闲的时间一直在跟着肉丝姐补课,手残把手机搞崩了,借着这个机会写一篇文章记录下如何从零完成 Frida 安卓逆向环境的搭建。按照肉丝姐的教程,非常顺利的完成了准备好这些工具以及相关的软件包之后开始刷机。相关的软件放在后台,公众号后台回复20200530获取。

ZL_1618的博客 1438

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

0基础安卓逆向原理与实践:第3章:逆向工程理论基础

本文系统介绍了逆向工程的理论基础,包括逆向工程的定义、分类和应用场景。重点关注了汇编语言基础,特别是ARM架构的关键知识。主要内容包括: 逆向工程概述 定义:通过分析现有系统理解设计原理的技术过程 分类:按分析层次分为源码级、字节码级、汇编级和二进制级 应用场景:安全研究、漏洞分析、恶意软件分析等 ARM汇编基础 寄存器组织:详细说明了通用寄存器、特殊寄存器和状态寄存器 指令系统:分类介绍了数据传输、算术运算、逻辑运算等核心指令 函数调用约定:阐述了ARM AAPCS标准下的参数传递和返回值规则 实用分析技

THMAIL的博客 1696

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

《0基础学安卓逆向》第1集:什么是安卓逆向及环境搭建

【代码】《0基础学安卓逆向》第1集:什么是安卓逆向及环境搭建。

qq_41155858的博客 1655

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

安卓逆向_0 --- 逆向、安全、工具集

逆向、安全、工具集

freeking101的博客 6036

安卓逆向和手游辅助学习路线

一.安卓逆向基础(建议1周) 学习安卓逆向第一步必须先把环境搭建好,这是你学习安卓逆向的开始,环境搭建好后表示正式迈入安卓逆向。在环境安装的工程中会遇到很多细节上的问题。 第二步就是要了解我们要分析的是什么文件,很多0基础的同学都不知道安卓逆向分析的什么文件。我们要分析的是应用程序或者安装包(就是.apk文件),了解apk是怎么生成的以及如何安装到我们的手机里面,apk是怎么运行的,也是我...

contrary_的博客 3729
上一篇: 0基础安卓逆向原理与实践:第3章:逆向工程理论基础
下一篇: 0基础安卓逆向原理与实践:第5章:APK结构分析与解包
THMAIL
博客等级 码龄10年 2434粉丝 432原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THMAIL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值