js逆向之补环境过瑞数4.0 某房地产( 二 )


4运行一下,发现少了
5.到浏览器去copy一个
location = {"ancestorOrigins": {},"href": "http://www.脱敏处理/old_house/old_house.html","origin": "http://www.脱敏处理","protocol": "http:","host": "www.脱敏处理","hostname": "www脱敏处理","port": "","pathname": "/old_house/old_house.html","search": "","hash": ""}
5.运行后,再次报错,往上滑,发现有个top未定义,补上 = ,得根据经验来
6.再次运行,报了一个函数未定义,往上看看,发现.未定义,此时就必须要到浏览器里去调试,一定要在此之前进行替换操作,不然它生成的动态VM里会没有你要找的函数
document = {characterSet:'UTF-8',charset:'UTF-8',scripts:['script','script']}div = {getElementsByTagName:function (val){if(val==='i'){return {length: 0}}}}document.createElement = function (val){if(val==='div'){return div} if(val==='form'){return {}} if(val==='a'){return {}}}
7.补上后报错里的两个属性未定义,先补空试试,补完后发现报了一个新的错,接着上面的流程,在浏览器里调试,把该补的方法补上
window.addEventListener = function(){console.log(arguments)}window.attachEvent = function(){console.log(arguments)}

js逆向之补环境过瑞数4.0 某房地产

文章插图
// 注意,需要在浏览器里仔细调试,耐下性子来,逆向没那么简单,有的环境一补就是好几天document.getElementsByTagName = function (){return[{content:content,parentNode:{removeChild:function (){}},parentElement:{removeChild:function(){}}},{content:content,parentNode:{removeChild:function (){}},parentElement:{removeChild:function(){}}}]}
8.补完后又报了两个未定义,还是先补空,补完之后发现大部分环境已经出来了
9.但还是报了一个函数未定义
10.继续在浏览器里调试
11.这里浏览器调用了标签里的r属性,最终会走if中的代码块,所以得模拟浏览器的操作,这里我质询了一个逆向大佬(姓名不便透露,毕竟大佬都是很低调的),他给了我一个解决方案
Object.prototype.getAttribute = function (val){if(val==='r'){return 'm'}}// 把getAttribute添加到对象的原型上
12.再次运行发现结果是生成了,但是程序好像没有停下来的意思,此时就要注意可能是触发了定时器,可以提前置空
13. 到这里你是不是以为就结束了,那你就想的简单了
14.记得之前只需要这几步就能拿数据了,可能是很多人拿这个网站做4.0的教学,然后可能升级了,检测了更多的环境,还记得之前说的node环境的检测吗,这里我质询了爬虫界的大佬也是得到了答案
15.后来又问了问发现浏览器的js代码可以检测node项目路径的,所以要把 ;;加上,这应该是近期网站做了调整.到这里整个补环境就结束了
16. 结果也是成功拿到了,整个项目耗时两天,期间咨询了许多大佬,在此特地感谢考古学家lx(李玺),k哥爬虫提供的技术指导,希望有朝一日也能成为像他们一样的顶流.顺便推荐一下逆向遇到瓶颈的可以参考二佬的文章
【js逆向之补环境过瑞数4.0 某房地产】总结 出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来. 5.0,加速乐,极验已经实现,后续有空会持续更新. 由于本人第一次写博客,加上写作水平有限,如有讲解不到位或者讲解错误的地方,还请各位大佬在评论区多多指教,共同进步.如有需要代码的可以加本人微信