V2EX DreamNya
 DreamNya 最近的时间轴更新
DreamNya

DreamNya

V2EX 第 557183 号会员,加入于 2021-09-28 20:51:58 +08:00
DreamNya 最近回复了
2023-08-25 13:49:35 +08:00
回复了 tmtstudio 创建的主题 程序员 大佬们来试试我的前端加密强度
@dtboy
JS 最大特点就是对象和方法的引用可以被改写即使是 JS 原生对象,这就给 hook 带来极大便利了。
针对 hook ,基本上就是不用 JS 原生对象方法,改用一些操作符之类的。

比如
a=Object.assign({b:1},{c:2})可以改写成 a={...b,...c}
a=new Array()可以改写成 a=[]
因为 Object.assign 和 Array 都是全局对象方法能直接访问到并改写,而{}、[]和...都是无法改写的

fuc.call(null,arg)也可以改写成 fuc(arg)



这类几乎无法 hook ,只能通过 override 或者断点的形式去针对了,webpack5 编译出来的源码就用的这种方法然后无处 hook ,而 webpack4 随便 hook
2023-08-25 13:18:32 +08:00
回复了 hsuehly 创建的主题 程序员 各位彭于晏们,最牛逼的纯前端加密,欢迎挑战。
@hsuehliuyang 把你调用加密函数的函数 hook 掉置空,然后等我来调用,伪装成网页正常的调用…… 类似于破解禁止重放攻击
2023-08-25 13:14:17 +08:00
回复了 tmtstudio 创建的主题 程序员 大佬们来试试我的前端加密强度
@dtboy getParam 是逆向发请求的堆栈一步步找到的,没啥诀窍……就是硬破……
Devtools 网络选项卡里面能看到所有请求还有堆栈,在里面打个断点就能调试

所有请求的参数不可能是凭空出现的,一定有一个源头,无论是静态定义还是通过函数动态计算又或者是通过请求响应返回,总有一个出处,通过堆栈一步步找到源头出处就行了,然后针对这个出处进行一些 hook


setInterval 没啥作用域这些花样,this 一般都指向 window ,可以不用 call 或者 apply ,我习惯写的简单一点
const realInterval=window.setInterval;
window.setInterval=(...args)=>{
if(args[0].toString().includes('ondevtoolclose')){
return 99999999 //尽量大 防止被 clearInterval 误伤;或者不写,这种检测定时器一般不会停止
}else{
return realInterval(...args)
}
}
2023-08-25 12:37:22 +08:00
回复了 hsuehly 创建的主题 程序员 各位彭于晏们,最牛逼的纯前端加密,欢迎挑战。
a='test'
b=window.encrypt(a)
c=window.decrypt(b)
a==c

前端破解加密方式和 key 其实没啥用,我直接调用你的接口达成目的就行了,不需要知道你具体是怎么保证正常运行的。
可能一些后端程序缺少环境才需要破你的加密方式(比如自动签到、自动爬虫)。
2023-08-25 12:12:22 +08:00
回复了 tmtstudio 创建的主题 程序员 大佬们来试试我的前端加密强度
@zeroFans
这个代码只关闭检测。
网页屏蔽只能屏蔽按键,但无论如何都无法屏蔽控制台开启,因为这是浏览器权限。
可以通过浏览器右上角菜单强制开启控制台

@dtboy
因为检测控制台都是通过定时器循环去检测的,定时器循环一共就那么几种方式,所以从源头直接把定时器掐断了,就完全不用管具体检测的逻辑了。
如果不通过定时器那检测更容易被绕过了,这是没法克服的硬伤。
偷鸡是因为摆烂了没有判断检测函数特征,一股脑全掐断了,真正网页上线的时候这种方式可能会把其他定时器也误伤。

另外前端加密混淆虽然无法做到 100%安全,总是能被绕过,但是我们可以加大绕过的难度,
换一个角度思考,只要减少被绕过的数量也算一种胜利。
比如:
油猴分发很容易,只要写成脚本形式发到脚本站,其他用户点一下安装一个脚本就能做到傻瓜式全自动绕过。
而 overrides 虽然是绝对无法避免的硬伤,但是操作难度大,光是开启 overrides 、定位代码、修改代码、保存代码就能筛选掉 90%的普通用户(可能还说少了,毫不避讳的说大多数普通用户都是傻子,文字都看不懂更别说操作了)。
根据上述情况就可以针对油猴,做一些针对性防御操作,比如核心函数完全不用对象方法让油猴无处 hook ,从而减少能破解的用户数量,来提高安全性。
当然这种针对性防御首先考验的是开发者代码水平,所有防御都是双刃剑。
2023-08-24 21:32:57 +08:00
回复了 tmtstudio 创建的主题 程序员 大佬们来试试我的前端加密强度
还是油猴脚本 还是全自动牛逼
换一个地方 hook ,比之前代码还要简洁……

```

// ==UserScript==
// @name 全自动牛逼
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.2.0
// @description try to take over the world!
// @author DreamNya
// @match http://34.16.118.34/*
// @grant none
// @run-at document-start
// ==/UserScript==

window.setInterval = () => 1; //偷鸡?
const realAssign = window.Object.assign;
window.Object.assign = function (...args) {
if (args[0].h5Version) {
args[0].text = 'v2ex'
}
return realAssign.call(this, ...args)
};

```

对策就是不要用任何对象方法。
前端就是这样,你防住了一下,不一定能防住下一个,总有地方有机可趁,而且有些漏洞是难以修复的,除非重构整个函数,伤人先伤己。
前端代码都在本地运行,只能通过加密混淆增加难度,从防 50%的人提升到防 90 、95 、99%的人,做不到 100%安全。
增加难度的同时也在考验自己的代码水平,相当于七伤拳了
有没有必要加密混淆填补漏洞,主要看成本与收益
2023-08-24 02:14:21 +08:00
回复了 tmtstudio 创建的主题 程序员 大佬们来试试我的前端加密强度
@DreamNya 漏写了一行 // @grant none
2023-08-24 02:08:05 +08:00
回复了 tmtstudio 创建的主题 程序员 大佬们来试试我的前端加密强度
写了个油猴脚本 全自动牛逼 [


// ==UserScript==
// @name New Userscript
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @description try to take over the world!
// @author DreamNya
// @match http://34.16.118.34/*
// @run-at document-start
// ==/UserScript==

window.setInterval = () => 1; //偷鸡?
//window.Math.max=()=>10000000000000;
localStorage.setItem = new Proxy(localStorage.setItem, {
apply: function (target, thisArg, argumentsList) {
console.log(argumentsList)
//debugger
return Reflect.apply(target, thisArg, argumentsList)
},
});
const realSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function (...args) {
const realGet = document.querySelector("body > uni-app").__vue__.$children[0].$children[0].$children[0].$children[1].$children[0].getParams;
document.querySelector("body > uni-app").__vue__.$children[0].$children[0].$children[0].$children[1].$children[0].getParams = function (...args_) {
args_[0].text = 'v2ex'
return realGet.call(this, ...args_)
}
XMLHttpRequest.prototype.send = realSend
return realSend.call(this, ...args)
}
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2692 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 11ms UTC 07:54 PVG 15:54 LAX 00:54 JFK 03:54
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86