Hook技术:
背景:
在js逆向的过程种,当我们遇到加密参数,可以使用关键字全局搜素,跟栈,还有一种就是hook技术。跟栈就是比较麻烦,需要我们一个个找,hook技术就比较厉害了,可以直接帮我定位加密参数的位置。
网站:
import base64
# # 解码
result = base64.b64decode('aHR0cHM6Ly9sb2dpbjEuc2NyYXBlLmNlbnRlci8='.encode('utf-8'))
print(result)
基础知识:
目前市面上主要使用 Tampermonkey插件,我们可以自己写一个插件就可以定位到相应的位置
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://*/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
})();
大家到时候需要改的是两个位置,第一个是 @match 这个是脚本生效的位置,第二个是脚本代码(即 // Your code here… )
为什么这个表单没有出现 用户名 和 密码等表单数据,因为他将密码和用户名打包了,然后进行魔种加密了,我们 需要分析这个token是如何生成的。
注意看上面的token 应该是被base64了,因为 只出现了大小写和数字,下面给出base64编码表:
Base64 编码表
码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 | |||
---|---|---|---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w | |||
1 | B | 17 | R | 33 | h | 49 | x | |||
2 | C | 18 | S | 34 | i | 50 | y | |||
3 | D | 19 | T | 35 | j | 51 | z | |||
4 | E | 20 | U | 36 | k | 52 | 0 | |||
5 | F | 21 | V | 37 | l | 53 | 1 | |||
6 | G | 22 | W | 38 | m | 54 | 2 | |||
7 | H | 23 | X | 39 | n | 55 | 3 | |||
8 | I | 24 | Y | 40 | o | 56 | 4 | |||
9 | J | 25 | Z | 41 | p | 57 | 5 | |||
10 | K | 26 | a | 42 | q | 58 | 6 | |||
11 | L | 27 | b | 43 | r | 59 | 7 | |||
12 | M | 28 | c | 44 | s | 60 | 8 | |||
13 | N | 29 | d | 45 | t | 61 | 9 | |||
14 | O | 30 | e | 46 | u | 62 | + | |||
15 | P | 31 | f | 47 | v | 63 | / |
我们会发现 编码后的数据可以包含 A-Z、a-z、0-9 和两个额外字符的任意组合。
然后在js种base64一般是通过 btoa函数进行实现的,而且我们的用户名和密码也不能出现中文
脚本代码
(function() {
'use strict';
function hook(object, attr){
var func = object[attr]
object[attr] = function(){
console.log('hooked', object, attr)
var ret = func.apply(object, arguments)
debugger
return ret
}
}
hook(window, 'btoa')
})();
这个脚本是传入两个参数,第一个是一个对象 ,第二个是函数名 即window
对象的 btoa
方法,
解释:就是 btoa
函数出现的会断住,大家修改只需要 修改后面的关键字即可。
然后就断住了。
找到点击时间触发对应的js文件,进去
JSON.stringify()
jsonString
将成为一个包含转换后的JSON字符串的变量:
var data = { name: "John", age: 30, city: "New York" };
var jsonString = JSON.stringify(data);
console.log(jsonString); //{"name":"John","age":30,"city":"New York"}
console.log(data) //{ name: 'John', age: 30, city: 'New York' }
剩下的交给大家了。