追不上的不追、不属于自己的不要、挽留不住的不留、生活哪有那么复杂。



java从微信code中获取用户手机号信息_i++

1、前言


一、目标网站


aHR0cDovLzYwLjE3My4yNTQuMTI2Lw==

二、明确分析目标

打开网页,随意点击一个小区。

java从微信code中获取用户手机号信息_i++_02


网页重开一个详情页面,如下图所示。 反复点击同一个小区,会发现详情页url每次都是变化的,变化的位置已用红框标记。

java从微信code中获取用户手机号信息_a标签_03

java从微信code中获取用户手机号信息_i++_04


所以,文章分析的重点就是这一串数字的生成逻辑。

2、生成逻辑分析

一、查找点击事件

打开开发者模式,刷新页面,找到页面请求的接口,在响应中搜索小区名称,定位到如下图位置。

每个a标签下都有onclick,id属性,点击触发的事件名称为reurl,并且传入了this,但这里暂时还看不出this表示什么。



java从微信code中获取用户手机号信息_js获取微信号_05

全局搜索reurl,如下图,40行打上断点。

点击小区名称,js正常断下。选中recode(),可以看到生成的结果就是需要的那一串数字。



java从微信code中获取用户手机号信息_js代码_06

继续选中参数,可以看到传入的参数即为a标签下id属性值。



java从微信code中获取用户手机号信息_js代码_07

二、分析recode()

点击进入recode函数,如下图。

整个逻辑很简单,就是调用了nscaler()和SetObjNum()两个函数,分别生成对应的值。

我们要做的,无非就是抠出对应的js代码,然后执行。

java从微信code中获取用户手机号信息_i++_08



这里需要留意b的值,初次生成是提取了页面id=“iptstamp”标签中value的属性值,我的理解就是获取页面的加载时间。

从接口响应中直接搜索iptstamp可以查到。

java从微信code中获取用户手机号信息_js获取微信号_09

放在代码中,可以从页面copy出来作为固定值,也可以从页面动态获取,但是不能自己凭空构造一个13位的时间戳。

三、抠出js代码

之前的文章中js比较简单都是转化成python实现,这里直接抠出对应的函数。

nscaler()部分,注意去除$.

function nscaler(a) {    var b = "";    each(a, function (i, e) {        switch (e) {        case "0":            b += "0";            break;        case "1":            b += "2";            break;        case "2":            b += "5";            break;        case "3":            b += "8";            break;        case "4":            b += "6";            break;        case "5":            b += "1";            break;        case "6":            b += "3";            break;        case "7":            b += "4";            break;        case "8":            b += "9";            break;        case "9":            b += "7";            break        }    });    return b    }

而nscaler()内部又调用了each()

接着抠出each(),里面有很多判断可以忽略,我这里直接全部copy下来了,懒得去调试分析。

function each ( obj, callback, args ) {    var name,        i = 0,        length = obj.length,        isObj = false;    if ( args ) {        if ( isObj ) {            for ( name in obj ) {                if ( callback.apply( obj[ name ], args ) === false ) {                    break;                }            }        } else {            for ( ; i < length; ) {                if ( callback.apply( obj[ i++ ], args ) === false ) {                    break;                }            }        }    // A special, fast, case for the most common use of each    } else {        if ( isObj ) {            for ( name in obj ) {                if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {                    break;                }            }        } else {            for ( ; i < length; ) {                if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {                    break;                }            }        }    }    return obj;}


接着就是SetObjNum()

function SetObjNum(n) {    var a = "";    for (var i = 0; i < n; i++)        a += Math.floor(Math.random() * 10);    return a    }


接着就是入口函数了,首次生成b的值,作为参数value传递进来。

function recode(a,value) {    var n = nscaler(a);    var c = SetObjNum(a.length);    var d = SetObjNum(a.length);    n = parseInt(n) + parseInt(d);    var b = value;    var b = nscaler(b.toString());    return c + "-" + n + "-" + d + "-" + b    }

3、代码展示

测试代码如下!

代码中没有动态获取页面的加载时间,直接从页面上复制了一个。

小区id也是随机取了一个,作为测试。

java从微信code中获取用户手机号信息_js代码_10


返回结果如下

java从微信code中获取用户手机号信息_i++_11

java从微信code中获取用户手机号信息_js代码_12


ok,生成的数字串可以正常获取详情页面信息。 简单的一个网站,主要是抠出对应的js代码,注意缺啥补啥就行。