静态: dex  so
资源逆向工具 AXMKPrinter2(Android binary XML):
    java -jar AXMLPrinter2.jar xxx.xml output.xml

查看源码工具dex2jar(dex->jar)、jd-GUI(jar->java):
    
APK逆向工具APKTool(resources.arsc/xml资源文件/.dex文件):
    apktool d input.apk -o output
    
Android逆向助手(APKTOOL/jd-gui/dex2jar/jarsigner):
    
反汇编工具IDA PRO:
    
APK文件:
    zip压缩包
    解释性语言smali语言
    
反编译前结构:
    assets                      声音、字体、网页······资源【无编译可以直接查看】
    com                            第三方库,不解释
    lib                            应用中使用到的库
        armeabi                 .so文件,C/C++代码库文件【重要】
    META-INF                    APK的签名文件【***.RSA、***.SF、***.MF3文件】
    org                            第三方库,如org.apache.http库
    res                            应用中使用到的资源目录,已编译无法直接阅读
    anim                        动画资源animation
    color                        颜色资源
        drawable                可绘制的图片资源
        drawable-hdpi            图片资源高清
        drawable-land            图片资源横向
        drawable-land-hdpi        图片资源横向高清
        drawable-mdpi            图片资源中等清晰度
        drawable-port            图片资源纵向
        drawable-port-hdpi        图片资源纵向高清
        layout                    页面布局文件
        layout-land                页面布局文件横向
        layout-port                页面布局文件纵向
        xml                        应用属性配置文件
    AndroidManifest.xml            应用的属性定义文件,已压缩无法直接阅读【重要】
    classes.dex                    Java源码编译后的代码文件【重要】
    resources.arsc                编译后的资源文件,如strings.xml文件【重要】

反编译后结构:    
    assets                      声音、字体、网页······资源
    lib                            应用中使用到的库
        armeabi                 .so文件,C/C++代码库文件【重要】【JNI部分】【无法阅读】
    META-INF                    APK的签名文件【***.RSA、***.SF、***.MF3文件】
    org                            第三方库,如org.apache.http库
    res                            应用中使用到的资源目录,目录下的东西可以直接阅读
        anim                    动画资源animation【可以直接阅读】
        color                    颜色资源【可以直接阅读】
        drawable                可绘制的图片资源【可以直接阅读】
        drawable-hdpi            图片资源高清【可以直接阅读】
        drawable-land            图片资源横向【可以直接阅读】
        drawable-land-hdpi        图片资源横向高清【可以直接阅读】
        drawable-mdpi            图片资源中等清晰度【可以直接阅读】
        drawable-port            图片资源纵向【可以直接阅读】
        drawable-port-hdpi        图片资源纵向高清【可以直接阅读】
        layout                    页面布局文件【可以直接阅读】【重要】
        layout-land                页面布局文件横向【可以直接阅读】【重要】
        layout-port                页面布局文件纵向【可以直接阅读】【重要】
        values
            strings.xml            应用中使用到的字符串常量【可以直接阅读】【重要】
            dimens.xml            间隔(dip、sp)常量【可以直接阅读】
        xml                        应用属性配置文件【可以直接阅读】
    AndroidManifest.xml            应用的属性定义文件,【可以直接阅读】【重要】
    smali    Java                代码反编译后生成的代码文件,【smali语法】【重要】
    apktool.ymlapktool            反编译的配置文件,用于重新打包
    
    
学习Smali语言的语法与结构
逆向分析.so文件,.so文件是二进制文件

分析DEX文件:Dalvik Executable
smali:DEX执行文件格式的汇编器
baksmali:DEX执行文件格式的反汇编器

DEX文件生成过程:
                JVM虚拟机                Dalvik虚拟机
    .Java文件-->Javac编译-->.class文件-->dx编译-->.dex文件

DEX文件结构: Header、Table、Data
    Header:存储的是所有区域片段的大小、偏移量
    Table:存储的是各种结构化数据、引用数据以及数据的偏移量
    Data:存储的是具体的数据以及代码逻辑
    
    
虚拟机指令smali:
    smali:寄存器指令
    Java: 解释性语言
    
    
Smali语法基础:
    Java语法                    Smali语法                    说明
    private    boolean isFlag        .field private isFlag:z        定义变量
    
    Package                        .class                        指定当前的类名
                                .super                        所继承的父类
                                .local                        定义使用局部变量
                                .method                        方法
                                .parameter                    方法参数
                                .prologue                    方法开始
                                .line 12                    此方法位于.java中的第12行,可去除,不影响运行结果
    
    super                        invoke-super                调用父函数
                                const/high16 v0,0x7fo3        把ox7fo3赋值给v0
                                invoke-direct                调用函数
                                
    return                        Return-void                    函数返回void
                                .end method                    函数结束

new                            new-instance                创建实例
                                iput-object                    对象赋值
                                iget-object                    调用对象
                                invoke-static                调用静态函数
    
    if(vA == vB)                if-eq vA,vB                    如果vA等于vB
    
    
    
先写java代码,再反编译获取smali指令

分析SO文件:
    
    
    
广告植入与去除:
    挂广告:导入SDK、权限配置、广告组件配置、初始化、加载插屏广告

收费限制:逻辑反转

汉化:strings.xml

动态:DDMS、emulator、Andbug、IDA PRO
    代码安全分析: APK文件
    组件安全分析:四大组件
    存储安全分析:数据、私有文件
    通信安全分析:证书密码技术

TraceView:方法跟踪
    加入调试函数: Debug.startMethodTracing()/Debug.stopMethodTracing()
    dmtracedump
    graphviz

IDA PRO: so dex

Hook技术:劫持函数调用
    java层级的hook:java反射
    native层级的hook:ELF文件
    
    ptrace函数附加进程:动态地attach(跟踪一个目标进程)、detach(结束跟踪一个目标进程)、peektext(获取内存字节)、poketext(向内存写入地址)等
    加载so库:dlopen,以指定模式打开指定的动态链接库文件
    
    
目标进程的虚拟地址空间解析与ELF文件解析:
    通过读取/proc/<PID>/maps文件找到链接库的基地址
    读取动态库,解析ELF文件,找到符号(需要对ELF文件格式的深入理解)
    计算目标函数ude绝对地址
    目标进程函数绝对地址=函数地址+动态库基地址
    
    用ptrace函数attach上目标进程
    发现装载共享库so函数
    装载指定的.so
    让目标进程的执行流程转到注入的代码执行
    使用ptrace函数的detach释放目标进程
    
    
ptrace函数:
int ptrace(int requets, int pid, int addr, int data)
    request: 请求ptrace执行的操作
    pid:目标进程的ID
    addr:目标进程的地址值
    data:作用的数据
    
    
Android中so库文件: Got表Hook、Sym表Hook、inline Hook

java反射问题: 无法反射调用关键字为native的方法函数(JNI实现的函数)、基本类型的静态常量无法反射修改

zygote进程:Hook框架Xposed、Cydiasubstrate(app_process)

Hook工具:
    Xposed框架:/system/bin/app_process java层级
    Per App Setting(为每个应用设置单独的dpi或修改权限)
    Cydia
    XPrivacy(防止隐私泄露)
    BootManager(开启自启动程序管理应用)
        安装本地服务XposedInstaller
        下载使用API库
    
    Cydiasubstrate框架:java/native层级
        安装Cydiasubstrate框架本地服务
        下载使用Cydiasubstrate库
        
    ADBI/DDI框架:java/native层级
        命令行工具
        
        
    
虚拟文件系统:/proc目录
    Android内核空间和用户空间之间进行通信,查看当前进程的一些状态信息
    maps文件查看进程的虚拟地址空间如何使用
    cat /proc/<PID>/maps   
        /data/*.dex  //java层级
        /data/*.so  //native层级
    
    
dev/__properties__

https://www.qubes-os.org/screenshots/

应用加固:
    最小化组件暴露:
        android:exported="false"  //不跨应用,私有
        protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"  //签名权限
        android:permission=  //访问权限
        
    Activity安全:
        私有Activity:android:exported="false"
        公共Activity:android:exported="true"
        伙伴Activity:android:exported="false"  GetSignature getPackageInfo  //应用签名
        内部Activity:android:exported="true" protectionLevel="signature" GetSignature getPackageInfo  //应用签名  
    
    Broadcast Receiver安全:LocalBroadcastManager
        私有Broadcast Receiver:android:exported="false"
        公共Broadcast Receiver:android:exported="true"
        内部Broadcast Receiver:android:exported="true" protectionLevel="signature"
    
    Service安全:
        私有Service:android:exported="false"
        公共Service:android:exported="true"
        合作Service:android:exported="true"  GetSignature getPackageInfo  //应用签名
        内部Service:android:exported="true" protectionLevel="signature"
    
    Provider安全:
        私有Content Provider:android:exported="false"
        公共Content Provider:android:exported="true"
        合作Content Provider:android:exported="true"  GetSignature getPackageInfo  //应用签名
        内部Content Provider:android:exported="true" protectionLevel="signature" GetSignature getPackageInfo  //应用签名
        部分Content Provider:android:exported="false"
    
    
    防止逆向:
        代码混淆:花指令
            ProGuard:压缩、优化和混淆代码
        DEX保护:
            DEX优化与混淆:
                dalvik-obfuscato
            加壳与解壳:
                APKProtect、android-unpacker
        SO文件保护:
            upx
        防止jd-GUI查看代码:
            这个工具的bug
        防止二次打包:
            java层签名验证:
                PackageInfo;->Signatures
            底层签名验证:
                /content/pm/Signature
                
                
    防止动态分析:
        调试程序:android_server、gdbserver
        模拟器:Build.MODE="sdk"/"google_sdk"
    
    
    
    系统安全:
        启动验证:device-mapper-verity(dm-verity)
            build/make/target/product/verity.mk  PRODUCT_SUPPORTS_VERITY := true
    
    
    
SELinux:
    对象管理器(Object Manager, OM)
    访问权限缓存(Access Vector Cache, AVC)
    安全服务
    安全策略
    
    主体(Subject): 进程
    目标(Object): 资源
    
    MAC: 对访问的控制强制化
    TE:对于进程只赋予最小的权限
    domain:迁移、防止权限升级
    RBAC:对于用户只赋予最小的权限
    
    安全上下文:user、role、type、sensitivity
        身份认证:user
        角色:role
        安全类型:type
        安全等级:sensitivity
        
        
    App进程:service_contexts
    App数据文件: seapp_contexts
    系统文件: file_contexts
    系统属性: property_contexts

android 安全知识总结相关推荐

  1. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  2. Android进阶知识:绘制流程(上)

    1.前言 之前写过一篇Android进阶知识:事件分发与滑动冲突,主要研究的是关于Android中View事件分发与响应的流程.关于View除了事件传递流程还有一个很重要的就是View的绘制流程.一个 ...

  3. Android一些知识总结

    Android一些知识总结 近来看zp的android视频,按照他的视频中开发了几个小软件,学到了一些自己以前都没有学到的知识,所以在这儿总结一下,偶尔温习对自己有很大的帮助吧. 1.关于paddin ...

  4. Android小知识10则(上)(2018.8重编版)

    Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...

  5. MTK 驱动(4)---MTK Android Driver知识大全

    MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...

  6. Android小知识10则(下)

    Android小知识10则(上) github传送门 注: 在目录中点击可以跳转到具体代码页 目录 Chronometer和CountDownTimer计时器 Chronometer的使用 Count ...

  7. Android基础知识:在UI线程中运行代码

    本文翻译自:Android basics: running code in the UI thread In the viewpoint of running code in the UI threa ...

  8. 100天精通Andriod逆向——第2天:Android基础知识和jadx的使用

    目录 一.Android基础知识介绍 1.1 Android 历史版本 1.2 apk 包文件结构 1.3 Android系统目录介绍 二.jadx的使用 2.1 jadx 的简介 2.2 jadx ...

  9. Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转

    Android基础知识(二十):Notification.提醒式通知(横幅)踩坑与通知界面设置跳转 一.Notification通知与基本用法 通知Notification是Android系统中比较有 ...

  10. Android基础知识【项目实训-实现二级导航“今日活动”及读取数据库】【5】

    [该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 ...

最新文章

  1. 7.1 函数的一般形式
  2. IP Sec ***
  3. SQL Server 相关create操作语句
  4. ACL2020 | 基于Knowledge Embedding的多跳知识图谱问答
  5. Register code
  6. .net core 填坑记之—格式转换问题
  7. sklearn.preprocessing之数据预处理
  8. maven学习七之用户密码修改和添加用户
  9. 1.2.PHP7.1 狐教程-环境(Win下 PHP开发环境 配置及安装)
  10. 高等数学(第七版)同济大学 习题2-5 个人解答
  11. LabVIEW编程LabVIEW开发1920 LCR仪表例程与相关资料
  12. CityEngine+Python自动化建模实现【系列文章之四】
  13. VC++计算正反坐标方向角
  14. 现在的我,不想做管理
  15. Matlab 打不开 无法运行 win10 系统 卡在启动界面没有反应 语言bug
  16. 支付宝集福攻略,作为程序员的你集福了么?
  17. twitter三方登录的实现
  18. 用Python自动生成Excel报表
  19. 6种常见电流检测电路设计方案
  20. 若某非空二叉树的先序序列和后序序列正好相反,或者正好相同,则二叉树形态是怎么样的?

热门文章

  1. 网件路由器设置电子邮件发送日志到QQ邮箱
  2. 滑雪是不是要去北海道?学会Python电脑就能玩滑雪小游戏
  3. 第5章 域内横向移动分析及防御
  4. 【Micro USB选择指南】手工焊接Micro USB接口器件型号选择
  5. 微信小程序Audio音频(有关歌曲和图片的路径)
  6. MySQL 视图、索引、外键关联策略
  7. 【IoT】产品设计之思维模型:四种知识结构
  8. 企业合并_OA替换 | K2 BPM 为你解决企业“变革”大烦恼
  9. 计算机设计大赛作品抄袭会怎么样,如何界定借鉴和抄袭?看这7位设计大咖怎么说!...
  10. Elasticsearch短语或近似匹配及召回率案例深入剖析-搜索系统线上实战