一道Android逆向题的取巧解题思路

简介: 一道Android逆向题的取巧解题思路

前言


最近朋友发来一道Android逆向题,挺有意思,花时间研究了一下,在算法逆不出来的情况下(我太菜),用frida取巧解出了题目,记录下学习的过程。


抛出问题


安装打开题目发现是要求输入字符串。    

7cec6336fbf8034d6dd25407ed1ac282_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

随便输入提示错误。

84c9610ab6133770026ceb8563283763_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


JAVA层静态分析


拖进jadx,先分析下java层。里面类有点多,估计是垃圾代码,直接看Androidmanifest文件找到启动的Activity去分析。  

6768041e8adcb0e1e1fcb242dce71549_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

找到对应的类,一看上面就是一个byte数组,一个loadLibrary,一个native函数,so逆向跑不了。  下面看到对应的按钮点击事件。  

884f4fba35b40251fa6d21092c801b6f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

继续跟进去看,找到了核心的逻辑,是通过encry函数处理输入字符串,返回一个byte数组,然后和前面的byte数组比较是否相等,那前面的byte数组应该就是加密后的flag,我们要做的就是逆出来。  

b4aaa697c0fc31710f739b1babc9aa48_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


Native层静态分析


encry是写在native层,对apk解包,取出对应的so(libencry.so)拖进ida。  可以看到是静态注册的,直接能在导出函数里找到。

1b4ce563825dd3726c8244ab6772497f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

转成C伪码,看一下,我还是太菜,不会。

1f5975ace99279ab0938b3d866a60743_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

动态调了下,也没调明白,我太菜了。


Frida动态hook


关掉ida,直接上frida,先来hook一下这个函数,看看输入输出。  可以hook到,输入的参数以及输出的byte数组

4e1441b0c69e9c257d1e73f52e4480c4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这里开始测试(猜),flag格式一般就是flag{xxxxxx},我输入“flag{”进行测试,hook结果如下:  

cb17dc110e4f9211829570a66e7ea54e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

对比Java层中的byte数组,发现前几位已经能对上了,但是最后一位对不上,应该是因为so层中的加密算法后一位会影响前一位。  到这里就已经可以get到一个比较取巧的思路了,写个rpc脚本调用一位一位爆破flag。


Frida rpc调用


直接hook encry函数,主动调用。  js部分如下:  

3903c2ab0ffdc8484748db7ff3b121f8_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

python调用,爆破部分如下:

a79912bade708f5f4ffe5158c4cd4db1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

一位一位遍历所有可打印字符跑起来。  成功获取(爆出)到flag。

747da5677f0707693c47887bb5f7dc7c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


总结


常规做法做不出来,只能取巧,题目设置也刚好,最终还是以结果为导向,能解题的方法总是好方法。这里只是举例了用frida,实际上也可以使用unidbg去主动调用so进行爆破,原理是差不多的。


相关文章
|
Web App开发 JSON 安全
阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
大家在聚安全挑战赛正式赛第三题中,遇到Android App 远程控制的题目。我们今天带你一探究竟,如何攻破这道题目。
4860 0
|
7天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
12 1
|
9天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
32 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
1月前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1月前
|
Android开发
android全透明背景色: android 开发 背景常用透明度
android全透明背景色: android 开发 背景常用透明度
12 0
|
10天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
43 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
30天前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
29 3
|
1天前
|
机器学习/深度学习 安全 数据处理
构建未来:基于Android的智能家居控制系统开发
【4月更文挑战第29天】 随着物联网技术的蓬勃发展,智能家居已成为现代技术革新的重要领域。本文将深入探讨基于Android平台的智能家居控制系统的设计和实现,旨在提供一种用户友好、高度集成且功能丰富的解决方案。通过利用Android设备的广泛普及和其强大的处理能力,结合最新的无线通讯技术和人工智能算法,我们旨在打造一个可靠、易用且具有高度可定制性的智能家居控制环境。文中不仅详细阐述了系统架构、关键技术选型以及界面设计,还对可能遇到的安全挑战进行了分析,并提出了相应的解决策略。
|
6天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
23天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。