找回密码
 立即注册
首页 编程领域 编程板块 一道Android逆向题的取巧解题思路

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

2023-3-30 09:34:12 评论(0)
一道Android逆向题的取巧解题思路前言
最近朋友发来一道Android逆向题,挺有意思,花时间研究了一下,在算法逆不出来的情况下(我太菜),用frida取巧解出了题目,记录下学习的过程。
抛出问题
安装打开题目发现是要求输入字符串。



随便输入提示错误。

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


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



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

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


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


动态调了下,也没调明白,我太菜了。
Frida动态hook
关掉ida,直接上frida,先来hook一下这个函数,看看输入输出。
可以hook到,输入的参数以及输出的byte数组
这里开始测试(猜),flag格式一般就是flag{xxxxxx},我输入“flag{”进行测试,hook结果如下:


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


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




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

使用道具 举报

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们(3513994353@qq.com)。
您需要登录后才可以回帖 登录 | 立即注册
楼主
我是好人

关注0

粉丝0

帖子30

最新动态