forked from cilame/v_jstools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.html
290 lines (283 loc) · 18.8 KB
/
options.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
<!DOCTYPE html>
<html>
<head>
<title>配置页面</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
.act{
background-color: #cbaeae;
}
</style>
</head>
<body>
<nav id="nav">
<ul>
<button class="act">dom对象 hook 配置</button>
<button>注入代码</button>
<button>修改代理/返回值</button>
<button>AST混淆解密</button>
<button>代码模板(RPC...)</button>
<button>混淆器</button>
</ul>
</nav>
<div id="container">
<section class="tab">
<div>
<label ><input type="checkbox" data-key="config-hook-global">是否挂钩总开关</label>
<label id='debug_hook' style="color: #FFEEEE">cilame</label>
<br/>
<!-- <label ><input type="checkbox" data-key="config-hook-alt-w">启动 alt + w 快捷键(快捷键开启/关闭日志,当前焦点需在网页上才有效)</label>
<br/> -->
<!-- <label ><input type="checkbox" data-key="config-hook-console">hook-console(使用 v_log 替换 console.log 并将 console 的属性都设置为空函数)</label>
<br/> -->
<label ><input type="checkbox" data-key="config-hook-Function">hook-Function</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-eval">hook-eval(eval函数会记录上下文,若 eval 用到封闭的上下文参数可能报错)</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-remove-dyn-debugger">remove-dyn-debugger(need selected "hook-Function" or "hook-eval")</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-settimeout">hook-settimeout</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-setinterval">hook-setinterval</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-random">是否启用启用下面四种调试功能(用于固定随机性,便于对比调试)</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-random-freeze">config-hook-random(让 random 函数固定返回 0.5)</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-random-fake">config-hook-random(让 random 变成伪随机函数。如果已经配置了该伪随机,则会覆盖上面的 0.5)</label>
<br/>
<label style="margin-left: 20px">
<input type="checkbox" data-key="config-hook-time-freeze">config-hook-time(时间函数返回的值固定成一个数字)
<input style="width: 150px; height: 12px" type="text" data-key="config-hook-time-freeze-number" id="show_now">
<button style="padding: 0px; height: 20px" id="get_now">获取当前时间戳用于固定时间 (注意!!!由于固定时间可能会影响到cookie设置,所以请生成一个当前时间戳再行使用)</button>
</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-time-performance">config-hook-performance-now(这个时间函数返回的值固定成一个数字)</label>
<br/>
<div style="border: 1px solid red; margin: 1px">
<div style="margin: 1px; color: red">
此处的两个配置会影响后面的全部挂钩操作
</div>
<div style="margin: 1px">
<label >通过正则匹配URL实现日志输出仅针对你关心的js文件</label>
</div>
<div style="margin: 1px">
<input style="width: 98%" type="text" data-key="config-hook-regexp-url">
</div>
<div style="margin: 1px">
<label >设置每个接口的请求数量,防止无限打印输出的情况(不配置默认为30)</label>
</div>
<div style="margin: 1px">
<input style="width: 98%" type="text" data-key="config-hook-log-limit-num">
</div>
</div>
<label ><input type="checkbox" data-key="config-hook-log-at">是否在调试输出时,输出函数触发的地址</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-cookie">是否对 cookie 进行挂钩调试输出</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-cookie-add-debugger">hook-cookie-add-debugger</label> <input style="width: 150px; height: 12px; margin-top: 3px" type="text" data-key="config-hook-cookie-match" id="cookie_match"><label style="margin-left: 10px;">对匹配字符串的cookie才下断(不设置则为全部都下断)</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-cookie-get">hook-cookie-get</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-cookie-set">hook-cookie-set</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-encrypt-normal">是否启用下面几个加解密函数挂钩输出功能</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-JSON.parse">hook-JSON.parse</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-JSON.stringify">hook-JSON.stringify</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-decodeURI">hook-decodeURI</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-decodeURIComponent">hook-decodeURIComponent</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-encodeURI">hook-encodeURI</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-encodeURIComponent">hook-encodeURIComponent</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-escape">hook-escape</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-unescape">hook-unescape</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-atob">hook-atob</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-btoa">hook-btoa</label>
<br/>
<label ><input type="checkbox" data-key="config-hook-domobj">是否启用挂钩 DOM 对象的原型的功能调试输出</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-domobj-get">hook-domobj-显示get输出</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-domobj-set">hook-domobj-显示set输出</label>
<br/>
<label style="margin-left: 20px"><input type="checkbox" data-key="config-hook-domobj-func">hook-domobj-显示func输出</label>
<br/>
</div>
<HR>
<div>左侧两列为常用挂钩,建议常开</div>
<HR>
<div id="getsets_0" style="float: left; width: 300px"></div>
<div id="funcs_0" style="float: left; width: 300px"></div>
<div id="getsets_1" style="float: left"></div>
<div id="funcs_1" style="float: left"></div>
</section>
<section class="tab">
<label ><input type="checkbox" data-key="config-myinject_toggle">是否注入代码开关(独立开关,是否挂钩总开关不影响此处)</label>
<HR>
<textarea id='myinject' data-key="config-myinject" style="width: 100%; height: 500px"></textarea>
<br/>
<br/>
<button id='add_script_in_all_document'>调试注入</button>
<HR>
<div>点击注入后,会自动打开调试模式,并且对每个页面的 “刷新过程” 注入执行的代码。(关闭调式模式自动取消注入)</div>
<div>注意!!!如果需要让修改后的代码生效需要关闭调试模式,然后重新点击 “调试注入” 。</div>
<HR>
<textarea id='myinject_2' data-key="config-myinject_2" style="width: 100%; height: 500px"></textarea>
<br/>
<!-- <div>修改代理:<input type="text" data-key="config-proxy_config" id="proxy_config"></div> -->
</section>
<section class="tab">
<h2 style="margin-bottom: 0px;margin-top: 50px;">pac代理地址</h2>
<label ><input type="checkbox" data-key="config-pac_proxy">是否打开返回值替换开关</label>
<hr>
<textarea id='proxy_config' data-key="config-proxy_config" style="width: 100%; height: 200px"></textarea>
<h2 style="margin-bottom: 0px;margin-top: 50px;">修改匹配URL的返回值</h2>
<label ><input type="checkbox" data-key="config-replacer_toggle">是否打开返回值替换开关</label>
<hr>
<div>适用的本地文件后缀:txt,html,htm,css,js,json,xml,jpg,gif,png,webp</div>
<table id="response_changer"></table>
<h2 style="margin-bottom: 0px;margin-top: 50px;">动态修改请求包</h2>
<button id="default_code_dyn_change_request">默认代码模板</button>
<hr>
<textarea id='request_hook' data-key="config-request_hook" style="width: 100%; height: 500px"></textarea>
<h2 style="margin-bottom: 0px;margin-top: 50px;">动态修改被调试页面的所有js代码</h2>
<hr>
<div>这里的功能:在目标网页上右键菜单选择 “打开 ast 动态挂钩” 即可开启,使用用插件的方式 hook 住目标页面的所有代码,像是在 node 里面一样使用 ast 将原始的代码修改成期望的样子</div>
<div>这里的 hook 功能在一定的扩展之后,能 hook 住 script 链接中的 js 代码,也能 hook 到 html 内的 js 代码。</div>
<div>*能直接用插件的方式实现 ast 修改代码,用处还是非常大的。不过目前感觉功能稍微有点干瘪,因为暂时还在想有什么 ast 修改模板代码会更好的捕捉代码信息,让代码更方便的调试。</div>
<HR>
<div>请定义一个名字为 fetch_hook 函数,接受参数为 1.代码 2.url,return 修改后的代码</div>
<div>在代码里面你可以直接使用四个对象,你可以像是在 node 里面一样用这四个对象操作和修改 ast 的结构并重新生成新的代码。对象如下:</div>
<div>parser = require("@babel/parser");</div>
<div>traverse = require("@babel/traverse").default;</div>
<div>t = require("@babel/types");</div>
<div>generator = require("@babel/generator").default;</div>
<HR>
<div>你可以实现挂钩修改所有的 script 代码,所有 script 代码都会被下面的函数挂钩,你可以使用 ast 清除掉里面所有的 debugger。</div>
<div>一个使用 ast 删除代码中的 debugger 的代码示例,代码如下:</div>
<div>function fetch_hook(code, url){</div>
<div> function removedebugger(path){</div>
<div> path.replaceWith(t.identifier("/*debugger*/"))</div>
<div> }</div>
<div> var ast = parser.parse(code);</div>
<div> traverse(ast, {DebuggerStatement: removedebugger});</div>
<div> var { code } = generator(ast, { jsescOption: { minimal: true, } });</div>
<div> return code</div>
<div>}</div>
<HR>
<div>code:</div>
<textarea id='fetch_hook' data-key="config-fetch_hook" style="width: 100%; height: 500px"></textarea>
</section>
<section class="tab">
<button id='open_ast_page'>打开本地ast页面</button>
<button id='sojson'>解密sojson混淆</button>
<button id='obnormal'>普通解混淆</button>
<button id='ob'>解密ob高级混淆</button>
<button id='jsfuck'>解密jsfuck混淆</button>
<button id='babel_aline'>将代码变成一行,不压缩[babel]</button>
<button id='uglify'>仅变量压缩[uglify-es]</button>
<button id='uglify_mini'>完全压缩脚本[uglify-es]</button>
<button id='terser'>仅变量压缩[terser]</button>
<button id='terser_mini'>完全压缩脚本[terser]</button>
<button id='open_diff_text'>打开文本对比工具</button>
<label id='env' style="color: #FFEEEE">cilame</label>
<br/>
<label ><input type="checkbox" id="clear_not_use" data-key="config-clear_not_use">【解密sojson/普通/ob高级混淆】 尝试清理未被使用到的变量和函数</label>
<br/>
<label ><input type="checkbox" id="clear_ob_extra" data-key="config-clear_ob_extra">【解密sojson/ob高级混淆】 尝试清理ob混淆的反调试代码(有时候清理会存在问题,报错了请尝试取消该选项)</label>
<br/>
<label ><input type="text" id="ob_dec_name">【解密ob高级混淆】 指定解密函数的名字</label>
<br/>
<label>source</label>
<textarea id='txt' style="width: 100%; height: 500px"></textarea>
<label>code</label>
<textarea id='txt2' style="width: 100%; height: 2056px"></textarea>
</section>
<section class="tab">
<div>RPC代码模板使用方式</div>
<div>(1)首先生成的server代码并执行(python和nodejs两种任选其一,建议选node,因为node版本代码已处理成免安装版,且只使用一个端口)</div>
<div>(2)然后用生成的hook代码自行对你需要挂钩的函数处理,在你想要挂钩的为止挂钩</div>
<div>(3)直接访问 <a href='http://127.0.0.1:5000/getinfo?value=test' target="_blank">http://127.0.0.1:5000/getinfo?value=test</a> 测试代码</div>
<button id='websocket_js'>生成server代码(javascript)</button>
<br/>
<button id='websocket_hook'>生成一般hook代码</button>
<br/>
<button id='proxy_js'>生成node代理代码(附加功能代码,不用也不影响功能)</button>
<br/>
<button id='websocket_py'>生成server代码(python,不推荐使用,但是作为备份代码留存)</button>
<br/>
<hr>
<label>code</label>
<textarea id='code_model' style="width: 100%; height: 500px" placeholder="附加功能,拖拽文件到该窗口自动输出base64内容"></textarea>
<label>快速AES加解密</label>
<br/>
<button id='myenc'>加密</button><button id='mydec'>解密</button>
<br/>
<hr>
<input type="password" id="my_secret" placeholder="密码" data-key="config-myenc-data">
<br/>
<hr>
<button id="myinject_enc_0">注入模板代码</button>
<button id="myinject_enc_1">事件分身代码</button>
<button id="myinject_enc_2">简易反调试代码</button>
<button id="myinject_enc_3">捕获请求代码</button>
<button id="myinject_enc_4">canvas分析代码</button>
<!-- <button id="test_get_model_code">测试获取模板代码</button> -->
<br/>
<hr>
<button id="get_code_babel_ast">babel模板代码</button>
<button id="get_code_cryptojs">cryptojs模板代码</button>
<button id="get_code_uglifyjs">uglifyjs模板代码</button>
<button id="get_code_request">request模板代码</button>
<button id="get_code_jsencrypt">jsencrypt(RSA)模板代码</button>
<button id="get_code_cheerio">cheerio模板代码</button>
<button id="get_code_terser">terser模板代码</button>
<button id="get_code_parse5">parse5模板代码</button>
<br/>
<hr>
<label>code</label>
<textarea id='my_code_dec' style="width: 100%; height: 500px" placeholder="附加功能,拖拽文件到该窗口自动输出文本内容"></textarea>
</section>
<section class="tab">
<button id='jsobfuscator_btn'>jsobfuscator混淆</button>
<button id='jsobfuscator_get_config_btn'>获取jsobfuscator配置</button>
<button id='aline_js_btn'>aline_js混淆</button>
<button id='aline_js_get_config_btn'>获取aline_js配置</button>
<hr>
<label>混淆配置</label>
<textarea id='jsobfuscator_config' style="width: 100%; height: 200px"></textarea>
<label>输入混淆代码</label>
<textarea id='jsobfuscator_input' style="width: 100%; height: 300px" placeholder="输入代码"></textarea>
<label>输出混淆代码</label>
<textarea id='jsobfuscator_code' style="width: 100%; height: 500px" placeholder="输出代码"></textarea>
</section>
</div>
<script src="tools/jquery.min.js"></script>
<script src="./tools/common.js"></script>
<script src="./tools/sub_logger.js"></script>
<script src="./tools/_config_hook_list.js"></script>
<script src="options.js"></script>
<script src="tools/model_funcs.js"></script>
<script src="tools/babel_asttool.js"></script>
<script src="tools/uglify_es.js"></script>
<script src="tools/terser.js"></script>
<script src="tools/env_maker.js"></script>
<script src="tools/btn_utils.js"></script>
<script src="tools/js_obfuscator.js"></script>
<script src="tools/aline_js.js"></script>
<script src="tools/cryptojs.js"></script>
<script src="tools/myinject_enc.js"></script>
<script src="tools/mod_code_getter.js"></script>
</body>
</html>