jsRpc js逆向远程调用加密函数

  1. rpc介绍:

    RPC 全称 Remote Procedure Call——远程过程调用,简单说就是为了解决远程调用服务的一种技术,使得调用者像调用本地服务一样方便透明;
    使用RPC服务就可以直接在浏览器中的页面js中注入代码,将其作为一个客户端,本地相当于一个服务端,就可以实现js免破解,相当于黑盒的逆向调用,还是有相当大的场景;

  2. jsRpc

    RPC服务自己写,比较麻烦,有现有的轮子jsRpc git地址可以直接使用,使用方法及其案例在git中都有记录

  3. 使用步骤及注意点
    a: 在JsRpc Releases下载地址下载exe应用,然后双击打开服务;

    b:在chrome检查中的sources找到js逆向中的加密字段,然后通过overrides重写该js文件,也可以使用其他方法,然后再overrides中把这个加密方法进行window.方法名称(自定义)= 加密字段,将加密方法暴露到全局,然后保存该文件,手动刷新网页就可以加载重写之后的js文件;
    图1-1
    c:如果临时测试也可以直接在chrome检查的console控制台进行手动处理,将github中的/resouces/JsEnv_De.js中的js代码直接放到console加载执行下, 并且使用js代码生成一个rpc链接 ;

    var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=weibo");
    

    d:在console控制台上,可以手动试下暴露出来的全局方法,看是否可正常使用,可以正常使用的话,就可以在console控制台上进行注册rpc

    //window.hlg 就是暴露出来的加密方法;
    demo.regAction("password_jiami", function (resolve,param) {
        //这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上
        var res = window.hlg(param['password']);
        console.log(res);    
        resolve(res);
    });
    

    e:然后创建一个python脚本,去调用注册的方法password_jiami,代码如下:

    import requests
    
    # js_code = """
    # (function(){
    #     console.log("test")
    #     return "执行成功"
    # })()
    # """
    #
    # url = "http://localhost:12080/execjs"
    # data = {
    #     "group": "zzz",
    #     "code": js_code
    # }
    # res = requests.post(url, data=data)
    # print(res.text)
    
    import json
    
    url = "http://127.0.0.1:12080/go"
    data = {
        "group": "weibo",
        "action": "password_jiami",
        "param": json.dumps({'password': 55555555})
    }
    print(data["param"]) #dumps后就是长这样的字符串{"user": "\u9ed1\u8138\u602a", "status": "\u597d\u56f0\u554a"}
    res=requests.post(url, data=data) #这里换get也是可以的
    print(res.text)
    # resp = requests.get("http://127.0.0.1:12080/page/html?group=zzz")     # 直接获取当前页面的html
    # resp = requests.get("http://127.0.0.1:12080/page/cookie?group=zzz")   # 直接获取当前页面的cookie
    # print(resp)
    

    f:如果调用顺利,就可以返回响应加密字段了;

  4. JsRpc 中的js代码直接注入加密的js文件中,方便实现自动化,进行脚本代码调用;
    a: 在overrides中对加密js文件的文件头上添加JsRpc中的/resouces/JsEnv_De.js中的代码;

    b:然后对加密js代码进行注册服务,可以参考我的代码;
    在这里插入图片描述
    具体代码如下:

    (function () {
        window.hlg = function (Password){
             return Jh("".concat([rp(), np()].join("	"), "\n").concat(Password), s.pubkey)
         };
         var demo = new Hlclient("ws://127.0.0.1:12080/ws?group=weibo");
         demo.regAction("password_jiami", function (resolve,param) {
             //这里还是param参数 param里面的key 是先这里写,但到时候传接口就必须对应的上
             var res = window.hlg(param['password']);
             console.log(res);    
             resolve(res);
         });
     }
     )();
    

    c: 代码重新保存之后,一定要对网页进行刷新 才可以使用重写之后的js文件(如果加密的js文件名称会发生变化,可以考虑使用油猴,或者抓包平台进行js代码文件重写);

    d: 之后便是让浏览器加载到该代码,因为我实例中的代码是放到了登录中才会触发的函数中,所以我这边第一次手动登陆下,让浏览器加载了该rpc暴露代码,

    e:然后再使用python脚本去调用就好了;

备注:charles抓包替换js代码方法及其跨域问题解决方案, 其中解决跨域问题中,有两个注意点,1:填写请求返回headers字段的时候,涉及到的key是通过分析之前该文件请求返回response的headers字段;2:填写headers字段的时候,文中展示的是request, 要改动下,点击response;

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Frida远程函数调用是指在Hook过程或者黑盒调用过程中,通过RPC来主动调用二进制文件的函数。这种调用方式可以实现一些基础的使用方式,也可以进行一些进阶的操作,比如构造疑难函数参数等。\[1\] 在Python脚本中,可以使用Frida库来实现远程函数调用。首先,需要通过adb命令将本地端口与设备端口进行转发。然后,使用Frida库连接到目标应用程序,并加载自定义的JavaScript脚本。在JavaScript脚本中,可以使用Java.perform函数来获取目标类,并重写其中的函数。通过调用send函数,可以将参数发送到Python脚本中进行处理。最后,使用script.load()加载脚本并执行。\[2\] 对于不知道参数的情况,可以使用普通的hook操作来获取参数的值。在JavaScript脚本中,可以使用Java.use函数获取目标类,并重写其中的函数。通过调用send函数,可以将参数发送到Python脚本中进行处理。\[3\] 总结来说,Frida远程函数调用是通过RPC来主动调用二进制文件的函数。可以使用Frida库连接到目标应用程序,并加载自定义的JavaScript脚本来实现远程函数调用。在JavaScript脚本中,可以重写目标类的函数,并通过send函数将参数发送到Python脚本中进行处理。 #### 引用[.reference_title] - *1* *2* [Frida系列--远程调用(RPC)](https://blog.csdn.net/qq_30135181/article/details/110136589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【frida逆向开发】frida-rpc远程调用某安app方法获取token](https://blog.csdn.net/weixin_44032232/article/details/111318871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值