• 周五. 4月 26th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

js逆向8+9-浏览器指纹和node指纹,webpack,jsdom—基础结束,下面是进阶

admin

11月 28, 2021

###

这种逻辑判断,运算符的基础知识,也会出现在代js混淆里,要看的懂,

### 

 扣代码和补环境,有什么区别?

其实扣代码的时候,也有补环境的操作,为什么能分成两个分支,

首先就是两者的占比不同,扣代码大部分都是拿别人的代码,实在运行不下去,才会补一点环境,

而补环境,是大部分都是自己写,

####

怎么找函数入口?

js的三种,cookie,header,参数,

怎么找入口,

cookie还可以hookcookie去找,

header和参数,就要看到请求的地方,可以断点调试XHR,看看他发起请求的地方在哪一个地方构造的请求头和参数,然后一步一步去找,

###

按照现在的讲的水平,

把所有的内容掌握了,耐心搞一个二线以下的产品,没有什么问题,

关于大厂的产品,还是不容易的,

不要直接问人家大厂的产品怎么搞,拿一个完整的方案,这是违法的,

###

 ###

 ###

###

什么是浏览器的指纹?

就是浏览器的api,这些在浏览器调用才可以,不然会调用失败,这就是浏览器指纹,这是安全厂商造出来的词,之前都没有这个说法,

补环境的时候,会遇到校验浏览器指纹,就要有这个意识,

window就是一个浏览器的api,比如获取浏览器的高宽,这些就是天生的可以作为指纹的,

document,

###

这就是补环境的思路,遇到了就按照这个思路去补环境,

###

当然你牛逼的话,也可以虚拟出来一个dom,就是无论他调什么方法,你都能获取到对应的方法,

但是这个是一个大项目,不好弄,不是一个人弄的,要好几个人,

###

navigate,也是浏览器指纹,这也是非常常用的浏览器指纹,

但是补环境也好补,就是用一个简单的对象就可以了,

navigate = { }

###

和dom相关的内容,和节点相关的操作,都不好补环境,

就是往上跟,看这个dom操作究竟是做了什么,就是把他实际的结果,直接拿过来用就行了,

这就是直接把结果拿过来,

否则就是补环境的成本太高了,

##

补环境,还有有难度的,你要知道js的基础知识,jQuery,还是es6的语法也要知道,就像之前说的,逆向的能力,取决于你正向的能力,

###

###

node指纹就是看你是不是node环境,

1,在浏览器里面,window是全局变量,而node里是global,

2,导包引擎,这个在浏览器是没有的,但是很危险,原因就是可以直接操作你的电脑,还是在你不知情的情况下,

这一段代码,就能直接让你的电脑重启,如果混淆过之后,你拿过来,在你电脑执行,就会很危险,你不知道他干了什么

######################## 

第三个,可被重写的全局,什么意思,比如浏览器里面是不能删除window的,但是node里面可以

 

这个window在浏览器删除不了,但是在node就可以被删除,

###

你在node里面是没有dom这个概念的,你看不到这个dom树,

###

比如你遇到了dom节点操作你怎么补环境?我们不可能把当前网站虚拟化一个dom节点出来,所以你怎么补?

 这个就是补节点操作的思路,

就是把结果拿出来,让他不报错,使用的对象的思维,

我看是有整理过几百个实战的网站,这个要拿到

 

 ####

案例,比赛的第16题,

通过这个方式,把这个控制台调试过掉,

开始判断他的加密位置,

第一步,看cookie,

注意cookie里面的hm开头的,都不用管,那是百度统计的,也没有其他加密的参数,

第二步,看header头,也都是熟悉的东西,也不用管,

第三步,看参数,看到一个m,一个t,这就是加密的东西,

第四步,重放攻击,发现重放失败了,所以必须要找到这个加密,才可以进行,否则就不用管它了,

第五步,开始找这个m参数的函数入口,开始破解,

破解加密参数

第一步,分析,这个是一个json数据,所以应该是一个XHR过来的, 而且在network,里面找XHR也是可以看到的,

第二步,打一个全局的XHR断点,然后,翻页,会断点住,就是发送XHR请求的地方,使用的jQuery,

第三步,然后开始先上一层一层的找堆栈,

 我们发现在上一步,参数就已经生成了,就要再往上找,

找到lwebpack里面,有一个r.m这个就是加密的地方,

第四步,放开XHR断点,在加密的地方增加一个断点,刷新页面,

第五步,这个入口找到了,就完全的可以,100%可以通过扣代码的方式搞定这个了,

你会发现这个btoa是通过改动了的,不是原生的,

没关系,就找他改动过的这个btoa,拿过来,

注意找的时候可以通过sojson网站,可以把这个js去除格式化,https://www.sojson.com/

第六步,按照这个扣代码的流程,按理说是没有问题的,但是实际运行就是不行,

这是为什么?

就是只有一个可能,就是投毒了,

怎么办?

1,try catch

2,if else

3,|| &&

这三点就是我们排查的手段,还可以插桩调试,

至于有一个成熟的方法论去解决这个投毒的事情,没有,这个是一个经验的事情,只有多扣代码,你就会遇到这种情况,

这个题就是把window对象在一个地方置空了,

这个是一个很墨迹的事情,可能需要几天的时间,可能会有更好的方法解决,但是我不行,我不知道,

###

webpack就是前端的一个打包 工具,

 ###

 案例,比赛第10题,

我实际上这个插桩没理解,

###

https://segmentfault.com/a/1190000014844043中文文档,

 ####

这个jsdom怎么用?

###

上面我们说node里面没有dom,

而这个jsdom就可以虚拟出来dom,这样我们扣代码和补环境就容易多了

案例,比赛第2题,

我们直接可以把js文件拿过来,把url拿过来,就可以渲染出来dom树,就可以解析js文件,直接能解密,

// 导入jsdom
jsdom = require('jsdom')
// 生成jsdom对象
const {JSDOM} = jsdom;
// 倒入读写js的包
const fs = require('fs')
// 对1.html进行对去操作
fs.readFile('./1.html', 'utf8', function (err, data) {
    //定制jsdom,data一般是js代码,由于安全策略的原因导致无法自动加载script标签
    //需要开启安全策略的开关,runScripts: "dangerously"
    //js代码直接写入会报错。所以一般在本地新建个html文件,像刚刚的1。html,然后用fs.readFile进行读取操作
    const dom = new JSDOM(data
        ,
        {
            url: "http://match.yuanrenxue.com/match/2",
            referrer: "http://match.yuanrenxue.com/match/2",
            contentType: "text/html",
            userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
            includeNodeLocations: true,
            runScripts: "dangerously",
        }
        )
    console.log(dom.window.document.cookie);

    dom.window.close()
})

####

高级用法:

// 导入jsdom
const  jsdom = require('jsdom')
// 生成jsdom对象
const { JSDOM } = jsdom;
// 倒入读写js的包
const fs = require('fs')

options={
            url: "http://match.yuanrenxue.com/match/2",
            referrer: "http://match.yuanrenxue.com/match/2",
            contentType: "text/html",
            userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36",
            includeNodeLocations: true,
            runScripts: 'dangerously',

            cookieJar:new jsdom.CookieJar(),
            beforeParse(window) {
                window.alert();
                window.setInterval = function (s, b) {
                    eval(s)
                }
                //重写之后进行伪装
                window.setInterval.toString = function () {
                    "function setInterval() { [native code] }"
                }
                window.setTimeout = function (s, b) {
                    eval(s)
                }
                window.setTimeout.toString = function () {
                    "function setTimeout() { [native code] }"
                }
            },

        }
// 提前植入setcookie的操作
options.cookieJar.setCookie(cookie,url,function(val){})
// 对1.html进行对去操作
fs.readFile('./1.html', 'utf8', function (err, data) {
    //定制jsdom,data一般是js代码,由于安全策略的原因导致无法自动加载script标签
    //需要开启安全策略的开关,runScripts: "dangerously"
    //js代码直接写入会报错。所以一般在本地新建个html文件,像刚刚的1。html,然后用fs.readFile进行读取操作
    const dom = new JSDOM(data
        ,
        options
    )
    console.log(dom.window.document.cookie);
    //将dom窗口关闭
    dom.window.close()
})

###

更高级的用法去看文档,

###

jsdom的缺点:

最明显的就是暂用性能过高, 有时候并发上不去,到了选无可选的时候才会使用这个,

####

到现在,基础课程都结束了,下面就是进阶

####

#####

《js逆向8+9-浏览器指纹和node指纹,webpack,jsdom—基础结束,下面是进阶》有2个想法
  1. It is very difficult to read other people’s e-mails on the computer without knowing the password. But even though Gmail has high security, people know how to secretly hack into Gmail account. We will share some articles about cracking Gmail, hacking any Gmail account secretly without knowing a word.

发表回复

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