zoukankan      html  css  js  c++  java
  • 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目录、夜神安装目录

  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/ltyandy/p/11573215.html
Copyright © 2011-2022 走看看