frida hook native层巧解Android逆向题

简介: 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。


相关文章
|
7月前
|
编解码 Android开发
Android native层实现MediaCodec编码H264/HEVC
Android平台在上层实现mediacodec的编码,资料泛滥,已经不再是难事,今天给大家介绍下,如何在Android native层实现MediaCodec编码H264/HEVC,网上千篇一律的接口说明,这里不再赘述,本文主要介绍下,一些需要注意的点,权当抛砖引玉,相关设计界面如下:
134 0
|
2月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
19 1
|
3月前
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
78 0
|
3月前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
49 0
|
9月前
|
XML 存储 JavaScript
Android打造专有Hook第三篇,实战全量代码规范检查
目前的规范检查,我分为了全量文件检查和增量文件检查,基本上和Git提交保持一致,在实际的业务中,开发者可以动态修改配置文件参数gitIncrement,来切换是增量还是全量,增量和全量有一些是共通的地方,接下来的代码中会陈述。
|
6月前
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
34 0
|
6月前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
93 0
|
9月前
|
Java 开发工具 Android开发
Android打造专有Hook第四篇,实战增量代码规范检查
在全量文件检查中,我们只需要得到Git提交的文件,然后逐一针对文件内容,获取,做相关的逻辑检查即可,但是增量就不能这样搞了,我们都知道,每次增量的提交,是没有规律可言的,也许增量中只有一行,也许有百行,而且增量的代码位置,有可能是在方法中,有可能是在资源中,所以针对增量代码的检查,是必须要做出取舍的,因为,通过一行,或者几行,很难达到一定的规范标准
|
9月前
|
JavaScript 前端开发 Shell
Android打造专有hook第二篇,走进规范第一步
关于Git的Hooks,其实很常见,位置存在于 /.git/hooks 目录下,都是一些 shell 脚本,然后在对应的钩子中执行这些脚本就行了,比如下图中,这是一个还没有配置 Git Hooks 的仓库,默认会有很多.sample结尾的文件,这些都是示例文件,比如我们常见的,commit,push等。
122 0
|
9月前
|
JSON JavaScript 数据可视化
Android打造专有hook,让不规范的代码扼杀在萌芽之中
正所谓规范是一个项目的基石,也是衡量一个项目,是否健壮,稳定,可维护的标准,可谓是相当重要的。我相信,大部分的公司都有自己的一套规范标准,我也相信,很多可能就是一个摆设,毕竟人员的众多,无法做到一一的约束,如果采取人工的检查,无形当中就会投入大量的时间和人力成本,基于此,所谓的规范,也很难执行下去。