python爬虫逆向学习
抓包
调试
扣取js
扣全了吗
this是谁啊
改写
本地运行出值
常见的一些加密方式
取盐校验 不可逆
md5 md2 md4 带密码的md5(hmac)
md5
默认key 0123456789abcedf
16位的 32位的 40位的
123456 49ba59abbe56e057 e10adc3949ba59abbe56e057f20f883e
sha1 sha256 sha512
123456 7c4a8d09ca3762af61e59520943dc26494f8941b
对称加密 AES DES 3DES
非对称加密 RSA (私钥 公钥)同一个明文可以生成不同密文
base64 xxxxxx== A-Z a-z 0-9 + _ =(最后面通常会有=号)
自执行语句:!function(){}();(function(){})();(function(){}())
webpack逆向思路:
function(x){
function xx(yy) {
x[yy].call(xxx, xxx, xxx); //必有一个加载模块的方法call, apply
}
xx(1) //对应下面第二个function(){}
}([ // }([ }({ 搜索关键字
function(x1, x2, x3){}, function(x1, x2, x3){}
]);
网站代码运行时间轴:
加载html 加载js -> 运行js初始化 -> 用户触发了某个事件 -> 调用了某段js -> 明文数据-> 加密函数 -> 加密后的数据 -> 给服务器发信息(XHR-SEND)-> 接收到服务器数据 ->解密函数 -> 刷新网页渲染
逆向运行步骤:
抓包 -> 调试 -> 扣取js -> 改写 -> 本地运行出值 -> 请求服务器拿取数据
浏览器的组成功能:
渲染 DOM
所有浏览器相同功能 BOM
执行js脚本 JavaScript 文本处理 正则
不同浏览器会实现自己相应属性 BOM
DOM(渲染引擎)BOM JS引擎 = 浏览器
反调试
检测是否在调试
键盘监听(F11)
检测浏览器内外的高度
检测开发者人员工具是否为true
利用console(如打开F11,就输出某些内容)
利用代码运行时间差
利用toString
利用栈的成熟 caller
检测非浏览器
分类
显性
debugger
非虚拟机
右键设置false
直接替换代码
谷歌内核默认提供
浏览器的插件 油猴
代理替换 小提琴(Fiddler)
虚拟机(eval Function) 瑞数
死循环 循环语句 无线递归 两个方法互相调用 计时器
for(;;)
while(true)
隐性(暗桩)
引向错误的逻辑
浏览器正常堆栈
滑块流程 极验
滑块是什么?
区分是否有机器
有一个滑动条
看代码分析流程
抓包
1: challenge: "99f47bfd0be767929daece99c40b6fd4"
gt: "019924a82c70bb123aae90d483087f94"
2: gettype.php提交了gt拿js fullpage.9.0.8.js
3: get.php提交了gt、challenge、w(加密了 环境校验 轨迹)
4: ajax.php提交了gt、challenge、w(加密了 环境校验 轨迹)
5: get.php提交了gt、challenge,返回了
原图(乱码) 遮罩图(乱码) 滑动图
6: ajax.php提交了gt、challenge、w(加密了 环境校验 轨迹)返回了
validate
调试
目的:
1:找到 并分析 乱码原图 还原的代码
% 26 * 12 + 1 特征码
还原顺序
[39,38,48,49,41,40,46,47,35,34,50,51,33,32,28,29,27,26,36,37,31,30,44,45,43,42,12,13,23,22,14,15,21,20,8,9,25,24,6,7,3,2,0,1,11,10,4,5,19,18,16,17]
312 / 16 = 12 每一个小块宽度为10像素
2:找到 并分析 w 参数如何生成
”\u0077" 特征码
u = r[$_CAGEe(750)]()
l = V[$_CAGEe(342)](gt[$_CAGEe(209)](o), r[$_CAGEe(742)]())
h = m[$_CAGEe(733)](l)
var e = new X()[$_CBEEc(342)](this[$_CBEEc(742)](t));
encrypt
Ot = rt()
var random_ = function random_(){
var data=""
for (var i = 0; i < 4; i++){
data = data+(65536 * (1 + Math['random']()) | 0)['toString'](16)['substring'](1)
}
return data
}
\u0024\u005f\u0043\u0042\u0045\u0045
调试的知识点
1:for
switch 平坦流
过滑块总结
跟值技巧
从头看
不需要重复下断
缺点 要记住很多的变量值 不太适合新手
从尾看
跟值比较的轻松
缺点 可能会有重复下断的操作
下断点
初始值的位置 循环的位置 返回的位置
函数的开头 函数的结尾

浙公网安备 33010602011771号