Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >gojoy参数的生成过程,反调试,以及混淆js

gojoy参数的生成过程,反调试,以及混淆js

作者头像
懒py夏洛
发布于 2022-06-01 12:23:37
发布于 2022-06-01 12:23:37
46300
代码可运行
举报
运行总次数:0
代码可运行
该文章主要提供交流学习使用,请勿利用其进行不当行为!

如本篇文章侵犯了贵公司的隐私,请联系我立刻删除!

今天分享一下gojoy的登陆产生的参数是如何形成的。

这里感谢 ttdd666 分享的参数生成过程。

好了,进入正题,这里我们全方位进行讲解。

这里我们打开https://passport.gojoy.com/login,进行登陆,打开f12开发者工具,我们会看到这个。有个debugger,自动进入调试。

这里我们在debugger处,打上断点,右键选择Edit Breakpoint ,然后输入false,点击下一步就行了,断点会自动断下来。

然后我们输入账号密码,开始抓包,post提交的参数如下,一串数字加字母的组合,不知道什么东西,而且我们经常见的参数名也没有了,这怎么找参数呢。

不要慌,问题不大,慌也没用撒。我们看这里,就会发现很多js参数。这里提醒一下,并不是所有都是这样找的,这个只是方便点。

我们点进去第一个js。然后格式化,在此处打上断点,如下,我们就会发现参数l,就是我们要找的参数。

但是这里我们就是想明白,这个l已经是加密过后的参数了,那我们就得往前翻,找到没被加密之前的事如何传参的。我们继续往后找。

然后发现在这里,我们下上断点,然后运行,会发现,post,mobile,等,看着是不是很熟悉。然后我们看到s就是我们的账号密码,此处,还没有加密,那我们就执行下一步,,这里执行下一步,我们要小心点,用心看,别执行那么快。

大约执行10次左右,我们发现,Q函数里面,有我们的账号密码。

那我们看一下,Q函数携带上账号密码,是不是我们要的结果。

此处我们进入Q函数,然后发现,我们进入的怎么使s函数。当时我也是一阵迷茫,这是啥情况呢,然后慢慢发现,这里有一行代码,我们调用s函数,实际上就是Q函数。

此处我们看代码发现,这是个大列表,,别表里面有五六个函数,然后相互调用。那我们先把代码抠出来。就是这个大列表,我们放入VScode里面,因为我们要进行调试。里面有很多坑,需要我们进行调试。

然后我们发现,代码里面竟然有debugger,我敲,神了,那我们就看看代码哪里有debugger。

我们通过断点发现,这就是debugger。我敲。真的是。。。。。。

既然发现了,我们得把他删除掉,影响我们代码运行,然后我们又发现,这是一段for循环的代码,但是 i < 后面的东西应该是个数字,这么一长串是什么东西呢。

我们把后面的复制出来,然后特喵的,发现这么一长段,竟然是个0。我就想问问他们程序员这么无聊的吗,无力吐槽。

那我们就把代码删掉,因为里面有debug程序,而且我们也知道结果是什么了。

我们继续调试。然后发现还有一个又出来一个debug,,,,,,,,,,,,和上面的一样,替换成0就行了。

然后接着运行,然后又有一个debug,我吐吐血,我。我。我。。。。。。

这个地方删除这个函数就行了。如下。

然后发现程序可以运行了,我们,打印一下输出的东西。

然后就会输出结果,这个就是生成过程,但是如果用python调用的话还是会报错的。我们下面更改一下。

python调用js如下。

这里我们用v8模块运行js,会发现报错了,我们查看一下,发现,这是错误抛异常的代码,不管里面哪个代码错了,都会跑出来异常。

那我们就先把try捕获异常去掉,看看是哪个代码报错了。然后发现是这行代码,那我们知道哪行代码错了,我们就开始进行调试。

经过调试发现,this.b就是atob,,而atob是js里面base64的方法,atob,btoa,解码,和编码。具体可搜索base64.js。

这里我们用base64.decode和encode代替一下。复制原生的js代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Base64 = {
    _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    encode: function(e) {
        var t = "";
        var n, r, i, s, o, u, a;
        var f = 0;
        e = Base64._utf8_encode(e);
        while (f < e.length) {
            n = e.charCodeAt(f++);
            r = e.charCodeAt(f++);
            i = e.charCodeAt(f++);
            s = n >> 2;
            o = (n & 3) << 4 | r >> 4;
            u = (r & 15) << 2 | i >> 6;
            a = i & 63;
            if (isNaN(r)) {
                u = a = 64
            } else if (isNaN(i)) {
                a = 64
            }
            t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
        }
        return t
    },
    decode: function(e) {
        var t = "";
        var n, r, i;
        var s, o, u, a;
        var f = 0;
        e = e.replace(/[^A-Za-z0-9+/=]/g, "");
        while (f < e.length) {
            s = this._keyStr.indexOf(e.charAt(f++));
            o = this._keyStr.indexOf(e.charAt(f++));
            u = this._keyStr.indexOf(e.charAt(f++));
            a = this._keyStr.indexOf(e.charAt(f++));
            n = s << 2 | o >> 4;
            r = (o & 15) << 4 | u >> 2;
            i = (u & 3) << 6 | a;
            t = t + String.fromCharCode(n);
            if (u != 64) {
                t = t + String.fromCharCode(r)
            }
            if (a != 64) {
                t = t + String.fromCharCode(i)
            }
        }
        t = Base64._utf8_decode(t);
        return t
    },
    _utf8_encode: function(e) {
        e = e.replace(/rn/g, "n");
        var t = "";
        for (var n = 0; n < e.length; n++) {
            var r = e.charCodeAt(n);
            if (r < 128) {
                t += String.fromCharCode(r)
            } else if (r > 127 && r < 2048) {
                t += String.fromCharCode(r >> 6 | 192);
                t += String.fromCharCode(r & 63 | 128)
            } else {
                t += String.fromCharCode(r >> 12 | 224);
                t += String.fromCharCode(r >> 6 & 63 | 128);
                t += String.fromCharCode(r & 63 | 128)
            }
        }
        return t
    },
    _utf8_decode: function(e) {
        var t = "";
        var n = 0;
        var r = c1 = c2 = 0;
        while (n < e.length) {
            r = e.charCodeAt(n);
            if (r < 128) {
                t += String.fromCharCode(r);
                n++
            } else if (r > 191 && r < 224) {
                c2 = e.charCodeAt(n + 1);
                t += String.fromCharCode((r & 31) << 6 | c2 & 63);
                n += 2
            } else {
                c2 = e.charCodeAt(n + 1);
                c3 = e.charCodeAt(n + 2);
                t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
                n += 3
            }
        }
        return t
    }

}

这里我们修改为..如下。

然后运行,如下。

用python调用。

今天的分享到此结束,谢谢大家阅读此文章,下篇文章见撒!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python爬虫与js逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现
本文仅仅介绍了常见的一些JS加密,并记录了JS和Python的实现方式 常见的加密算法基本分为这几类: (1)base64编码伪加密 (2)线性散列算法(签名算法)MD5 (3)安全哈希算法 SHAI (4)散列消息鉴别码 HMAC (5)对称性加密算法 AES,DES (6)非对称性加密算法 RSA
EXI-小洲
2022/12/13
4.1K0
JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
写前端的时候,很多的时候是避免不了注册这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发送到后端,完成一个简单的注册的流程,那么一般来说,密码是不做加密的。但是也有一些数据库里面存放的是加密后的密码,这样有一个比较安全的地方在于,即使黑客将用户输入的文本密码得到了,也不知道具体是什么,因为密码是经过加密的。
何处锦绣不灰堆
2020/05/29
15.1K0
js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
js混淆与反混淆
由于设计原因,前端的js代码是可以在浏览器访问到的,那么因为需要让代码不被分析和复制从而导致更多安全问题,所以我们要对js代码进行混淆。
ek1ng
2023/03/08
12.1K0
js混淆与反混淆
webmsxyw x-s分析
后面可能会全参校验,比如再加上gid、deviceId、profileData、x-s-common、smidV2之类。
李玺
2023/05/23
1.7K1
webmsxyw x-s分析
【JS 逆向百例】PEDATA 加密资讯以及 zlib.gunzipSync() 的应用
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
K哥爬虫
2022/01/06
7920
【JS 逆向百例】PEDATA 加密资讯以及 zlib.gunzipSync() 的应用
实现 Base64 的编码解码
Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。由A-Z(26),a-z(26),0-9(10),加+,/,=(3) 其实是 65 个字符(注:等号 = 用来作为后缀用途),如下所示
小皮咖
2020/10/16
1.9K0
实现 Base64 的编码解码
斗智斗勇的反爬取实践
JSON - https://www.cnblogs.com/lanston1/p/11024147.html
全栈工程师修炼指南
2022/09/28
4500
斗智斗勇的反爬取实践
反反爬虫系列(一)
笔者决定写一个系列反反爬虫,目的是站在生产角度如何绕过各类网站的反爬虫,提供反反爬虫思路。
小歪
2019/03/07
1.2K0
AJAX通讯加密[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133827.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/26
1.1K0
AJAX通讯加密[通俗易懂]
今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密
今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密 首先给大家介绍一下Java中的Base64加密,其实Base64不是真正的加密,只是对字符串进行编码解码而已。主要作
林老师带你学编程
2018/01/04
3.3K0
今天给大家介绍一下SpringBoot框架中URL参数如何进行Base64加密解密
Js逆向-猿人学(1)源码混淆
题目链接:http://match.yuanrenxue.com/match/1
李玺
2021/11/22
6220
Js逆向-猿人学(1)源码混淆
运营商劫持狠起来,连json都改
运营商劫持,是常见的流氓手段,它们老少通吃,连孩子都不放过,经常嚣张的在右下角或者网页头尾,弹出一些羞羞的广告。这让正在辅导孩子功课的妈妈,很难解释。
xjjdog
2019/10/30
6390
运营商劫持狠起来,连json都改
通过小实例讲解 base64 原理
**字符串转base64的转码规则:第一步,将每三个字节作为一组,一共是24个二进制位。第二步,将这24个二进制位分为四组,每个组有6个二进制位。第三步,在每组前面加两个00,扩展成32个二进制位,即四个字节。第四步,根据上表,得到扩展后的每个字节的对应符号,这就是Base64的编码值。
wade
2021/05/28
8860
通过小实例讲解 base64 原理
url怎么传数组
其实很简单,前端转换成JSON进行一次Base64加密,后端进行一次Base64解密再从json转换成对象就可以
阿超
2022/08/16
1.7K0
url怎么传数组
base64js typescript代码改写
将市面上的base64方法改写为typescript类 需要的拿走不谢 export class Base64 { // private property private _keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; // public method for encoding encode(input) { let output = ''; let chr1
lilugirl
2019/07/02
1.2K0
不能Hook的人生不值得 jsHook和模拟执行
李老板: 奋飞呀,上次分析的那个App http://91fans.com.cn/post/bankdataone/ 光能Debug还不够呀, 网页中的js也用不了Frida,我还想 Hook它的函数 ,咋搞呀? 再有App可以RPC去执行签名,这个js我如何去利用呀?总不能代码都改成js去做请求吧?
奋飞安全
2022/02/28
1.5K0
极电竞比分网(js逆向,webpack)「建议收藏」
目标网站:https://www.jdj007.com/ 目标参数:sign
全栈程序员站长
2022/07/22
3150
极电竞比分网(js逆向,webpack)「建议收藏」
Python 爬虫进阶必备 | 某爬虫练习站之 js 混淆
aHR0cDovL21hdGNoLnl1YW5yZW54dWUuY29tL21hdGNoLzE=
咸鱼学Python
2021/03/17
7940
Python 爬虫进阶必备 | 某爬虫练习站之 js 混淆
记对百度翻译的一次爬虫练习
最近简单学习了一下 requests 这个模块,一直没有亲自实战一下,然后就有了这次的实战练习
pankas
2022/08/10
4150
记对百度翻译的一次爬虫练习
【JS 逆向百例】百度翻译接口参数逆向
JS逆向百例_快代理logo.png 逆向目标 目标:百度翻译接口参数 主页:https://fanyi.youdao.com/ 接口:https://fanyi.baidu.com/v2transapi 逆向参数: Form Data: sign: 706553.926920 token: d838e2bd3d5a3bb67100a7b789463022 逆向过程 抓包分析 我们在百度翻译页面随便输入文字,可以看到没有刷新页面,翻译结果就出来了,由此可以推断是 Ajax 加载的,打开开发者工具,选择 X
K哥爬虫
2021/08/05
1.4K0
【JS 逆向百例】百度翻译接口参数逆向
推荐阅读
相关推荐
JS常见加密 AES、DES、RSA、MD5、SHAI、HMAC、Base64(编码) - Python/JS实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验