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

admin 2023年1月30日20:51:48评论24 views字数 1100阅读3分40秒阅读模式

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

前言

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

抛出问题

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

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

随便输入提示错误。

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

JAVA层静态分析

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

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

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

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

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

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

Native层静态分析

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

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

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

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

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

Frida动态hook

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

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

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

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

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

Frida rpc调用

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

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

python调用,爆破部分如下:

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

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

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

总结

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


往期回顾

01

PostgreSQL 高权限命令执行 (CVE-2019-9193)漏洞复现&实战

02

webshell免杀中符号的妙用



03

objection 过证书绑定抓APP数据包


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

雷石安全实验室

商务咨询:

0571-87031601

商务邮箱:

[email protected]

联系地址:

浙江省杭州市市民街98号尊宝大厦金尊3301



原文始发于微信公众号(雷石安全实验室):一道Android逆向题的取巧解题思路

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月30日20:51:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一道Android逆向题的取巧解题思路https://cn-sec.com/archives/1349193.html

发表评论

匿名网友 填写信息