“网页源码的隐藏”和js调试

最近在抓包的时候,发现诸多“诡异”的现象。点击按钮,第一个get包里面直接带了一个key值。当时的这个key值怎么来的满头的雾水!

当时非常的迷惑,主要的原因就是这个key值的产生在第一个get包里,不是后面的各种类型的包产生的!包括网页类型,js。

后来只有反推思考,竟然当点击按钮以后产生的第一个包就存在这么一个值,那么这个值就应该是点击按钮存在的那个页面里就应该存在了。

为了证明我这个推论,我就用google开发工具查看点击按钮区域的代码,结果要找的key值就在那里。

当这个key映入眼帘的时候,欣喜若狂。果然在该页里。

我迅速点击右键查看网页源码,搜索key,此时“诡异”的现象又出现了,竟然搜索不到key。不可能啊,难道是我眼睛看错了?我对比了几下,发现问题来了。

如果要google的开发工具查看是可以找到,但是不在网页源码里面。

结合上面两张图,我们发现,在div(choose-amount fl)下面应该存在一个div(choose-btn-qiang)。

竟然现象已经产生,我们还是得尊重事实,找出问题的原因。因为我也是第一次碰到这样的情况,不敢果断下结论,只能做以下判断:

一 这段div用某种手段隐藏了

二 这断div通过js动态加载,不存在静态页面源码里。当触发某个事件的时候,js动态调用进来的一段。

最后,种种感觉让我不得不去查看页面的js文件,虽然很不情愿。

我们都知道,javascript是可以对页面的div进行操作的,那么只有去js文件里去找这个div(choose-btn-qiang)。

到目前为止,虽然碰到的问题很多,但是方向和推测都是正确的,找到这个div当然只是时间的问题。后面终于在qiang.js里面找到了。

下面是部分代码:

var Qiang = {
originBuyUrl: $(‘#InitCartUrl‘).attr(‘href‘),
init: function (a, b) {
this.sku = a || pageConfig.product.skuid,
this.key = b || pageConfig.product.skuidkey,
this.btnWrap = $(‘#choose-btns‘),
this.btnTPL = {
a: ‘<div id="choose-btn-qiang" class="btn disabled"><a class="btn-qiang" href="#none">{T}<b></b></a></div>‘
},
this.get()
},

get: function () {
var a = this;
var b = ‘http://yushou.jd.com/youshouinfo.action?sku=‘ + this.sku;
var c = pageConfig.product.specialAttrs && /isKO/.test(pageConfig.product.specialAttrs.join(‘-‘));
c && (b = ‘http://item.ko.jd.com/itemShowBtn?skuId=‘ + this.sku),
$.ajax({
url: b,
dataType: ‘jsonp‘,
success: function (b) {
‘1‘ === b.type ? (a.set(b), pageConfig.qiang = !0) : ‘2‘ === b.type ? (a.setStage2(b), pageConfig.qiang = !0) : ‘3‘ === b.type ? (a.setKO(b), pageConfig.qiang = !0) : pageConfig.qiang = !1
}
})
},

其实我们应该看最重要的一段:

var Qiang = {
originBuyUrl: $(‘#InitCartUrl‘).attr(‘href‘),
init: function (a, b) {
this.sku = a || pageConfig.product.skuid,
this.key = b || pageConfig.product.skuidkey,
this.btnWrap = $(‘#choose-btns‘),
this.btnTPL = {
a: ‘<div id="choose-btn-qiang" class="btn disabled"><a class="btn-qiang" href="#none">{T}<b></b></a></div>‘
},
this.get()
},

通过上面代码我们可以看出来,对象的key值,通过一个变量b赋予。大胆的推测下,是不是可以通过js断点调试得出k值呢?其实我当时心里并没有谱,只有试试了。

这个时候我们需要用一个js调试的神器,火狐浏览器的调试器!

这里断点下到哪里要注意一下,因为b值的生成要用到下面的get:function(),所以要下到54行。

现在我们开始调试,刷新页面。下面是我们得到的调试结果:

如果,b值已经出现了。“http://yushou.jd.com/youshouinfo.action?sku=1478342961”这段就是我们需要的b值,大家肯定要问了,这个跟我们key啥关系,

别心急,把这段复制到浏览器打开,我们得到如下信息:

{"type":"1","num":437,"d":323701,"flag":false,"stime":"","etime":"2015-04-05 10:00:00","state":4,"sku":1478342961,"url":"http://yushou.jd.com/qianggou.action?sku=1478342961&key=e9d318dd32984052fd440c6b23472597","info":"抢购进行中"}

没有看错,url:里面出来了我们要的key值,其实这段url就是我们要的get提交地址。

一切顺利解决!

谢谢ccav!

时间: 2024-11-03 00:28:05

“网页源码的隐藏”和js调试的相关文章

Mac OS使用技巧十九:Safari碉堡功能之二查看网页源码

因为大三下的时候选修了搜索技术,了解了网络上搜索引擎和网络爬虫的信息扒取的一些东西,后来我们做了一个比较水的东西,就是只扒取了几家较大的下载网站几十个软件的评分下载量等信息,当用户输入一个程序名称,我们会根据下载量和评分算出的分数做一个推荐排序. 咳,扯远了.那时候我们在windows下需要用火狐来查看网页的源代码,这点强大的Safari也是可以做到的,甚至Safari提供的查看源代码功能要更强,只不过被隐藏了. 下面我来为大家介绍Safari的隐藏功能:查看网页源码 我们打开Safari,菜单

vc++获取网页源码

使用IWinHttpRequest获取网页源码 首先要创建基于对话框的mfc应用程序, 2.import+接口方式 首先导入winhttp.dll,使用IWinHttpRequest接口 #import "C:\\Windows\\System32\\winhttp.dll" void CHttpTestDlg::OnBnClickedButton1() { ::CoInitialize(NULL); // 初始化com组件 IWinHttpRequest *pHttpReq = NU

POST教程笔记 - WinHttp获取网页源码

①.WinINet与WinHttp的异同点,为什么使用WinHttp讲解? 详情见:<WinINet与WinHttp总结>文档,已经打包给大家了. ②.WinHttp接口调用方式:微软官方地址:http://msdn.microsoft.com/en-us/ ... 84263(v=vs.85).aspxWinHttp微软提供了两种调用方式:C++调用API的版本.COM组件的版本.这里面使用的是 C++ Interface 接口的组件的方式来给大家讲解. ③.WinHttp常用命令讲解:详情

IXMLHTTPRequest获取网页源码的心得

在万一老师的博客看到一种利用IXMLHTTPRequest来获取网页源码的方法,但有2个问题没解决,自己研究了下改进了方法. 1.如果网页进行301转跳将无法获取源码 2.如果网站是gb2312编码将获取的是乱码 /////以下方法使用的是Delphi xe2编写 uses MsXML,activex; function GETHTML (const URL : string):string; // XMLHTTP接口Var XMLHTTP:IServerXMLHTTPRequest; HTML

Python爬虫学习之获取网页源码

偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义就不多说了,不知道的请自行点击查看 =>百度百科 网络爬虫,维基百科 网络爬虫 有很多编程语言都可以编写网络爬虫,只不过各有各的优缺点,这里我选择用Python语言编写爬虫,因为Python是一门非常适合用来编写爬虫的语言,用它实现爬虫的代码量相对其他语言要少很多,并且python语言对网络编程这类模块

C#获取指定网页源码的几种方法

// WebClient private string GetWebClient(string url) { string strHTML = ""; WebClient myWebClient = new WebClient(); Stream myStream = myWebClient.OpenRead(url); StreamReader sr = new StreamReader(myStream, System.Text.Encoding.GetEncoding("

Android 【山西违章查询实现1】(解析网页源码然后ListView显示出来)---利用正则表达式解析网页源码

这几天学习Android网络方面的,本来想从网上找些违章查询的接口,看了一下基本上都是付费的,索性自己写一个. 主要是 到正则表达式(我都不好意思说我用的正则表达式了)解析了一个网页,然后从ListView显示出来,还有轻量级的SQlite(储存违章查询). 想写一个详细点的所以慢慢来,以后自己回来看的时候估计也会觉得自己写的很乱吧. ---------------------------------- 1.首页查看自己要解析的网页和网址的构成 还需要验证码,最后发现验证码就是骗人的(有点坑啊)

Android 【山西违章查询实现2】(解析网页源码然后ListView显示出来)--- 客户端获取html源码

废话不多说,直接上源码 最后网页源码在result中. public void btn(View view) { new myWorker().execute("这里是网址"); } //异步操作,防止UI线程阻塞. private class myWorker extends AsyncTask<String,Void,String> { protected String doInBackground(String...urls) { StringBuilder buil

观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的"入口",内部经过参数.类型