提交需求
*
*

*
*
*
立即提交
点击”立即提交”,表明我理解并同意 《美创科技隐私条款》

logo

    产品与服务
    解决方案
    技术支持
    合作发展
    关于美创

    申请试用
      frida主动调用简介
      发布时间:2021-11-12 阅读次数: 415 次

      通过上节的介绍,我们知道了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。



      免费试用
      服务热线

      马上咨询

      400-811-3777

      回到顶部