JS逆向实战——某东h5st_5.1(补环境)
- 声明
- 网站
- 流程分析
- 结果展示
- 总结
声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
网站
aHR0cHM6Ly9zZWFyY2guamQuY29tL1NlYXJjaD9rZXl3b3JkPSVFNiU4OSU4QiVFNiU5QyVCQSZzdWdnZXN0PTEuaGlzLjAuMCZ3cT0lRTYlODklOEIlRTYlOUMlQkEmc3RvY2s9MSZwdmlkPWNkYzhjOWI4ZGM1OTRiNDg5NTlmYzc5ZTViMDM1Nzg2JmlzTGlzdD0wJnBhZ2U9MyZzPTU2JmNsaWNrPTAmbG9nX2lkPTE3NDU2NTU5MDE2NzEuOTM1Mg
今天水一篇某东的h5st_5.1版,但是内容不会讲的很详细,说一下我觉得的关键内容,不想收到某东的私信,有问题可以直接私信,下面进入正题。
流程分析
搜索h5st可以直接定位到生成位置,发现是个异步,使用py调用时可以先将异步转同步,或者打印结果后强制停止程序,返回结果调用,我是用的是第二种方法,使用subprocess库。
参数中的body是请求体中的body经过SHA256加密而成,标准库,网上找套加密源码套上就行。
接下来讲一下补环境,需要的环境不是很多,就不讲的很细了,主要是不方便,容易受到警告。下面列举一下需要的一些环境。
document.all、canvas、head、getContext_2d等
比较重要的检测就是document.all,下面放出我补的代码
const { debug } = require('console')
const { he } = require('faker/lib/locales')
const v8 = require('v8');
const vm=require('vm');
const { prototype } = require('events');
v8.setFlagsFromString('--allow-natives-syntax');
let undetectable = vm.runInThisContext("%GetUndetectable()");
v8.setFlagsFromString('--no-allow-natives-syntax');HTMLAllCollection = function HTMLAllCollection() { };
window.HTMLAllCollection = HTMLAllCollection;all = undetectable;
all.__proto__ = HTMLAllCollection.prototype;
all.length = 3173;
别的环境常规补就没什么问题了,长度和网页的差不多就可以去测了,基本没什么问题。如果实在过不了可以hook随机数等,最终生成的加密和网页一致就包没问题啦,下面放出hook代码。
Date.now = function now() {return 17375265789541
};
Date.parse = function () {return 1661986251253
};
Date.prototype.valueOf = function () {return 1661986251253
};
Date.prototype.getTime = function () {return 1661986251253
};
Date.prototype.toString = function () {return 1661986251253
};
Performance.prototype.now = function now() {return Number('1661986251253'.slice(8))
}
Math.random = function random() {return 0.08636862211354912
};
window.crypto.getRandomValues = function getRandomValues(array32, ...args) {return array32;
}
结果展示
最终也是可以成功翻页拿到数据
总结
需要完整代码的可以私信我,逆向分析中有任何疑问也可以私信我一起讨论学习,谢谢大家!!!