Skip to content

Commit 17181fa

Browse files
authored
Merge pull request #3 from JSREI/feat/delete-event-and-value-change-event-support
feat: add WindowMonitor bypass implement
2 parents edc4fca + fd76daa commit 17181fa

File tree

5 files changed

+371
-81
lines changed

5 files changed

+371
-81
lines changed

Diff for: main.js

-78
This file was deleted.

Diff for: test.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@
55
</head>
66

77
<body>
8-
<script type="text/javascript" src="./main.js"></script>
8+
<script type="text/javascript" src="window-monitor-bypass/main.js"></script>
99
<script>
1010

1111
(async () => {
1212

1313
const monitor = new WindowMonitor();
14-
await monitor.addWindowListener(key => {
14+
await monitor.#addWindowListener(key => {
1515
console.log(new Date(), key);
1616
});
17-
await monitor.startWindowMonitor();
17+
await monitor.#startWindowMonitor();
1818

1919
})();
2020

Diff for: window-monitor-bypass/README.md

+170
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
# javascript逆向开发基础组件: window监听器
2+
3+
# 一、 简介
4+
5+
用于监听`window`上的全局变量的变化,目前支持的事件类型:
6+
7+
- 新增变量
8+
- 删除变量
9+
- 变量的值被修改
10+
11+
最初是为了用在`javascript hook`库中实现对`window`变量的`proxy`功能。
12+
13+
# 二、示例代码
14+
15+
```js
16+
17+
function eventCallback() {
18+
console.log(new Date(), JSON.stringify(arguments));
19+
}
20+
21+
(async () => {
22+
23+
const monitor = new WindowMonitor();
24+
await monitor.addWindowListener(eventCallback);
25+
await monitor.startWindowMonitor();
26+
27+
})();
28+
29+
const chars = "ABCDEFGHJKMNPQRSTWXYZ"
30+
31+
function randomString(length) {
32+
length = length || 100;
33+
const charArray = [];
34+
for (let i = 0; i < length; i++) {
35+
charArray.push(chars.charAt(Math.floor(Math.random() * chars.length)));
36+
}
37+
return charArray.join("");
38+
}
39+
40+
function genGlobalVars() {
41+
const variableName = randomString(2);
42+
const variableValue = randomString(10);
43+
if (Math.random() < 0.3) {
44+
delete window[variableName];
45+
} else {
46+
window[variableName] = variableValue;
47+
}
48+
setTimeout(genGlobalVars, Math.random() * 100)
49+
}
50+
51+
setTimeout(() => {
52+
genGlobalVars();
53+
}, Math.random() * 100)
54+
```
55+
56+
效果大概是这样子的:
57+
58+
```bash
59+
Mon Feb 12 2024 01:21:03 GMT+0800 (中国标准时间) '{"0":"add","1":"FJ","2":"XXHPASGPNM"}'
60+
Mon Feb 12 2024 01:21:03 GMT+0800 (中国标准时间) '{"0":"add","1":"TR","2":"GQRFMERYPC"}'
61+
Mon Feb 12 2024 01:21:03 GMT+0800 (中国标准时间) '{"0":"add","1":"GA","2":"KGKZFMJFPQ"}'
62+
Mon Feb 12 2024 01:21:03 GMT+0800 (中国标准时间) '{"0":"add","1":"DM","2":"DDCHTFFXKC"}'
63+
Mon Feb 12 2024 01:21:03 GMT+0800 (中国标准时间) '{"0":"add","1":"EN","2":"QACZMJQWHS"}'
64+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"YR","2":"DGMXDYJBPK"}'
65+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"FS","2":"CTGYPNZFYM"}'
66+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"WW","2":"DQKTHTYETA"}'
67+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"KR","2":"GHMBFNJMDR"}'
68+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"MM","2":"RHEMJXJSWQ"}'
69+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"WZ","2":"SGMPJZWAGT"}'
70+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"WE","2":"YSAHHBKZHD"}'
71+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"delete","1":"EW","2":"XRZKANRJYK"}'
72+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"GG","2":"CCCKHTDKJM"}'
73+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"FP","2":"EJHFACQNJT"}'
74+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"GM","2":"QSDYMWTZAJ"}'
75+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"CH","2":"WRAETDQZWP"}'
76+
Mon Feb 12 2024 01:21:04 GMT+0800 (中国标准时间) '{"0":"add","1":"DY","2":"WTJRMKMCTX"}'
77+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"value-change","1":"FJ","2":"TPDKFFKHYP","3":"XXHPASGPNM"}'
78+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"XW","2":"BMJETGFMYG"}'
79+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"EW","2":"KRWCHSZDJG"}'
80+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"GK","2":"ZCEJAQTXRF"}'
81+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"QA","2":"XXKFHYGMTE"}'
82+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"SG","2":"CJBAGADFYN"}'
83+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"GJ","2":"XQHWWHBDDC"}'
84+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"JF","2":"YQSSKTFNGY"}'
85+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"MG","2":"EGXQANXHFZ"}'
86+
Mon Feb 12 2024 01:21:05 GMT+0800 (中国标准时间) '{"0":"add","1":"SY","2":"ZXNGRKKQWQ"}'
87+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"FH","2":"MEZHWWYCTW"}'
88+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"HT","2":"TYHNWZTZJP"}'
89+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"JY","2":"JBXCGQNCAE"}'
90+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"value-change","1":"GJ","2":"XMGTXTAGXF","3":"XQHWWHBDDC"}'
91+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"SH","2":"SFPEBHHAMG"}'
92+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"MP","2":"YTWZZYCZJP"}'
93+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"SQ","2":"BNZCCECGMT"}'
94+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"BN","2":"GXFTFYKHQH"}'
95+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"value-change","1":"QA","2":"MSSZRDFSBR","3":"XXKFHYGMTE"}'
96+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"ZP","2":"ZCAPWBWSEZ"}'
97+
Mon Feb 12 2024 01:21:06 GMT+0800 (中国标准时间) '{"0":"add","1":"WN","2":"GZNCTBTQHN"}'
98+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"QP","2":"YSRSPGSCSP"}'
99+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"BB","2":"QQQSPZNEEP"}'
100+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"YD","2":"YQXGXWHECD"}'
101+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"CB","2":"GGWFNKPGDP"}'
102+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"CR","2":"YMZRBKYZPW"}'
103+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"delete","1":"SG","2":"CJBAGADFYN"}'
104+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"delete","1":"JF","2":"YQSSKTFNGY"}'
105+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"value-change","1":"WZ","2":"CANXENXHZT","3":"SGMPJZWAGT"}'
106+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"ZC","2":"GBQCNPRMKT"}'
107+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"RW","2":"PMBSMJNWNF"}'
108+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"PH","2":"BCSKPSRXHN"}'
109+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"value-change","1":"SH","2":"ZFXDQACCXN","3":"SFPEBHHAMG"}'
110+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"CS","2":"PFEKTSZRSC"}'
111+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"QQ","2":"FTWNMGZMQJ"}'
112+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"MW","2":"ZWARCYJXYJ"}'
113+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"BG","2":"NNDQKGWSEW"}'
114+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"FB","2":"WSRGMGAANN"}'
115+
Mon Feb 12 2024 01:21:07 GMT+0800 (中国标准时间) '{"0":"add","1":"ND","2":"CEHRCZHFAZ"}'
116+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"value-change","1":"GM","2":"BHGSSSQQZC","3":"QSDYMWTZAJ"}'
117+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"YK","2":"RTFTKQANRK"}'
118+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"SR","2":"QEXKTYCXTC"}'
119+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"BZ","2":"YZZXJPDPJQ"}'
120+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"HM","2":"EKCRGTBQWF"}'
121+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"value-change","1":"BZ","2":"EAZAJRNNDB","3":"YZZXJPDPJQ"}'
122+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"YJ","2":"YRDFRAHYEQ"}'
123+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"CK","2":"ZCZQHDCWXD"}'
124+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"EC","2":"JKSHFGMQNA"}'
125+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"KF","2":"SDEQJPKBXH"}'
126+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"JN","2":"FSAQKDBDTT"}'
127+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"add","1":"MX","2":"YJNXZNPGCZ"}'
128+
Mon Feb 12 2024 01:21:08 GMT+0800 (中国标准时间) '{"0":"delete","1":"SR","2":"QEXKTYCXTC"}'
129+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"value-change","1":"EW","2":"CQJCQCZASD","3":"KRWCHSZDJG"}'
130+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"PX","2":"ZFKJJGSSKF"}'
131+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"EY","2":"XFBJSTQJDY"}'
132+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"NG","2":"TNRWJWAAEP"}'
133+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"DR","2":"FSNPRPDMYP"}'
134+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"SB","2":"ESZEGWGJCA"}'
135+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"BP","2":"NKGAFNPTPG"}'
136+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"NK","2":"MAQHETWQET"}'
137+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"RH","2":"QSDXRYMWKX"}'
138+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"PQ","2":"HSGNRDKTMJ"}'
139+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"delete","1":"HM","2":"EKCRGTBQWF"}'
140+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"value-change","1":"NG","2":"QPMAYAXGTH","3":"TNRWJWAAEP"}'
141+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"BA","2":"EBNTSBMZNQ"}'
142+
Mon Feb 12 2024 01:21:09 GMT+0800 (中国标准时间) '{"0":"add","1":"JQ","2":"NWFMSATFDH"}'
143+
```
144+
145+
测试用例详见`test.html`文件,或者在线预览效果,点进下面的链接然后打开开发者工具查看:
146+
147+
[https://htmlpreview.github.io/?https://github.com/JSREI/javascript-window-listener-library/blob/main/window-monitor-bypass/test.html](https://htmlpreview.github.io/?https://github.com/JSREI/javascript-window-listener-library/blob/main/window-monitor-bypass/test.html)
148+
149+
# 三、原理
150+
151+
其实原理简单粗暴,就是每隔一段时间遍历`window`对其所有属性做一个快照,然后前后快照做`diff`,就能够找出来新增的变量或者删除的变量,对于第一个快照会认为是初始化,这样就能够把默认的属性给识别出来不触发新增事件。
152+
153+
154+
155+
156+
157+
158+
159+
160+
161+
162+
163+
164+
165+
166+
167+
168+
169+
170+

0 commit comments

Comments
 (0)