Android 逆向之脱壳实战篇

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

作者:37手游安卓团队

前言
  • 这篇文章比较干,比较偏实战,看之前建议先喝足水,慎入。

  • 在学脱壳之前,我们先来复习一下,什么时候是加固?

    • 加固本质上就是对 dex 文件进行加壳处理,让一些反编译工具反编译到的是 dex 壳,而不是 dex 文件本身。具体的实现方式是,将原 dex 文件进行加密,再合成到 dex 壳中,而系统运行应用的时候,会加载 dex 壳文件,而 dex 壳里面有一个自定义的 ClassLoader 类,它会将原有 dex 文件进行解密,然后再加载到 dex 数组中。
  • 学完了加固,那么什么是脱壳呢?

    • 刚刚讲到了加固的原理,它本质的原理就是加壳,而脱壳就对应着加壳,我们要对这层壳脱掉,漏出它原本的样子,再简单点讲就是破解加固,市面上比较常见的脱壳手段就是《内存 dump》,刚刚我们讲到的,系统会加载壳 dex,壳 dex 才会加载原 dex,那这个时候原 dex 已经被加载到内存中了,我们只需要从内存中把它 dump 出来就可以了,这个原理是不是灰常简单呢?
  • 以下使用 360 加壳过的 apk,拖到 jadx 打开是这样子的,这个就是壳的源码。

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

了解 frida
  • 说到脱壳,我们先认识一个东西:frida,它能够帮我们从内存 dump 出原 dex 文件,why?什么是 frida,这个问题就由 ChatGPT 替我解答这个问题

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

  • 简单理解 frida 就是一个跨平台的 hook 框架,那什么是 hook 框架呢?顾名思义,hook 是钩子的意思,在代码中,代表用钩子勾住代码,那么勾住代码有什么用呢?在实际开发中,我们常常在需要代码前后插入一段代码,比较常见的情况是计算方法的耗时,那么这个时候在方法前后各插入代码,常规的写法是直接在某个类的某个方法中写代码,这种做法的好处是代码看起来比较直观,但是一旦需要写的地方比较多的时候,前期开发和后续维护的工作量会呈几何增长,而 hook 框架可以解决这一问题,它可以帮你动态植入这些代码,不需要在每个方法写一遍重复代码,使用了面向切面的思想,类似 AOP,但它又不是 AOP,AOP 和它的区别在于,AOP 是在编译的过程中就会帮你植入代码,而 hook 框架是在运行的过程中植入代码。

  • 这里为了照顾小白朋友,所以说得有点啰嗦了,但是我的文章风格就是这样,高大上不是我的追求,我的追求是每一个看过文章的朋友都能看懂,降低大家的学习成本,如果不能的话,还不如直接看官方文档。

电脑 frida 环境搭建
  • 我们这里用的是 macOs 系统进行演示,windows 步骤也差不多

  • 第一步:输入以下命令安装 frida

pip install frida
  • 如果安装成功则会提示
Installing collected packages: frida
Successfully installed frida-16.0.2
  • 第二步:再输入下面命令安装 frida-tools
pip install frida-tools
  • 如果安装成功则会提示
Successfully installed colorama-0.4.6 frida-tools-12.0.1 prompt-toolkit-3.0.32 pygments-2.13.0 wcwidth-0.2.5
  • 如果安装过程出现警告,提示以下信息的话
WARNING: The script pygmentize is installed in '/Users/xxx/Library/Python/3.8/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
WARNING: The scripts frida, frida-apk, frida-compile, frida-create, frida-discover, frida-join, frida-kill, frida-ls, frida-ls-devices, frida-ps, frida-pull, frida-push, frida-rm and frida-trace are installed in '/Users/xxx/Library/Python/3.8/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  • 在环境变量中加入以下配置即可
export PATH="/Users/xxx/Library/Python/3.8/bin":"$PATH"
  • 第三步:然后测试 frida 是否安装成功,在命令行中输入(下面两个命令行任选一个即可)
frida --v

frida --version
  • 如果有输出 frida 的版本号的话,则证明已经安装成功了
16.0.2
  • 补充:如果需要安装 frida 指定版本,则需要修改安装命令行为下面这样即可
pip install frida==12.8.0
pip install frida-tools==5.3.0
  • frida 和 frida-tools 版本之间的对应关系可以从 Github 发布的 relese assets看到
Frida 手机环境搭建
  • 前提条件:需要准备一台已经 root 的手机

  • 第一步:输入 adb 命令来获取手机 CPU 处理器架构

adb shell getprop ro.product.cpu.abi

arm64-v8a
  • 第二步:到 Github 发布的 releases assets中下载对应 CPU 处理架构的 frida-server,然后进行解压,这里下载的是 frida-server-16.0.2-android-arm64.xz,注意 frida-server 需要和之前电脑安装版本一致才可以

  • 第三步:将下载好的 so 库通过 adb 命令复制到手机 /data/local/tmp 目录上面

adb push /Users/xxx/Downloads/frida-server-16.0.2-android-arm64 /data/local/tmp
  • 如果想修改复制到的 frida-server 文件名称,则将上面的命令行换成下面的即可
adb push /Users/xxx/Downloads/frida-server-16.0.2-android-arm64 /data/local/tmp/frida-server-16.0.2` 
  • 第四步:使用 adb 切换到 /data/local/tmp 目录下

su
cd data/local/tmp
  • 第五步:给刚刚复制到手机上面的 frida-server 加执行权限(默认只有读写权限)
// 表示可读可写可执行
chmod 777 frida-server-16.0.2
运行 Frida
  • 第一步:先使用 adb 切换到 /data/local/tmp 目录下
adb shell

su

cd data/local/tmp
  • 第二步:在上面命令行的基础上输入运行手机上面的 frida-server 的命令,执行后会阻塞当前命令窗口,这个是正常的,如果是阻塞了一会儿就重启,证明是不正常的,可以换个手机试一下
./frida-server-16.0.2
  • 第三步:验证是否成功, 重新创建一个命令行窗口,输入以下命令来查看当前手机进程列表
frida-ps -U
  • 如果出现以下错误提示,则需要将手机数据线拔下来重新插一次,然后重新运行一遍上面的命令即可
Failed to enumerate processes: unable to handle 64-bit processes due to build configuration
  • 如果出现以下错误提示,证明端口被占用了,可以重启一下手机
Unable to start: Could not listen on address 127.0.0.1, port 27042: Error binding to address 127.0.0.1:27042: Address already in use
  • 如果出现以下信息,则表示 Frida 已经安装成功
  PID  Name
-----  -----------------------------
 3374   Google
12041   Magisk
10795   QQ
12776   企业微信
 3720   当前界面
 8697   微信
 9401   相册
............
  • 第四步:最后再进行端口映射
adb forward tcp:27042 tcp:27042
使用 Frida-Apk-Unpack 进行脱壳
  • 第一步:下载或者克隆 Frida-Apk-Unpack 工程
cd /Users/xxx/Desktop/FridaProject/App\ 脱壳/Frida-Apk-Unpack
  • 第二步:执行脱壳指令
// xxx.xxx.xxx 是应用的包名
// dexDump.js 是工程目录下的文件
frida -U -f xxx.xxx.xxx -l dexDump.js  --no-pause
  • 如果失败了,并提示以下信息
usage: frida [options] target
frida: error: unrecognized arguments: --no-pause
  • 则换成下面这个命名再执行
`frida -U -f xxx.xxx.xxx -l dexDump.js
  • 如果失败了,并提示以下信息
frida -U -f xxx.xxx.xxx -l dexDump.js
  • 解决这个问题也很简单,只需要关闭 MagiskHide 功能
Magisk 管理器 -> 设置 -> Magisk 选项 -> MagiskHide(关闭即可)
  • 又或者执行以下命令行来关闭
adb shell "su -c magiskhide disable"
  • 完事之后可以执行以下命令行来开启
adb shell "su -c magiskhide enable"
最终效果展示

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

[PH 1::xxx.xxx.xx ]-> [16:54:09:927] magic : dex
035
[16:54:09:927] dex_size :1107632
[16:54:09:933] dump dex success, saved path: /data/data/xxx.xxx.xxx/1107632.dex

[16:54:10:167] magic : dex
035
[16:54:10:167] dex_size :3568668
[16:54:10:177] dump dex success, saved path: /data/data/xxx.xxx.xxx/3568668.dex

[16:54:10:181] magic : dex
035
[16:54:10:181] dex_size :284
[16:54:10:181] dump dex success, saved path: /data/data/xxx.xxx.xxx/284.dex

[16:54:10:278] magic : dex
035
[16:54:10:278] dex_size :284
[16:54:10:278] dump dex success, saved path: /data/data/xxx.xxx.xxx/284.dex
  • 其中 /data/data/xxx.xxx.xxx/1107632.dex/data/data/xxx.xxx.xxx/3568668.dex/data/data/xxx.xxx.xxx/284.dex 这几个就是脱壳之后得到真实的 dex 文件存放路径了,我们再使用 jadx 随机打开一个 dex 看看

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

  • 是不是灰常简单呢?

最后

像Smali指令、加壳和脱壳、Xposed框架、Frida、抓包、加密与解密算法等等,这些都是Android逆向安全开发工程师必须掌握的知识点。

至于学习笔记也是有的,我根据上述中所提到的知识点进行整理了,这样大家学习起来也比较方便,大家可以综合起来一起学习。参考方式:https://qr18.cn/CQ5TcL

Android 逆向安全学习笔记

Android 逆向模拟器环境搭建(详解)
Smali指令详解
android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

加壳和脱壳入门

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

NDK与逆向

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

Xposed框架

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

Frida-逆向开发的屠龙刀

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全

安卓逆向之常用加密算法

android 脱壳,Android,移动开发,逆向,android,java,开发语言,移动开发,安卓逆向,逆向安全文章来源地址https://www.toymoban.com/news/detail-633569.html

到了这里,关于Android 逆向之脱壳实战篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android脱壳工具整理

    现在开源的脱壳工具比较多,今天我们来分享几款比较常见的脱壳工具,有刷入定制系统的脱壳机方式的,有Xpose模块hook关键函数的,也有Frida工具hook脱壳的,各有优缺点,小伙伴们可以自由搭配使用。 这款脱壳工具是寒冰大佬写的,是通过刷入大佬定制的系统,进而在程序

    2024年02月11日
    浏览(27)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(33)
  • Android脱壳ROM(FkptRomV2.0)

    fkpt 工具仅面向合法授权的企业安全建设,以及安全研究,在使用本工具进行检测时您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。 用户在使用本工具时,应遵守所有适用的法律法规和规定,并确保其行为不会侵犯他人的权利或违反任何法律。 作者或开发

    2024年02月11日
    浏览(51)
  • Android漏洞之战——整体加壳原理和脱壳技巧详解

    为了帮助更加方便的进行漏洞挖掘工作,前面我们通过了几篇文章详解的给大家介绍了动态调试技术、过反调试技术、Hook技术、过反Hook技术、抓包技术等,掌握了这些可以很方便的开展App漏洞挖掘工作,而最后我们还需要掌握一定的脱壳技巧,进行进一步助力我们漏洞挖掘

    2024年02月12日
    浏览(41)
  • 【Android开发】移动程序设计复习大纲

    一、 判断题 (共10小题,每题1分,共10分) 二、 单选题 (共10小题,每题1分,共10分) 三、 填空题 (共10小题,每空1分,共10分) 四、 简答题 (共4小题,每题10分,共40分) 五、 程序设计题 (共2小题,每空2分,共30分) 知识点: 1. Android 体系结构包含的层次及各层的特点。

    2024年02月01日
    浏览(36)
  • Android移动应用开发的学习路线

    Android移动应用开发的学习路线。以下是一个基本的学习路线,供你参考: 1. Java基础 学习Java的基本语法和面向对象编程(OOP)的概念 了解Java的数据类型、变量和常量 学习控制结构(如条件语句、循环语句)和函数 2. Android基础 了解Android平台的基本概念和架构 学习Android的

    2024年02月11日
    浏览(36)
  • 移动应用开发环境搭建Android Studio

    记得提前开启电脑虚拟化支持,具体方法可自行百度 查看是否启用虚拟化 JDK安装与卸载 由于Andriod开发使用的语言是javaKotlin,这里使用的是java语言所以需要先安装java的开发环境 所有开发 Android 应用程序需要的工具都是开源的,并且可以从互联网上下载 Android Studio 是谷歌推

    2023年04月08日
    浏览(58)
  • 基于android studio开发的火车票购票系统app,android移动开发课设,毕业设计

    基于android studio开发实现火车票购票系统app 适用于android移动开发学习项目,课程设计,毕业设计等 开发工具:android studio 或者intellij idea专业版 操作系统:windows10 java: JDK11 构建工具Gradle : gradle-7.0.0 模拟器AVD:pixel 3XL API 30 具体AVD配置详情如下 APP功能 该APP包含17个Activity,每

    2024年02月09日
    浏览(40)
  • 移动开发项目 Android Studio 健康助手APP

    健康助手系统是一款便捷软件,旨在通过提供多方面的的健康便捷的管理服务,让用户的生活更健康,更便捷。用户可以在健康助手APP上购买不同的体检套餐,预约医生,使用地图查找药房等的位置,浏览网页了解健康知识,传播健康文化。 (1)为了更好地了解自己的身体

    2024年02月03日
    浏览(57)
  • 如何开发移动应用:iOS和Android的比较

    移动应用开发领域一直以来都备受关注,而iOS和Android作为两大主要的移动操作系统,各自拥有强大的生态系统和开发工具。在本文中,我们将比较iOS和Android移动应用开发的关键方面,以帮助开发者选择合适的平台,或者了解在不同平台上开发应用时需要考虑的因素。 iOS iO

    2024年02月07日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包