• Android逆向之Android逆向工具介绍


    Android逆向之Android逆向工具介绍

    Android逆向之Android逆向工具介绍

    1. Android逆向第一天介绍

    2. Android APK文件结构 问题:Android APK的入口函数是什么? Android 系统历史

    3. SDK工具­adb,monitor adb的使用 adb命令 monitor操作

    4. Android逆向工具 ①命令行工具 1.AndroidManifest.xml清单文件解密工具 2.Dex文件反汇编、汇编工具 3.apk签名工具 4.apk反编译工具­apktool 5.Dex2jar工具(转换文件格式) 6.Java反编译工具(将java文件反编译为源码) ②可视化工具 1.AndroidKiller工具(集成了反编译、回编译、安装apk、查看源码) 2.JEB反编译工具 3.Jadx­GUI 4.GDA 反编译工具

    5. Android逆向分析方法

    6. 字符串分析法­实例­破解一个apk的流程 破解步骤 使用AndroidKiller用字符串分析法

    7. Smali代码­HelloWorld

    8. 日志过滤法­实例 使用Monitor过滤日志 使用AndroidKiller过滤日志

    9. 配置环境问题 Android逆向之Android逆向工具介绍 夜神模拟器adb连接

    0.Android逆向第一天介绍

    1. Android APK文件结构

    2. SDK工具­adb,monitor

    3. 逆向工具介绍

    4. Android逆向分析方法

    5. 字符串分析法­实例­破解一个apk的流程

    6. 日志过滤分析法

    7. 配置环境问题

    1.Android APK文件结构

    android studio生成的apk在以下目录

    1569219017387

    基本的APK是一个压缩包,压缩包中有

    1569219035675

    META­INF目录 签名信息,包括公司信息、文件的HASH值 Res目录 资源信息,包括图片、xml(布局文件、字符串、风格样式等)

    AndroidMainfest.xml 清单文件,包括APK包名、四大组件的一些申明定义、权限、程 序的入口

    Classes.dex 可执行文件,包括java的类信息、方法信息、字段信息、虚拟机指令。 dex文件的生成流程是从java源码­>class文件­>dex文件

    Resources.arsc 资源序号文件,包括资源里的所有ID、名称。资源ID对应文件是

    R.class

    1569219369759

    android studo 3.2,所在的目录

    1569219393120

    Lib目录 动态库,扩展名是.so ,包括C++代码,有各种平台,比如x86,arm

    1569219432552

    Assets目录 自定义资源,比如.txt,mp4,等等

    1569219450701

    问题:Android APK的入口函数是什么?

    自己定义的MainActivity中onCreate 清单文件中application节点可以添加android:name属性,指定继承自application的 类,用于初始化整个app的全局信息。继承自application的类有两个重写函数会执行, 是程序最早执行的函数。 ① attachBaseContext ② onCreate

    1569219525527

    所以一个app最早执行的函数是 application的类中的attachBaseContext函数

    一般apk加固之后,都会自定义application类,并重写其中的attachBaseContext函数 或onCreate函数,并且声明为native类型的函数。 app运行的流程

    1569219553293

    Android 系统历史

    分为三个阶段

    ① android2.3~4.0 卡顿

    ② android4.1~4.4 成长,飞跃 android虚拟机dalvik­>art

    ③ android5.0~现在 整体不错

    逆向分析的环境

    系统:android 4.4 (同时有dalvik和art) 手机: google nexus 5(二手 200左右)

    2.SDK工具­adb,monitor

    adb的使用

    需要在SDK文件中找到adb,

    方法一:设置目录到path环境变量中 F:AndroidSdkplatform-tools

    方法二:

    1.新建一个环境变量,变量名:ANDROID_HOME,变量值:以你安装目录为准(我的为F:AndroidSdk),确认里面有tools和add-ons等多个文件夹,点击确认。

    2.修改PATH环境变量:后面新增;%ANDROID_HOME% ools;%ANDROID_HOME%platform-tools;%ANDROID_HOME%uild-tools29.0.2(注意最前面的分号,分割)

    然后cmd输入adb测试。不需要重启。能找到就是成功了。

    adb命令

    ① 列举设备 adb devices

    ② 将apk上传到设备、下载文件到PC

    adb push

    1569221557317

    adb pull

    1569221576954

    ③ 安装apk adb install ­r apk文件名 (可以覆盖安装) ④ 启动apk adb shell am start ­n <包名/activity名称>

    1569221596811

    以调试方式启动apk adb shell am start ­D ­n <包名/activity名称> (以调试方式启动)

    1569221612242

    ⑤ shell命令

    使用 adb shell 进入 安卓命令行,可以在命令行使用Linux命令

    ls,cd,su,ps,ps | grep com,kill,chmod

    monitor操作

    ① 概况

    androidstudio中打开

    1569221653439

    文件目录中打开

    1569221673408

    主要窗口

    1569221691892

    ② 设备列表

    1569221705912

    ③ 文件夹操作

    1569221722885

    ④ 日志

    1569221739910

    过滤日志

    1569221779896

    3.Android逆向工具

    ①命令行工具

    1.AndroidManifest.xml清单文件解密工具

    AXMLPrinter2.jar java ­jar AXMLPrinter2.jar <清单文件> java ­jar AXMLPrinter2.jar AndroidManifest.xml > out.xml APK15PBParser.jar(集成了AXMLPrinter2.jar,apktool.jar中xml解析部分代码) java ­jar APK15PBParser.jar java ­jar APK15PBParser.jar HelloWorld1.apk

    2.Dex文件反汇编、汇编工具

    Dex文件是android java代码编译生成的二进制文件,包含了虚拟机指令(dalvik虚拟机)

    Baksmali.jar(反汇编工具,将虚拟机指令反汇编成smali代码) java ­jar baksmali.jar ­o <输出目录> java ­jar baksmali.jar classes.dex ­o out_dir 反汇编生成的目录中,包括所有dex文件中的类代码,每一个类就是一个smali文 件。 Java中有三种类,外部类、内部类、匿名类 外部类:MainActivity.java ­> MainActivity.smali 内部类:MainActivity类中MyOnClickListener类 MainActivity匿名内部类:类中对象​1.smali smali.jar(汇编工具,将smali代码汇编生成dex文件) java ­jar smali.jar <目录> ­o 文件名 java ­jar smali.jar out_dir ­o out.dex 修改smali代码,#号是注释代码 // # if­eqz v2, :cond_24

    3.apk签名工具

    签名工具,使用android系统源码编译时用到的一个工具 java ­jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

    4.apk反编译工具­apktool

    反编译apk

    java ­jar apktool.jar d java ­jar apktool.jar d HelloWorld.apk ①将清单文件以及其他xml文件解密 ②将资源序号文件(resources.arsc)与资源名称做了一个对应关系表 生成在了/res/values/public.xml ③将dex文件反编译成了smali代码 回编译 apk目录 java ­jar apktool.jar b <反编译的apk文件目录> java ­jar apktool.jar b HelloWorld 生成的APK在 <反编译的apk文件目录>/dist目录中

    5.Dex2jar工具(转换文件格式)

    dex2jar>d2j­dex2jar.bat dex2jar>d2j­dex2jar.bat classes.dex dex2jar classes.dex ­> .classes­dex2jar.jar

    6.Java反编译工具(将java文件反编译为源码)

    1569221932482

    ②可视化工具

    1.AndroidKiller工具(集成了反编译、回编译、安装apk、查看源码)

    第一次打开的时候需要配置一下jdk的路径

    1569221961567

    AndroidKiller中集成了好几个工具:

    apktool, dex2jar工具集,adb,jd­gui

    apktool 所在目录:AndroidKiller_v1.3.1inapktoolapktool

    1569221989830

    在Androidkiller中设置新的apktool

    1569222000747

    1569222008299

    1569222014120

    1569222022472

    adb工具 常用命令 打开shell:adb shell , adb ­s 设备名称 shell 安装apk: adb install 1.apk , adb install ­r 1.apk 列举设备: adb devices

    dex2jar工具集

    将dex文件转成jar文件,方便jd­gui反编译

    jd­gui工具 可以查看smali代码对应的java源码

    1569222060306

    此外还有一些好工具的辅助工具

    1569222075098

    编码转换

    1569222086204

    1569222095878

    2.JEB反编译工具

    1569222110866

    3.Jadx­GUI

    1569222124563

    4.GDA 反编译工具

    1569222141923

    4.Android逆向分析方法

    ① 字符串分析法 ② 日志分析法

    ③ 动态调试smali, 动态调试so文件(c++生成的文件) ④ API下断(调试so,对linux API下断),栈回溯分析

    5.字符串分析法­实例­破解一个apk的流程

    破解步骤
    1. 拿到apk

    2. 使用反编译工具进行反编译

    3. 根据apk运行提示,查找字符串

    4. 查找字符串进行分析,找关键代码修改

    5. 使用重打包工具进行重打包

    6. 使用签名工具进行签名

    使用AndroidKiller用字符串分析法

    但是需要注意的是,中文字符串在Android是以Unicode编码方式显示的,格式类似 u4e0du597du610fu601d。我们需要进行转换,AndroidkKiller提供了这个功能

    1569222228618

    通过查找到对应代码,然后在代码附近可以发现显示成功的字符串。在成功字符串上 面有关键跳转,我们只需要将关键跳转nop掉即可。其实在smali使用#号注释掉即可。

    1569222260186

    在代码的上方,应该就是正确密码比对的地方,查看上下文发现v2寄存器,使用资源 ID中获取的一个字符串。

    1569222275397

    在这个时候,一般在工程中搜索资源ID,从资源ID找到对应的资源名称以及类型,然 后再根据类型和名称找到对应资源的定义。

    1569222289296

    然后再去搜索对应资源名称,找到字符串定义,因为已经知道类型是sting,直接可以查 看文件res/values/strings.xml。

    1569222303365

    之后,重新编译,安装测试。

    6.Smali代码­HelloWorld

    .class public LHelloWorld;
    #Ye olde hello world application
    #To assemble and run this on a phone or emulator:
    #
    #java ‐jar smali.jar ‐o classes.dex HelloWorld.smali
    #zip HelloWorld.zip classes.dex
    #adb push HelloWorld.zip /data/local
    #adb shell dalvikvm ‐cp /data/local/HelloWorld.zip HelloWorld
    #
    #if you get out of memory type errors when running smali.jar, try
    #java ‐Xmx512m ‐jar smali.jar HelloWorld.smali
    #instead
    .super Ljava/lang/Object;
    .method public static main([Ljava/lang/String;)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

    1569222365040

    7.日志过滤法­实例

    使用Monitor过滤日志

    ①添加过滤项

    1569222398073

    ②搜索过滤

    1569222414019

    使用AndroidKiller过滤日志

    1569222431001

    1569222444640

    8.配置环境问题

    1569222466990

    复制androidkiller中的adb以及dll,到SDK目录、夜神安装目录

  • 相关阅读:
    ASP.NET Core管道详解[4]: 中间件委托链
    从执行上下文角度重新理解.NET(Core)的多线程编程[3]:安全上下文
    从执行上下文角度重新理解.NET(Core)的多线程编程[2]:同步上下文
    从执行上下文角度重新理解.NET(Core)的多线程编程[1]:基于调用链的”参数”传递
    ASP.NET Core管道详解[3]: Pipeline = IServer + IHttpApplication
    ASP.NET Core管道详解[2]: HttpContext本质论
    ASP.NET Core应用基本编程模式[5]:如何放置你的初始化代码
    如何实现Http请求报头的自动转发[设计篇]
    如何实现Http请求报头的自动转发[应用篇]
    采用”传统”方式获取当前HttpContext
  • 原文地址:https://www.cnblogs.com/ltyandy/p/11573215.html
Copyright © 2020-2023  润新知