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文件;
    jsRpc js逆向远程调用加密函数_第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代码进行注册服务,可以参考我的代码;
    jsRpc js逆向远程调用加密函数_第2张图片
    具体代码如下:

    (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;

你可能感兴趣的:(js逆向,javascript,js,逆向,JsRpc,python)