海运的博客

QQ注册申请键盘事件分析

发布时间:March 19, 2015 // 分类:JS // No Comments

添加用户名输入时的键盘事件,当输入时按下每个键时会激发index.addAq函数,传入html id和键值,输入完成时index.reportAq(this)提交键盘事件记录的数据:

$.e.add($('nick'), 'keydown', function(a) {
  index.current_error_dom = 'nick_keydown_start';
  a = a.keyCode;
  index.nickExceed = $.str.getBytes(this.value) == 24 && a != index.keyCode.DEL &&
    a != index.keyCode.BACK ? true : false;
  index.addAq(this.id, a);
  index.current_error_dom = 'nick_keydown_end'
});

  $.e.add($('nick'), 'blur', function() {
    index.current_error_dom = 'nick_blur_start';
    $('nick_bg').className = 'bg_txt';
    if (!index.isChangingTab() && (index.hideInfo('nick_info'), index.chkNick())) {
      var a = indexType2RegType(index.type);
      index.ajaxChkNick($('nick').value, a)
    }
    index.reportAq(this);
    index.current_error_dom = 'nick_blur_end'
  });

addAq函数将键值和id对应的aq_input对象值和时间保存至数组aq_array:

aq_input: {
    nick: 1,
    phone_num: 2,
    self_email: 3,
    other_email: 4,
    password: 5,
    password_again: 6,
    sex_1: 7,
    sex_2: 8,
    birthday_type_value: 9,
    year_value: 10,
    month_value: 11,
    day_value: 12,
    country_value: 13,
    province_value: 14,
    city_value: 15,
    code: 16
  },
//a为html id,b为键盘值或固定值,
addAq: function(a, b) {
    var c = (new Date).getTime();
    index.aq_array.push(b + '|' + index.aq_input[a] + '|' + c)
  },

reportAq组合index.aq_array内的数据并提交:

 reportAq: function(a) {
    var b = new Image;
    index.aq_array.length == 0 && index.addAq(a.id, 0);
    a = index.aq_cgi + index.aq_array.join('&');
    b.src = a
  },

QQ空间登录JS分析密码加密

发布时间:March 13, 2015 // 分类:JS // No Comments

var domBtn = $('login_button');
查看登录框form,无默认onsubmit事件,然后查看登录提交按钮链接:

<a class="login_button" href="javascript:void(0);" hidefocus="true"><input tabindex="6" value="登 录" class="btn" id="login_button" type="submit"></a>

链接为javascript:void(0)为死链接, 也无onclick事件,可见提交操作是通过绑定事件来实现的,通过id login_button查找绑定的事件:

<input type="submit" id="login_button" class="btn" value="登 录" tabindex="6">

定义到变量domBtn:

var domBtn = $('login_button');

可见点击登录按钮后执行的函数为pt.plogin.submit(e):

add(domBtn, 'click', function(e) {
  e.preventDefault();
  if (pt.plogin.needShowNewVc == true) {
    pt.plogin.showVC()
  } else {
    pt.plogin.submit(e)
  }
});

最终分析到密码加密过程位于函数,调试使用firebug设置函数处为断点,鼠标悬停变量处显示相应信息:

var b = pt.plogin.getSubmitUrl('login');
//然后,d为明文密码,salt为qq号,vcode为验证码
f.p = $.Encryption.getEncryption(d, pt.plogin.salt, f.verifycode, pt.plogin.armSafeEdit.isSafe);

JS执行流程:

pt.plogin.auth();
pt.plogin.init();
pt.plogin.bindEvent();

$.e.add(domBtn, 'click', function(e) {
  e && e.preventDefault();
  if (pt.plogin.needShowNewVc == true) {
    pt.plogin.showVC()
  } else {
    pt.plogin.submit(e)
  }
});

PHP通过v8/nodejs/spidermonkey调用执行js函数

发布时间:March 13, 2015 // 分类:PHP // No Comments

通过v8,windows下需自行编译:

d8 a.js -- a b c
d8 a.js --js-arguments a b c

获取参数:

print(arguments[0]);

通过spidermonkey,获取参数同上:

js a.js a b c

通过Nodejs,底层基于v8,官网有windows安装包:

node a.js a b c

获取命令参数:

var arguments = process.argv.splice(2);
console.log(arguments[1]);

v8和spidermonkey都有相应的php扩展,在windows下通过进程调用执行js并获取结果:

<?php
$lastline = exec("node a.js aa bb", $res, $ret);
print_r($res);
echo $lastline;
echo $ret;

Firefox/Chrome模拟触屏手机

发布时间:March 12, 2015 // 分类: // No Comments

Firefox更改UA,开发者工具——响应式视图,选择相应分辨率,点击手指图标开始触摸事件。
Chrome开发者工具,左上角手机图标,然后选择相应的移动设备。

分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...
归档