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
* 网址:https://obaby.org.cn/
* 个性:https://oba.by/
* 本文标题: 《Frida Hook 初体验》
* 本文链接:https://obaby.org.cn/2020/06/7255
* 短链接:https://oba.by/?p=7255
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

发表回复

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