分类 代码人生 下的文章

markdown是个好东西!让我们可以集中精力去写文章,提高文章质量,不过有几个方面还是值得吐槽的:

  • 超链接的target属性不能自定义
  • 在WP中插入图片太麻烦
  • 没有很好的支持或者支持标准不一
  • 待补充

推荐一个好工具:stackedit

还有他的升级版:stackedit-beta

2014年10月19日补充:

markdown标准语法请参考http://commonmark.org

今天手残,把上述文件夹给删了,而缺没有备份,网页直接打不开了 网上的回答五花八门,有登陆后台重建缓存的,有分析install.php重建文件夹的。。。各种无语啊 还是自己想的办法好:

自己在本地重建建立一个一模一样的phpwind,然后把生成的bbscache文件夹覆盖回去即可!

难点在于如何搭建一模一样的phpwind,主要是数据库的用户名密码和域名,还有后台管理的用户名密码,讲一下步骤:

  1. 先在host里绑定域名www.abc.com到127.0.0.2
  2. 在Apache或其他服务器新建虚拟主机127.0.0.2,别名设为www.abc.com
  3. 把俺炸U那个文件拷贝进去,安装吧~

这些变量是随系统运行而变化的,灵活使这些变量可简化我们的操作和更好地控制bash shell的行为。

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

由于业务需要,研究了一下腾讯微博等登陆,下面分享一些经验给大家: 标题写的是腾讯微博的登陆,其实也可以隐身到腾讯旗下多个产品的登陆,比如QQ空间,webQQ等,想到这儿大伙是不是很激动呢?

表急,等我细细道来。

数据采集

有时候简单的数据不需要这么大费周折!使用某些语言自带的web工具也是可以的!下面我以Python为例:

分析登录过程

登录过程需要抓包,我是用的HttpWatch,大体步骤如下

第一步 手动登陆,抓包,记录登录过程

  1. 当输入完账号后想服务器请求验证码
  2. 等级登陆按钮后将登录信息发送至认证服务器,实现第一次认证
  3. 服务器返回登陆成功信息,其中包含最终URL
  4. 第二次认证,获取腾讯微博的cookie

第二步 伪造登录过程

  1. 获取验证码
  2. 根据验证码计算出加密后的密码以及其他信息,发送GET请求至认证服务器
  3. 根据返回URL获取最终cookie

工作难点

本文假设读者理解http协议及数据包的发送原理,以此为基础,工作的难点就集中在数据的准备上。

  • 密码的加密原理
  • cookie的处理
  • header的UA及refer的一致性

密码加密算法

以下提取自登录页面的c_login_2.js文件

function getEncryption(password, uin, vcode) {
	var str1 = hexchar2bin(md5(password));
	var str2 = md5(str1 + uin);
	var str3 = md5(str2 + vcode.toUpperCase());
	return str3
}


if (b == "login") {
	d.u = encodeURIComponent(pt.plogin.at_accout);
	d.verifycode = $("verifycode").value;
	if (pt.plogin.needShowNewVc && pt.plogin.pt_verifysession) {
		d.pt_vcode_v1 = 1;
		d.pt_verifysession_v1 = pt.plogin.pt_verifysession
	}
	if (pt.plogin.RSAKey) {
		d.p = $.Encryption.getRSAEncryption($("p").value, d.verifycode);
		d.pt_rsa = 1
	} else {
		d.p = $.Encryption.getEncryption($("p").value, pt.plogin.saltUin, d.verifycode);
		d.pt_rsa = 0
	}
}

加密方法大致如下:

  1. 判断是否RSA加密,如果不是,走getEncryption对称加密方法
  2. 对称加密用到了salt,参数分别为原密码,加密帐号和验证码 算法如下: a. 使用md5加密密码,并输出其二进制值 b. 解密验证码中的类似\x01等数字,再与第一步拼接再一次加密,输出输出32位的16进制 c. 再与验证码中类似!VXT的大写拼接加密,再输出输出32位的16进制

cookie及UA

UA和cookie数据比较基础,在此不赘述,主要需要搞清楚登录路径即可!

action和login_sig

action参数可以乱填,和登陆没关系

login_sig提取自登陆页面,需要在登陆时发送!

##代码

部分参考自 http://www.oschina.net/code/snippet_95475_11051