[免费专栏] Android安全之APK逆向入门介绍

这篇具有很好参考价值的文章主要介绍了[免费专栏] Android安全之APK逆向入门介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大

少走了弯路,也就错过了风景,无论如何,感谢经历


转移发布平台通知:将不再在CSDN博客发布新文章,敬请移步知识星球

感谢大家一直以来对我CSDN博客的关注和支持,但是我决定不再在这里发布新文章了。为了给大家提供更好的服务和更深入的交流,我开设了一个知识星球,内部将会提供更深入、更实用的技术文章,这些文章将更有价值,并且能够帮助你更好地解决实际问题。期待你加入我的知识星球,让我们一起成长和进步


Android安全付费专栏长期更新,本篇最新内容请前往:

  • [车联网安全自学篇] Android安全之APK逆向入门介绍

0x01 前言

     2021年注定是一个不平凡的一年,这一年每个人都需要付出更多的努力,一定要脚踏实地,默默努力奋斗

0x02 逆向工程的概念

     比如你看到别人写的某个exe程序能够做出某种漂亮的动画效果,你通过反汇编、反编译和动态跟踪等方法,分析出其动画效果的实现过程,这种行为就是逆向工程;不仅仅是反编译,而且还要推倒出设计,并且文档化,逆向软件工程的目的是使软件得以维护。

     系统级逆向包括在程序上运行各种不同的工具和操作系统服务获取信息,检查程序可执行文件,并跟踪程序的输入输…等等。这些信息大多数来自操作系统,因为根据定义,一个程序与外部世界的任何交互行为都必须通过操作系统

     代码级逆向是从程序的进制码,提取设计理念和算法的复杂过程,它要求软件分析师不但要掌握逆向技术,而且还要对软件开发、CPU以及操作系统有相当深入的认识。

     软件的复杂度深不可测,即使有编写良好、文档齐全的源代码,人们也会难以理解软件的内部。而代码级逆向是对低级指令的分析,更是难上加难… …

[免费专栏] Android安全之APK逆向入门介绍

  • 逆向工程

    • 从任何人造的东西中提取知识或者设计规划的过程
  • 计算机领域的逆向工程

[免费专栏] Android安全之APK逆向入门介绍

[免费专栏] Android安全之APK逆向入门介绍

0x03 逆向工程的应用

  • 漏洞挖掘与利用
  • 代码检查
    • 比较代码
    • 查找恶意代码
    • 查找软件BUG
  • 代码软件
  • 破解应用
    • 算法理解与学习
    • 添加新功能
    • 绕过验证

… …

0x04 逆向分析的常见流程

[免费专栏] Android安全之APK逆向入门介绍

0x05 逆向前置技能

[免费专栏] Android安全之APK逆向入门介绍

0x06 APK 逆向分析

6.1 工具

  • apktool

是Google提供的APK编译工具。

将资源解码成原来的形式
将解码的资源重新打包成apk/jar
组织和处理依赖于框架资源的APK
Smali调试
执行自动化任务
  • dex2jar

     可以把dex文件转换成jar文件,jar文件可以通过JD-GUI工具打开

  • jd-gui

     是一个图形化的jar查看工具

  • JADX-GUI

     JADX 是apk图形化查看工具,比JD-GUI更加强大,可以直接打开apk,查看java源码和xml源码。

  • IDA Pro

     付费的反汇编工具,功能非常强大。是目前最好的一个静态反编译软件。可以用于so文件的静态分析,动态调试。

https://hex-rays.com/ida-free/#download

https://down.52pojie.cn/?query=IDA

  • readelf

     是用于对C++机器码的分析,一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(.so)或者静态库(.a) 等包含ELF格式的文件。

  • Xposed Hook

     Xposed 是非常强大的动态逆向分析框架,可以动态获取APP运行时参数,修改数据。

  • Android studio

     Android Studio 是开发 Android 应用程序的官方 IDE,基于 Intellij IDEA。

https://developer.android.google.cn/studio

  • AndroidKiller

     AndroidKiller官方版是一款非常受欢迎的安卓APK反汇编工具,AndroidKiller官方版界面美观大方,功能强劲实用,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信等特色功能于一身,使用起来简单便捷。

https://down.52pojie.cn/Tools/Android_Tools/

  • ClassyShark

     Google官方为Android开发者推出的独立的二进制文件检查工具,因此其权威性和强大毋庸赘言,且得到较好的维护和更新。其github地址为:https://github.com/google/android-classyshark,其支持多种文件格式的解析,包括:库文件 (.dex, .aar, .so), 可执行文件 (.apk, .jar, .class) 和所有的Android二进制XML格式文件如AndroidManifest, resources, layouts等等。另外,很重要的一点,其能分析得出dex文件里面包含的方法数,这对于Android一个著名的问题(方法数超限65535,见https://developer.android.com/studio/build/multidex.html)的解决很有帮助。

  • AXMLParser

     AXMLParser仅仅是用于解析APK里面的二进制AndroidManifest.xml,从而得到与原始工程里的AndroidManifest.xml内容一致的可读xml。较轻量级,适用于只想查看和AndroidManifest.xml里面包含的信息,比如包名package,versionCode和versionName,启动Activity等。其原始链接和下载地址为:https://code.google.com/archive/p/xml-apk-parser/

  • AAPT(aapt)

     Android SDK中自带的appt工具(位于%ANDROID_HOME%\build-tools%Android version%\aapt.exe,API Level 24及以后版本新增了aapt2,即%ANDROID_HOME%\build-tools%Android version%\aapt2.exe。其中%ANDROID_HOME%是Android SDK的安装目录,%Android version%表示构建版本,完整示例比如"F:\Android\sdk\build-tools\27.0.0\aapt.exe"),其实构建APK的过程中,aapt工具起到了非常关键的作用,比如将原始资源等进行编译,生成R.id等。

     反过来,APPt也可以用于解析APK,包括清单文件AndroidManifest.xml中的信息。appt工具的功能很强大,子命令和参数非常丰富。

  • jeb

     jeb 静态分析APK

  • Visual Studio Installer

     用来分析代码用

  • FernFlower

     idea自带的fernflower好用,相比较之下java-decompiler无法反编译lambda表达式,而这个fernflower可以,所以在有lambda表达式的情况下,还是选择fernflower比较好。

https://github.com/fesh0r/fernflower

  • CFR

     CFR是一个反编译工具,有时我们开发的时候可能会用到反编译.

http://www.benf.org/other/cfr/

  • IntelliJ IDEA

     IntelliJ IDEA 被认为是当前 Java 开发效率最快的 IDE 工具

6.2 反编译流程

1)apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

     下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的APK文件放到apktool 所在目录下,

     打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:

apktool.bat d -f  test.apk  test

or


apktool.bat d   test.apk

也可以


apktool.bat d  test.apk  objectFolderPath
  

     其中,objectFolderPath为可选项,如果此项不存在,软件将会在apktool文件夹下新建一个apk文件名的文件夹,否则存储到目标文件夹;

     (命令中test.apk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为:apktool.bat d -f [apk文件 ] [输出文件夹])

  • classes.dex

     classes.dex是java源码编译后生成的java字节码文件(非传统JVM解释执行的class字节码)。

     但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。

     Android模拟器中提供了一个dex文件的反编译工具,dexdump。用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex(或者从压缩文件取出dex文件,直接在PC上面找到dexdump.exe的路径,然后执行命令)。

     另外Dedexer是一个反编译dex文件的开源工具,需要自己编译源代码。而当前,还有比如dex2jar(https://github.com/pxb1988/dex2jar)甚至封装好的GUI的工具(比如安卓逆向助手等等,可网上搜索下载)可以反编译dex文件为jar文件,再利用jd-gui(http://jd.benow.ca/)工具打开jar文件,就可以阅读java源代码了。

  • resources.arsc

     编译Android资源文件后的生成的二进制文件,resources.arsc有固定的格式,包括了资源索引和字符串资源池等。

  • AndroidManifest.xml

     清单文件,该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google Market上,也要对这个xml做一些配置。

     在apk中的AndroidManifest.xml是经过编译的,即是二进制格式,如果直接用编辑器打开,显示会是乱码。因此需要先进行反编译处理,得到原始的AndroidManifest.xml文件。可以通过AXMLPrinter2或aapt工具解开或解析,具体命令为:java -jar AXMLPrinter2.jar AndroidManifest.xml

  • assets

     assets目录可以存放一些配置文件(比如webview本地资源、图片资源、音视频等等),不会经过编译,和原始工程里面的文件是一致的,这些文件的内容在程序运行过程中可以通过相关的API(android.content.res.AssetManager)获得。

  • lib

     lib目录下的子目录存放的是一些与手机CPU架构对应的C/C++代码编译生成的so文件,一般用于JNI开发。

  • META-INF

     META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。

     比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。

  • res

     res目录存放经过编译后的资源文件,虽与原始工程目录下的res目录层次结构类似,但是实际上是经过编译处理的,只有图片资源和原始工程是一致,其他类型的资源则是编译处理过,无法直接查看。

     从上面对APK内部文件的分析来看,要想反编译或者逆向工程获取信息,其实主要涉及两个方面,一是对classes.dex反编译,转换成jar或者smali等,可以利用dex2jar(https://github.com/pxb1988/dex2jar)等工具生成jar,二是结合resources.arsc和res对资源进行反编译,从而得到原始的资源文件。

     用apktool反编译apk得到图片、XML配置、语言资源等文件,然后使用dex2jar反编译apk得到Java源代码

     将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具dex2jar 文件夹内

     在命令行下定位到dex2jar.bat所在目录,输入"d2j-dex2jar classes.dex",命令执行完成之后,在当前目录下就可以看到生成的Jar文件了

     反编译classes.dex得到classes-dex2jar.jar文件之后,就可以使用【jd-gui】工具将class文件反编译成java源代码了

6.3 分界线

  • MalwareLab_VM-Setup

  • 为我的恶意软件分析 VM 设置脚本

https://github.com/f0wl/MalwareLab_VM-Setup

  • Linux 恶意软件分析工具

https://remnux.org/

https://tsurugi-linux.org/

  • windows 脚本安装逆向分析工具

https://github.com/fireeye/flare-vm

https://github.com/SentineLabs/SentinelLabs_RevCore_Tools

(1)静态分析工具

PE分析工具:pestudio、PE-bear、StudyPE、DiE、DependencyWalker、PEid、

ResourceHacker、CFF Explorer、eXeScope

ELF分析工具:readelf

Mach-O分析工具:MachOView

PDF分析工具:PdfStreamDumper

NET分析工具:de4dot、NetMegaDumper、UnConfuserEx

Office文档分析工具:SSView、OffVis、oletools、rtfdump、VBAPass、objdump

反汇编分析工具:IDA、Radare2、Cutter、jd-gui、JEB、dnSpy、ILSpy、Apktool、ApkIDE

二进制编辑工具:010Editor、XVI32、HxD、WinHex、Hexplorer

(2)动态分析工具

动态调试工具:Ollydbg、Windbg、X64DBG、EDB、gdb、lldb、dnSpy、Radare2、IDA、JEB

网络抓包工具:WireShark、TcpDump、Charles、BrupBuite、Microsoft Network Monitor 3.4

进程监控工具:ProcMon、ApiMonitor、ProcessHacker

6.4 Java 代码静态扫描工具

  • Fortify SCA

  • VCG

https://sourceforge.net/projects/visualcodegrepp/

  • FindBugs 与 FindSecBugs 插件

  • SpotBugs

参考链接:

https://cstsinghua.github.io/2017/02/21/Android%20APK%E9%80%86%E5%90%91%E8%A7%A3%E6%9E%90/


你以为你有很多路可以选择,其实你只有一条路可以走文章来源地址https://www.toymoban.com/news/detail-403468.html


到了这里,关于[免费专栏] Android安全之APK逆向入门介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【0-1】从0.1开始学Android逆向-APK基本结构概要分析

    最近在进行Android的逆向,在这里整理知识点和分享Android逆向知识。如果文章中有任何勘误,诚挚的邀请师傅们批评改正! 逆向工程(Reverse Engineering)是一种分析和解剖已有产品、系统或软件的过程,以了解其内部工作原理、设计、功能或源代码。逆向工程可以应用于多个领

    2024年02月08日
    浏览(39)
  • Android中的APK打包与安全

    apk文件结构 classes.dex:Dex,即Android Dalvik执行文件 AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件 META-INF:主要保存各个资源文件的SHA1 hash值,用于校验资源文件是否被篡改,防止二次打包时资源文件被替换,该目录下主要包括下面三个文件: MANIFEST.MF:保

    2024年02月11日
    浏览(48)
  • Android逆向基础入门

    一、基础App数据抓取 1、App常用抓包工具 常用的拦截抓包工具有fiddler、mitmproxy、charles ( 手机端需和电脑端在同一个网络下,且手机端要配置相应的证书,手机端还要设置手动代理 ):大部分app使用的数据通信协议基于http/https,可通过抓包查看来模拟url请求。 对于安卓手机

    2023年04月08日
    浏览(49)
  • Android 逆向入门保姆级教程

    作者:37手游移动客户端团队 前言 什么是 Android 逆向开发? Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。逆向开发可以帮助开发人员了解他人的代码实现,也可以帮助黑客

    2024年02月11日
    浏览(48)
  • 【Android安全】Flutter app逆向

    参考:https://www.bilibili.com/video/BV1SM41147g5 flutter app特征: lib/armeabi-v7a/下面有libapp.so和libflutter.so 逆向分析工具: 看雪:Flutter逆向助手 可以解析libapp.so文件,将其转换成dart文件 将libapp.so导入到手机,然后打开手机上的 flutter逆向助手 选中libapp.so,解析,得到dart文件 (注意要

    2024年02月13日
    浏览(40)
  • 【Android安全】从xapk中提取apk并进行重命名

    XAPK文件是由 APKPure首创的 。 它是一种文件扩展格式,包含了 单独的APK文件和OBB cache assets文件 。这种格式节省了文件大小以助于开发者能够在最大限制100 MB内上传他们的安卓应用到谷歌商城。APKPure APP是提供在安卓下载和安装XAPK文件的最受信任的来源之一。 参考:https://m

    2024年02月07日
    浏览(51)
  • 【APP渗透测试】Android APK常用测试工具(Drozer)安装及使用方法介绍

    本篇文章主要介绍 Drozer Android测试工具的安装以及简单使用,后续会持续更新更多使用方法。 Drozer 是 MWR Labs 开发的一款Android安全测试框架。是目前最好的Android安全测试工具之一。其官方文档说道: Drozer允许你一个普通Android应用的身份与其他应用和操作系统交互。 在Web世界

    2024年02月16日
    浏览(48)
  • 【iOS逆向与安全】iOS插件开发入门

    前言 经过之前的学习,相信你已经能熟练的使用Frida-trace、IDA Pro等逆向工具。不过,仅仅到这肯定是不够的。接下来,学会把你逆向的结果打包成插件并运行,那iOS逆向,你也就真正的入门了。 一、目标 把逆向的结果制作成插件并运行 二、工具 mac系统 Xcode:插件开发工具

    2024年02月09日
    浏览(67)
  • 【验证码逆向专栏】某验深知 V2 业务风控逆向分析

    本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲

    2023年04月13日
    浏览(46)
  • 【iOS逆向与安全】iOS插件开发光速入门

    经过之前的学习,相信你已经能熟练的使用Frida-trace、IDA Pro等逆向工具。不过,仅仅到这肯定是不够的。接下来,学会把你逆向的结果打包成插件并运行,那iOS逆向,你也就真正的入门了。 把逆向的结果制作成插件并运行 mac系统 Xcode:插件开发工具 已越狱iOS设备:运行deb插

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包