微博登录及删除粉丝/转发/评论的脚本[更新中]

来源:互联网 发布:黑暗之魂3优化 编辑:程序博客网 时间:2024/06/06 14:09

恩,慢慢更新,先挖个坑

写这个的主要原因是自己的微博被许多卖片的小姐姐们关注了,很恶心,准备一次清理掉

/*******--***********/

首先还是老样子,分析一下网站对账号密码的加密操作

老规矩,能从移动端入手就不从PC端入手,但是这次直接从PC入手,weibo.com(移动端weibo.cn)

当输入完账号按下tab切到密码框时,我们会捕捉到一个get请求,打开看看

https://login.sina.com.cn/sso/prelogin.php?checkpin=1&entry=mweibo&su=MTU2MDYxMzAwMDk=&callback=jsonpcallback1508381565848

返回的一个json串

retcode  0

servertime
 1508381509
pcid
 "tc-f85808f34da5621cedf8bd9170eae0006ce2"
nonce
 "BR74OK"
pubkey
 "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrKjhWhmGIf6GAvdtcq9XyHHv9WcCQyy0kWoesJTBiiCcpKT5VBjUFCOf5qju3f0MzIxSQ+RX21jxV/i8IpJs1P0RK05k8rMAtt4Sru45CqbG7//s4vhjXjoeg5Bubj3OpKO4MzuH2c5iEuXd+T+noihu+SVknrEp5mzGB1kQkQwIDAQAB-----END PUBLIC KEY-----"
rsakv
 "1330428213"
is_openlock
 0
lm
 1
smsurl
 "https://login.sina.com.cn/sso/msglogin?entry=mweibo&mobile=15606130009&s=2ae11f76e8865a2a07492ed2dbab69f6"
showpin
 0
exectime
 9

挨个分析一下,retcode毫无疑问是返回的状态值,servertime顾名思义是时间,对这个敏感的同学应该发现这是一个去除小数点的时间戳,即time.time()*1000

中间几个后面会用到,这边先不说,showpin是对验证码是否弹出的一个设定,前两天测试的时候总是会弹出一个验证码图片,即showpin=0,今天测试的时候不知道为什么这个值变成了0,即没有验证码,不清楚触发的条件是什么

再对域名传过去的值进行分析

checkpin=1&entry=mweibo&su=MTU2MDYxMzAwMDk=&callback=jsonpcallback1508381565848

checkpin应该是检验是否请求验证码的值(猜测),entry入口是手机版微博,callback即我们上面截图里的json串,下面就是这个su了

su是什么值呢,根据我们申请的时间分析,毫无疑问这就是我们的账号进行了加密之后的显示

在js中寻找一下给账号加密的函数(用mac的同学可以尝试一下Charles,很不错的软件,LInux下不清楚怎么用,所以直接firebug慢慢找了)

我们在js中找到了这么一句

opt.data.su = utf8_to_b64(trim(that.loginName.value));

OK,这就是对我们用户名的加密的过程了,trim是js包中的一个函数,寻找一下他的定义

    function trim(str) {
        return (!str) ? '' : str.toString().replace(/^\s+|\s+$/g, '');
    }

utf8_to_b64即是base64的加密方法

总结一下我们可以获得 su = base64.b64encode(urllib.parse.quote_plus(user_name).encode('utf-8')).decode('utf-8')

那么第一个函数可以着手写了

    def get_username(self):        """        get legal username        """        username_quote = urllib.parse.quote_plus(self.user_name)        username_base64 = base64.b64encode(username_quote.encode("utf-8"))        return username_base64.decode("utf-8")


那么用户名获取写完了后面毫无疑问要写密码的加密了

我们先尝试进行一次登录,看一下到底一次登录post了哪些数据

encoding UTF-8entryweibofrom gateway1nonceZ3BWVXpagerefer prelt54pwencodersa2qrcode_flagfalsereturntypeMETArsakv1330428213savestate7servertime1508384126serviceminiblogspb223228fbe8bd7510d338871081ca1e01b346e9ea0c47dff16f7a72432ebac05f3064c65e07d97d1a48d747c4db3b2b0d94e7b109db80f1e9e430a4c2780f8b3e3a721723a30db41c951c03af6ea04d35c6f48e597fbf32e770fe574af1941bf6d3484443d3c83d2114f83d3b649c01d25d57b779efa031169ac880b5ac3e694sr1920*1080suMTU2MDYxMzAwMDk=urlhttp://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBackuseticket1vsnf1其他就不看了,直接看到了sp,即加密之后的密码,我们拎出来看一下

b223228fbe8bd7510d338871081ca1e01b346e9ea0c47dff16f7a72432ebac05f3064c65e07d97d1a48d747c4db3b2b0d94e7b109db80f1e9e430a4c2780f8b3e3a721723a30db41c951c03af6ea04d35c6f48e597fbf32e770fe574af1941bf6d3484443d3c83d2114f83d3b649c01d25d57b779efa031169ac880b5ac3e694

因为看到了rsakv这个列,所以我们几乎可以确定,加密过程中必然有rsa的参与,让我们看看js里能否找到加密的过程

if(me.service){request.service=me.service}if((me.loginType&rsa)&&me.servertime
&&sinaSSOEncoder&&sinaSSOEncoder.RSAKey){request.servertime=me.servertime;request.nonce=me.nonce;request
.pwencode="rsa2";request.rsakv=me.rsakv;var RSAKey=new sinaSSOEncoder.RSAKey();RSAKey.setPublic(me.rsaPubkey
,"10001");password=RSAKey.encrypt([me.servertime,me.nonce].join("\t")+"\n"+password)}else{if((me.loginType
&wsse)&&me.servertime&&sinaSSOEncoder&&sinaSSOEncoder.hex_sha1){request.servertime=me.servertime;request
.nonce=me.nonce;request.pwencode="wsse";password=sinaSSOEncoder.hex_sha1(""+sinaSSOEncoder.hex_sha1(sinaSSOEncoder
.hex_sha1(password))+me.servertime+me.nonce)}}request.sp=password;

有点乱,下午继续写

/*********************************************/

无意间看了看别人的博客,真是好看啊.........

继续/***********************************/

上面的对密码的加密我们可以看到几个熟悉的字眼, rsa,sha1,都是加密方式

代码已经基本写完了,丢在github上了,突然想把代码丰富成舆情分析类的,择日继续写

阅读全文
0 0
原创粉丝点击