前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Notes|Android 客户端逆向基础知识分享

Notes|Android 客户端逆向基础知识分享

作者头像
贺biubiu
发布2023-05-30 14:54:43
5880
发布2023-05-30 14:54:43
举报
文章被收录于专栏:HLQ_StruggleHLQ_Struggle

技术分享,一直都是让人比较无奈的事情。分享的东西对于不感兴趣的童鞋而言,简直枯燥无味,而对于大佬而言,又是关公面前耍大刀。

没办法,硬性指标...

今天这里分享下,在公司做的技术分享,关于逆向的一些基础知识~

逆向简述

逆向的本质,是对现有软件和硬件系统的反向分析,其目的,更多的是从中发现各种安全漏洞,进一步提升健壮性,同时减少相关漏洞带来的实际损失。

例如某银行曾出现的黑客攻击,导致大量客户信息泄漏,最终盗刷巨额账户资金。

其实,透过现象看本质,想去更为深入的了解 Android 内部原理、机制、别的团队设计思想以及实现方法,逆向不为是另一种最佳选择。

例如,之前做某黑产应用,竞品实现的微信借壳分享关键代码,也是通过逆向的方式间接获取参考并实际应用的。

所以,掌握部分逆向技术,对于深入 Android 还是具有一定优势。

逆向工具简述

以下是一些常用的 Android 逆向工具以及它们的地址链接:

Apktool:反编译 APK、编译、签名工具,可以获取 APK 中的资源和代码。

GitHub 地址:

https://github.com/iBotPeaches/Apktool

dex2jar:将 DEX 文件转换为 JAR 文件,便于反编译 Java 代码。

GitHub 地址:

https://github.com/pxb1988/dex2jar

JD-GUI:Java 反编译器,可以将 JAR 文件和 APK 文件中的类文件反编译为 Java 代码。

官方网站:

https://java-decompiler.github.io/

JADX:Java 反编译工具,可以将 APK 文件反编译为 Java 代码。

GitHub 地址:

https://github.com/skylot/jadx

Frida:一款动态插桩工具,可以用于 Hook 应用程序中的函数、拦截系统调用等。

GitHub 地址:

https://github.com/frida/frida

Burp Suite:一款用于渗透测试的工具,可以拦截 HTTP(S) 流量,并提供各种功能,如拦截、修改、重放、验证等。

官方网站:

https://portswigger.net/burp

Wireshark:一款网络协议分析工具,可以捕获网络流量并分析其中的数据包。

官方网站:

https://www.wireshark.org/

IDA Pro:一款功能强大的反汇编器,可以对二进制代码进行静态分析。

神器 动态下钩子 动态调试 smail~ 官方网站:

https://www.hex-rays.com/products/ida/

Xposed Framework:一款基于动态链接库注入的框架,可以用于修改应用程序的行为、增强功能等。

GitHub 地址:

https://github.com/rovo89/Xposed

通过 ApkTool 修改 App Name/Logo

安装说明

这里附上关于 ApkTool 安装步骤:

下面附上实际的安装步骤,这里以 Mac OS 为准。

这里说下安装遇到的几个小问题,先附上截图:

其实这里遇到的都是权限导致的一些问题,如果是新电脑的话,建议直接是 sudo 大法走起。

另外,遇到的一个问题就是在 mac OS 中将文件后缀修改了,但是移动到目标目录里面,通过 ls 查看后续依然没变,所以为了省事儿,还是直接将下载的两个文件直接移动到 /usr/local/bin 目录中,然后继续通过 sudo mv 进行对应的修改更方便吧。

最后别忘记授权 chmod +x

实战操作

目标:

修改蘑菇启动 logo 以及 name

步骤:

通过 apktool d [target.apk] 命令,对目标 apk 进行解包操作:

res/string 文件中直接搜索 app_name,并修改为指定名称:

随后依次替换 mipmap 文件中的 ic_launcher 图片即可:

接着通过 apktool b [apktool 解包目录名称] 进行回包操作:

回包过程中如果出现以下问题:

W: ERROR: Failure processing PNG image res/mipmap-xxhdpi/ic_launcher.png W: libpng error: Not a PNG file

则代表不要直接通过修改图片格式的方式去调整图片格式,通过某些软件的导出,导出 png 即可。

此时的 test.apk 仅仅只是一个基础包,未签名的包,也可称为母包。

随后我们借助 360 加固工具,快速创建一个 keystore 证书:

随后继续借助该工具完成 apk 签名:

最后直接通过 adb 命令进行安装、验证:

有没有一种纵享丝滑的赶脚~

此种玩法弊端:

对应 app 三方不可用,sha1 值发生了变化

那么有没有一种方式,可以实现原包证书签名打包呢?

本质上是可操作的。

下面简单的进行拓展一下。

拓展篇

我们知道 Apk 的产生是我们将代码文件、资源文件以及相关配置进行构建打包,整合并输出到 apk 中。

那么我们同样也可以通过将 .apk 修改为 .zip,并解压,这里一起来看下解压后的目录,这里我们着重关注 META-Info 目录。

因为 Android 会将打包后的证书签名信息存储在 META-INF 目录中,当前也包含其他的一些常规配置。

这里简单的回顾下签名的意义:

  • 防止应用被篡改;
  • 保护应用完整性以及同类数据共享;
  • 归属确认

还是老生常谈的话,既然生成对应的“保护文件”,那我们同样可以通过反向操作,得到最终的签名文件。

不过过程比较艰难了就,而且不同的证书对于密码的重试有一定的限制。

例如 jks 虽然是默认的 Keystore 类型,但是它的密码是以明文形式保存,而且没有重试次数的限制。

而 AndroidKeyStore 则支持重试限制,次数限制由设备厂商决定,通常次数限制为 10 次。

这里给出工具方法,有需要的小伙伴可以自己操作,这里不做过多详解。

  1. 通过 keytool/OpenSSL 工具 解析 CERT.RSA 文件,提取证书信息;PS:如果对方的签名是 jks,猜测可以通过撞库暴力破解。keystore 知识盲区了就。
  2. 随后通过 keytool 工具创建新的签名文件,同时保障相同的 SHA1。

另外不得不提 Android 后续的 V2、V3 等签名机制,个人的理解,还是通过增加更多信息的校验规则,不断完善证书签名的有效性以及安全性吧。

掌握逆向的作用/意义

首当其冲,则是对于 Android 整个体系的融会贯通,了解内部工作原理和实现方式,便于后续应用开发提供更有力的参考依据;

优化,通过逆向分析,可以发现其中存在的一些性能、逻辑、代码的相关问题,更好的完善,更好的提升应用的健壮;

了解竞品,更好的借鉴参考,应用本产品中;

更深入的了解后,也可以专门针对应用攻防进行深入探究。

常规反逆向的方案

  1. 加密,做好防御式编程,核心组件使用不同的加密方案,提升逆向难度,密钥信息可 so 化存储;
  2. 混淆:通过混淆代码中的类、方法、变量名,提高反编译出来的代码可阅读性。当然混淆的规则也可以自定义,而我们的资源文件,同样也可以进行混淆,提升安全的同时也可以大幅度减少 Apk 大小,此处可自行搜索微信压缩方案;
  3. 移除调试信息:在编译 Apk 的时候,去掉调试形式,使得调试工具无法使用;
  4. 加固:通过对 Apk 进行加密或者二次加密,提升反编译难度以及增加调试难度。目前市面上较为成熟的,个人更推荐 360 加固,最近看个人版也开始有限制了;
  5. 动态加载:将一些核心代码放在服务器,通过动态下发的方式,提升安全的同时,减少本地静态代码的暴露。当然此方案需要搭配完整的兜底容错方案;
  6. Root/Xpose 化检测收集,完善用户画像,增加风控。之前针对 Root/Xpose,某些产品的方案是直接闪退,残暴的同时,其实也没啥卵用,也可以绕过去。

需要注意的是,以上的方案并不能百分百防止 Android 被逆向,只是增加逆向的难度和成本,间接提升安全性。

其实就矛与盾的关系一样。

欢迎各位关注

不定期发布

见证成长路

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 贺biubiu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档