作者:地球仪
原文:
http://hi.baidu.com/aqtata817/blog/item/670d79fd975f061ad9f9fd1c.html
上次把准备工作做好了,这次直就接“开刀”
为了方便后面的操作,先把smali.jar、baksmali.jar、dex2jar放到C:\123目录下
1.寻找Appkey
将安装程序扩展名改为rar或zip都可以,只要能用工具解压就行,将其中的classes.dex文件拖出来放到C:\123目录下
进入CMD控制台,输入命令:dex2jar.bat classes.dex
成功后会在该目录下生成一个classes.dex.dex2jar.jar文件
再用JD-GUI打开它,选择“File - Save All Sources”将源码全部提取出来
提取出的文件是一个zip压缩包,将其解压到C:\123\yuanma
微博公开的API接口文档显示,如果使用Basic Authentication授权方式的话
必须在所有访问接口参数里带有“source=appkey”
我们这里打开EF Find搜索刚才解压出的所有源码文件,搜索字符为“source=”
很可惜,什么都没找到,再继续尝试“appkey”等字符,依然无所获
现在基本可以验证之前所说的,官方的客户端是访问的未公开的接口,不需要Appkey
为了找到接口地址和相关参数,我们需要在手机上抓包
2.寻找未公开接口及参数
这里要请出ADB和Tcpdump了,注意先把ADB目录添加到环境变量中去,省去了在控制台下输入路径的麻烦
打开91手机助手,把Tcpdump放到手机的/data/local目录下
但是它还没有权限运行,需要修改文件权限,我们要进入到adb shell
命令:adb shell chmod 777 /data/local/tcpdump
查看一下属性,已经有了所有权限
再进去手机的shell,进入刚才的目录下
adb shell
cd data
cd local
现在准备抓包了,在启动前先进入手机微博的登录窗口,随便输入帐号密码,不要登录
再回到控制台启动tcpdump,命令:./tcpdump -w dump.txt -s 0 -v port 80
tcpdump已经处于监听状态,回到手机里了,点“登录”
会发现在控制台窗口提示“Got 12” ,表示抓到了12个包
好了,让它停止工作,按下Ctrl + C键即可
用91手机助手刷新目录,可以看到多了个dump.txt文件
直接将其拖出来,这里说一下,这个文件应该是用Wireshark来查看的
之所以不用是因为这里并不需要很详细的信息,只需要看个大概就可以,用记事本打开
可以看到是以post方式提交数据,而且也确实如之前所说,不是访问的公开接口
u=帐号,p=密码,c应该是客户端标识符,s不详,ua应该只是统计数据用的
如果你会编程,这里最好做个程序测试下参数,我这里就直接说测试结果了
u,p,c,s参数是必须的,否则就登录不成功
尝试把c参数改为“iphone”,但是也无法登录成功,所以s参数应该是通过标识计算出来的
3.解密S参数
我们这里再回到第一步,从源码中找线索,打开EF Find搜索“login.php”,果然,找到一个
仔细看看代码,发现将用户名+密码作为参数传递给calculateS函数了
跟踪calculateS函数,可以看出没有复杂的加密,只是MD5加密了下,然后固定的取出几个字符作为S参数
而S参数也要和C参数对应才行,服务器会效验
到这里,关于客户端标识加密的方法知道了,我们还要将其改为iPhone的
下篇再讨论如何获取iPhone的Key及如何修改Android客户端