Frida Hook 初体验

好久没有去做安卓的东西了,技术日新月异,貌似自己有点脱节了。其实之前也尝试过安装frida,好几次都比较蛋疼的卡在了安装的地方。同样,这一次又开在了安装的地方,仔细看了下没有找到wheel,取消之后可以先装wheel,然后再次安装,如果使用国外的源太慢,可以尝试切换到国内的源,个人比较倾向于清华大学的python源,地址自己去我的友链表复制。

如果不想永久的修改源,可以通过-i参数来切换源。

安装之后许还需要安装frida-server,猛击此处下载!我没有使用真机,用的安卓模拟器。把模拟器的路径添加到系统环境变量,然后即可以直接运行adb命令了。

执行adb push frida-server /data/local/tmp/ 将frida-server push到设备上,添加执行权限,然后服务即可。

执行adb forward tcp:27042 tcp:27042  adb forward tcp:27043 tcp:27043 进行端口转发。

然后就可以通过frida进行链接控制了。

以某app为例,数据进行了加密,不单接口加密,包括返回的图片也进行了加密。在没有解密的情况下是无法正常显示的,数据内容如下:

代码里虽然能看到解密用的key 和iv, 但是在实际解密的时候并不是这个数值:

  
  public static final String decodeImgIv()
  {
    return CipherCore.get("f3d9434408e52778164db2214e3a0a22");
  }
  
  public static final String decodeImgKey()
  {
    return CipherCore.get("a527dfef2540e04977c7893c21dbb0f9");
  }
  

最终调用的aes函数为:com.ilulutv.fulao2.other.g.b。

那么要获取解密的key和iv只需要hook这个函数即可:

Java.perform(function () {
  // Function to hook is defined here
  var base64 = Java.use('android.util.Base64');
  var aes = Java.use('com.ilulutv.fulao2.other.g.b');
    // 图片加密处理
    aes.b.overload("[B", "[B", "java.lang.String").implementation = function(k, iv, source_string){
        send("Image_key:"+k);
        send(base64.encodeToString(k, 0))
        send("Image_iv:"+iv);
        send(base64.encodeToString(iv, 0))
        return this.b(k, iv, source_string);
    };

});

不过由于解密之后的byte是不可见字符,于是用base64重新加密之后发送出来,真实的加密的key为:b’\xb2\xf3\x84(f\xf9X=\x1e\xcea\xc4\xe0U\xc2U’

使用获取的key和iv解密图片就可以正常显示了:

图片为浅色部分:

完整的代码:

# -*- coding: utf-8 -*-
"""
@author: obaby
@license: (C) Copyright 2013-2020, obaby@mars.
@contact: root@obaby.org.cn
@link: http://www.obaby.org.cn
        http://www.h4ck.org.cn
        http://www.findu.co
@file: f_test.py
@time: 2020/6/29 13:35
@desc:
"""

import frida
import sys
rdev = frida.get_remote_device()
session = rdev.attach('com.ilulutv.fulao2')

src = """
Java.perform(function () {
  // Function to hook is defined here
  var base64 = Java.use('android.util.Base64');
  var aes = Java.use('com.ilulutv.fulao2.other.g.b');
     //图片加密处理
    aes.b.overload("[B", "[B", "java.lang.String").implementation = function(k, iv, source_string){
        send("Image_key:"+k);
        send(base64.encodeToString(k, 0))
        send("Image_iv:"+iv);
        send(base64.encodeToString(iv, 0))
        return this.b(k, iv, source_string);
    };
});

"""

script = session.create_script(src)

def on_message(message, data):
    print(message)

script.on('message', on_message)
script.load()
sys.stdin.read()

apk下载:https://obaby.lanzous.com/iime7e5924j

原创文章,转载请注明: 转载自 obaby@mars

本文标题: 《Frida Hook 初体验》

本文链接地址: https://h4ck.org.cn/2020/06/frida-hook-%e5%88%9d%e5%b0%9d%e8%af%95/

分享文章:

猜你喜欢:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注