frida hook native层巧解Android逆向题

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: frida hook native层巧解Android逆向题

前言


最近还是老朋友发来一道Android逆向题,挺有意思,用frida hook native层解出了题目,记录下学习的过程。


JAVA层静态分析


直接拖进jadx,MainActivity内容如下:      

19c97a9ade4d40cd2d8c78e9ca31e2cd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

代码不多,基本流程就是,获取输入字符,通过一个反射调用(调用的函数是加密了,要用native层的decode解密)处理了一下输入字符串,然后通过check函数进行判断,前面的是处理过的输入字符串,后面的一串应该是密钥之类的。

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


frida hook java层


首先比较关心decode解密的数据是啥,直接hook一下,可以看到反射调用的是base64,那么后续传入比较的字符串就是base64处理过了,我们解出来的flag应该也是要base64解密一次。  看到还有一串“Hikari#a0344y3y#1930121”,应该是传入check的密钥。  

04f804dde01b7241582e094eafd196d0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

接下来比较关心的就是check函数是怎么处理输入的字符串。


Native层静态分析


直接解压把libcheck.so拖入ida。  发现是静态注册的,直接能在导出函数里找到,关键步骤还是再最后几行,可以看到是通过RC4进行了加密,与一个数组进行了比较判断,跟进do_crypt函数后,处理伪码后如下:

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

那么这个数组的内容应该就是要找的加密后的flag。

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


Frida hook native


记录下函数地址,关掉ida。  

9a7c0c89c0bbfa2fbbc85db017a5bb5a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

直接上frida,先来hook一下这个函数,看看输入输出,这里从上面可以看到是arm指令后面计算函数地址不需要加1,打印下输入输出的内容。

413f1cda204546cedafa9705e336e6ef_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

动态调试起来输入结果如下:

448e87faadcf11ae00f1e6598599aa2a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

能成功hook了,刚好这里是通过RC4算法进行的加密,那么我们只需要把输入的内容替换成上面找到的flag的密文,就应该能得到真实的flag(base64编码后的)。  通过frida操作内存,把输入的参数arg[1]hook并覆写内存成我们密文的内容,这里需要注意一点,你输入的文本尽可能长一点,不然获取到的结果不全。

8a8cd3c4bee5822561ef29b8042371f2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

打印内存得到了一串字符串,base64解码一下,得到flag:

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


总结


题目设置刚刚好,后面看了别人的wp,发现rc4是魔改过的,但是这里是rc4,那么就可以这么取巧去做一下,运气也不错,直接做了出来,主要还是学习一下frida对native层的hook。


相关文章
|
5月前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
4月前
|
Dart Android开发 Windows
Flutter和Native 通信 android端
Flutter和Native 通信 android端
|
5月前
|
Java Linux API
微信API:探究Android平台下Hook技术的比较与应用场景分析
微信API:探究Android平台下Hook技术的比较与应用场景分析
|
6月前
|
缓存 Android开发
Android插件化——高手必备的Hook技术,零基础开发android
Android插件化——高手必备的Hook技术,零基础开发android
|
6月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
67 1
|
6月前
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
126 0
|
6月前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
155 0
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
94 0
|
编解码 Android开发
Flutter如何与Native(Android)进行交互
上一篇文章Flutter混合开发:Android中如何启动Flutter中我们介绍了如何在Native(Android项目)中启动Flutter,展示Flutter页面。但是在开发过程中,很多时候并不是简单的展示一个页面即可,还会涉及到各种交互,比如传递一些消息。 本篇文章就简单介绍一下Flutter与原生Native的三种交互方式: BasicMessageChannel、MethodChannel和EventChannel。
180 0
|
6天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。