一道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 远程控制的题目。我们今天带你一探究竟,如何攻破这道题目。
4866 0
|
4天前
|
设计模式 算法 前端开发
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
|
3天前
|
编解码 数据库 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【5月更文挑战第18天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五种提升安卓应用用户界面性能的技巧,包括合理布局设计、优化资源使用、利用硬件加速、内存管理以及响应式编程。通过这些方法,开发者可以创建出既美观又高效的应用体验,从而吸引和保留用户。
|
4天前
|
XML Android开发 数据格式
ConstraintLayout 2,Android高级开发面试
ConstraintLayout 2,Android高级开发面试
|
4天前
|
JSON Android开发 数据格式
Android框架-Google官方Gson解析,android开发实验报告总结
Android框架-Google官方Gson解析,android开发实验报告总结
|
4天前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
4天前
|
安全 Linux Android开发
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
|
4天前
|
算法 前端开发 Android开发
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
Android文字基线Baseline算法的使用讲解,Android开发面试题
|
4天前
|
缓存 Android开发
Android插件化——高手必备的Hook技术,零基础开发android
Android插件化——高手必备的Hook技术,零基础开发android
|
4天前
|
Android开发
Android高级开发面试题以及笞案整理,实战解析
Android高级开发面试题以及笞案整理,实战解析