zoukankan      html  css  js  c++  java
  • Android 安全研究 hook 神器frida学习(一)

    在进行安卓安全研究时,hook技术是不可或缺的,常用的有Xposed:Java层的HOOK框架,由于要修改Zgote进程,需要Root,体验过Xposed,整个过程还是很繁琐的,并且无法hook,native层的。作为一名安卓菜鸟,Frida明显更方便,更适合我,结合现有的工具可以很容易的达到hook 的目的。

      本篇文章为第一篇,初体验Frida。

      学习的前提:安卓开发基础 ,推荐:https://www.runoob.com/w3cnote/android-tutorial-android-studio.html,(代码敲一遍),java基础,python基础,js基础。

      关于Frida的安装,环境搭建:https://juejin.cn/post/6844904110706130952

      简单体验Frida,破解一个app。

      

       app很简单,需要输入密码才能进入主页面;破解思路,我们要找到检查验证码的函数,进行hook. 

      找到hook点的思路,静态分析代码,借助工具进行动态调试。

      

       代码1位置处可以看到securityCheck()函数进行校验,如果返回值为true,验证成功。在3位置可以看到,函数实在native,要想知道函数内容需要查看so文件。

      hook一个函数,是返回值为true,可以去hook函数的参数,提交正确的参数可返回true,或者hook函数的返回值,使函数的返回值永远为true也可以。

      这里我们只从java层去hook,hook函数的返回值,使函数的返回值永远为true即可

      开始写hook代码,我们只需要按照所给的代码框架,写入未入hook代码即可。

        

     1 import frida
    
     2 import sys
     3 
     4 jscode = """
     5     //这个地方写js代码,也是主要的hook代码;
     6 
     7 """
     8 
     9 def on_message(message, data):
    10     if message['type'] == 'send':
    11         print("[*] {0}".format(message['payload']))
    12     else:
    13         print(message)
    14 
    15 
    16 # 重点的4行代码
    17 process = frida.get_usb_device().attach('com.yaotong.crackme')//更改为要的app包名,.attach可改为spawn。spawn:以包名启动进程并附加 ,attach:在app运行过程中去附加 
    18 script = process.create_script(jscode) 
    19 script.on('message', on_message) 
    20 script.load()
    21 sys.stdin.read()

    jscode 里要写的内容为

    console.log("Hello");
        function main() {
            console.log("Hello");//打印字符,证明hooK开始
            Java.perform(function x() {
            var MainActivity = Java.use("com.yaotong.crackme.MainActivity"); //要想hook一个函数我们先要找到他的类,得到类以后可以就调用它里面的函数.Java.use(包名.类名)实现
            //MainActivity即为我们hoook到的类,可以直接调用里面的函数,更改属性值等操作,具体写法如下(ps:该函数为普通方法,构造方法,重载方法写法都不同)
            MainActivity.securityCheck.implementation = function (str) {   //调用函数,function里面的参数要与原函数对应。
               return true;   //更改返回值,frida会检测app进程,一旦该pp调用了MainActivity里面的securityCheck()函数,会自动更改返回值为true;
            };
    
        })
    
    
    }
    
    setImmediate(main);

    运行脚本:

    接着我们去输入验证码的地方输入任意值,调用该函数都会返回true

    hook成功

     

     以上是Frida的初体验,找到hook点,编写hook的js代码,启动frida,调用该函数,hook成功。整个过程十分方便。

  • 相关阅读:
    【leetcode❤python】 374. Guess Number Higher or Lower
    【leetcode❤python】 8. String to Integer (atoi)
    【leetcode❤python】 438. Find All Anagrams in a String
    【leetcode❤python】 88. Merge Sorted Array
    【leetcode❤python】 225. Implement Stack using Queues
    【leetcode❤python】 58. Length of Last Word
    463:归档和传输文件
    438:管理网络
    365:查看系统日志条目
    350:描述系统日志架构
  • 原文地址:https://www.cnblogs.com/hatkids/p/14197657.html
Copyright © 2011-2022 走看看