暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

frida主动调用简介

第59号 2021-11-12
4016

通过上节的介绍,我们知道了frida是一个功能很强大的hook框架。hook,也就是插桩,其实就是在运行过程中插入代码实现自己想要的功能,比如当我们想要hook一个函数或者说方法时,只有这个函数被调用的时候,我们的hook才能发挥作用。


如果应用程序一直不调用那个函数,那我们的hook代码就一直得不到运行。难道我们只能够被动的等待应用程序调用函数,有没有主动触发函数执行的方法?答案是肯定的,frida的主动调用机制就可以很方便的让我们执行我们想要执行的函数。

 

01

frida主动调用分类


frida主动调用可以分为以下5种情况:


1.frida主动调用java类方法(静态java方法)

2.frida主动调用native类方法(静态native方法)

3.frida主动调用对象的java方法

4.frida主动对象的native方法

5.frida主动调用so方法


上述5种情况的具体调用方法代码本文不做展开,下面以两个ctf比赛中的常见主动调用案例来演示frida主动调用的使用。

02

主动调用案例一:


我们拿到一个压缩包,解压后里面是一个easyAPK.apk的安装文件。



将其安装到模拟器上运行。




使用jadx打开easyAPK.apk文件,搜索“摸到我就告诉你key”,发现提示文本在MainActivity中,且MainActivity中的代码功能实际是控制emoji移动的点击事件,对解题并没有实际作用。



源码中包含一个名为TheFlagIsNotHere的类,该类中存在一个getkey方法,方法里面是计算得到flag的算法。



搜索TheFlagIsNotHere,发现获取flag的方法并没有在该应用中被调用。



这种情况就可以使用frida主动调用来主动的执行TheFlagIsNotHere类的getkey方法来获取flag,编写的frida主动调用脚本如下:




成功拿到flag。



02

frida主动调用案例二:


下载题目apk并安装到模拟器上,这是一个密码破解的题目,当输入密码错误时,会提示“Unfortunately,not the right PIN:(”




使用AndroidKiller打开apk文件,搜索“Unfortunately”关键字



然后再搜索代码中对应的dialog_failure



可以得到一个方法调用顺序

verifyPasswordClick()->verifyPassword()->encodePassword()



通过分析verifyPassword()、encodePassword()可以知道,密码为4位字符,输入的4位字符会被encodePassword方法加密/编码,加密/编码后的字符串与verifyPassword中固定的字符串进行比对,如果一致则为正确的密码。根据这个逻辑可以编写下面的frida主动调用脚本来爆破密码。



将编写的脚本保存为js文件并使用命令frida -U -l xxx.js org.teamsik.ahe17.qualification.easy进行hook




爆破出密码是9083。







文章转载自第59号,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论