上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

【工程实战篇】乱杀学起Sign加密

[复制链接]
  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 57 天

    [LV.5]常住居民I

    354

    主题

    3128

    帖子

    3129

    积分

    管理员

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    3129

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

    发表于 2022-4-18 09:45:08 | 显示全部楼层 | 阅读模式

    开篇

    这节课主要负责简单逆向出来学起的sign加密
    首先的任务是跑通,后续我们会逐步附加各种其他内容来确保加密的正确性
    首先抓包学校列表

    https://xueqiplus.chinaedu.net/aliothprovider/router

    提交内容是
    appKey=00000001&format=json&v=1.0&timestamp=时间戳&ns=&service=alioth.login.customer.listValid&deviceCode=2&tenantCode=&sign=sign加密
    我们需要破解的就是sign加密
    这时候我们在header里发现了一些有意思的东西
    图片.png
    可以看到Referer是一个链接
    那么就可以推测出学起app不是一个传统的app
    而是一个软件包裹页面,提供一些系统级api的封装app
    类似于超星app的技术
    我们直接访问这个网址
    图片.png
    发现可以正常抓包和调试
    不用使用MT管理器逆向了!
    摔,我他妈研究半天学起App
    图片.png
    查看堆栈发现created和schoolListReq非常可疑
    一个是创建,另外一个可能是调用菜单post的函数
    我们堆栈追送schoolListReq
    图片.png
    可以看到这里有一个n.request,提交参数是service,deviceCode,tenantCode
    打个断点,然后继续这个函数里走
    图片.png
    根据多次调试确定最后一行return生成加密
    倒数第二行的u暂时不确定到底干啥的,我们先忽略,跑通基本的加密
    图片.png
    最后一行的return函数继续往里走,发现里面有一个e.request
    提交的数据是data,应该是json字符串化一下
    字符串了什么?
    对h函数传入了n,r,d,并且得到了返回内容
    所以h函数很有可能是加密函数
    我们控制台打印一下看看
    图片.png
    可以看到内部生成了sgin加密
    继续往里跟
    图片.png
    根据调试是g函数生成了加密,继续跟
    图片.png
    这里根据调试是m(u,n)生成了sign加密
    在sign的时候打印一下u
    发现他混合了上方的数据,观察一下应该是这里的
    图片.png
    可以基本确定appKer,format,v,timstamp基本固定了,ns未知先不管
    继续往里追
    图片.png
    这里是通过u函数生成sign加密
    我们先读一下上方的代码

     i.forEach((function(t) {
                    a.push({
                        key: t,
                        value: e[t]
                    })
    }
    
                a.sort((n = "key",
                function(e, t) {
                    var i, a;
                    if ("object" === Object(s.a)(e) && "object" === Object(s.a)(t) && e && t)
                        return (i = e[n]) === (a = t[n]) ? 0 : Object(s.a)(i) === Object(s.a)(a) ? i < a ? -1 : 1 : Object(s.a)(i) < Object(s.a)(a) ? -1 : 1;
                    throw "error"
                }
                )),

    可以发现是遍历对象,然后投入key和value做对应的值
    然后进行了sort排序
    排序代码太乱了,所以这里就不看了
    可以直接复制粘贴一下

      let list = [];
      let listkeys = Object.keys(obj);
      listkeys.forEach(function (t) {
        list.push({
          key: t,
          value: obj[t],
        });
      });
        list.sort(function (e, t) {
        var i, a;
        if ("object" === "object" && "object" === "object" && e && t)
          return (i = e["key"]) === (a = t["key"])
            ? 0
            : "undefined" === "undefined"
            ? i < a
              ? -1
              : 1
            : "undefined" < "undefined"
            ? -1
            : 1;
        throw "error";
      });

    这里我直接对特殊的字符和内容做了替换,没有进行其他处理
    接下来观察最后的调用函数
    图片.png
    a是我们的数组
    而t存在则传e,不存在则是c.e的默认字符
    我们观察一下u
    图片.png

                var n = "";
                n += t;
                for (var i = 0; i < e.length; i++)
                    n = n + e[i].key + e[i].value;

    这里首先n+t字符串,然后把所有的key和value做了一个累加
    紧接着调用了return 函数
    他的return函数是一个函数嵌套函数嵌套函数的情况
    这种我推荐分而治之
    就是根据路径逐渐拆开第一个函数
    第二个函数
    第三个函数
    第四个函数
    图片.png
    然后把代码贴进去,缺什么补什么,然后继续反复测试
    没事打印一下结果
    确保内容和代码跑的一致即可
    最后跑通了sign
    根据测试与app一致
    图片.png
    app结果
    图片.png
    那么我们就基本实现sign解密了

    结语

    撒花~

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    开心
    2022-7-24 10:18
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    25

    主题

    119

    帖子

    219

    积分

    高级工程师

    Rank: 6Rank: 6

    积分
    219

    猫咪币纪念章活跃会员中秋纪念章国庆纪念章

    发表于 2022-4-18 09:48:21 | 显示全部楼层
    ggnb!!!每日学习
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 57 天

    [LV.5]常住居民I

    354

    主题

    3128

    帖子

    3129

    积分

    管理员

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    3129

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

    发表于 2022-4-18 10:44:59 | 显示全部楼层
    雯 发表于 2022-4-18 09:48
    ggnb!!!每日学习

    哥哥牛逼!
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:04
  • 签到天数: 167 天

    [LV.7]常住居民III

    25

    主题

    647

    帖子

    6280

    积分

    荣誉开发者

    精通各种语言的HelloWord!

    Rank: 10Rank: 10Rank: 10

    积分
    6280

    猫咪币纪念章活跃会员三好学生热心会员中秋纪念章国庆纪念章荣誉开发者家财万贯

    发表于 2022-4-18 11:04:19 | 显示全部楼层
    跟着道总混,三天搞死一个app
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 57 天

    [LV.5]常住居民I

    354

    主题

    3128

    帖子

    3129

    积分

    管理员

    非物质文化遗产社会摇传承人

    Rank: 10Rank: 10Rank: 10

    积分
    3129

    猫咪币纪念章国庆纪念章中秋纪念章荣誉开发者家财万贯管理员

    发表于 2022-4-18 11:34:47 | 显示全部楼层
    Ne-21 发表于 2022-4-18 11:04
    跟着道总混,三天搞死一个app

    主要大部分的app的加解密做的比较简单
    只是正向开发麻烦
    逆向的难度其实还好
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    30

    主题

    207

    帖子

    207

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    207

    荣誉开发者

    发表于 2022-5-8 11:25:27 | 显示全部楼层
    ggnbggnbggnp
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表