首页
社区
课程
招聘
[原创]DIY新浪微博Android手机客户端(一)(二)(三)完
发表于: 2011-3-23 00:26 43187

[原创]DIY新浪微博Android手机客户端(一)(二)(三)完

2011-3-23 00:26
43187

作者:地球仪
原文:220K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3S2A6i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7i4c8S2N6r3p5^5x3e0N6Q4x3V1k6T1L8r3!0Y4i4K6u0r3K9i4c8W2L8g2)9J5c8U0M7%4y4U0t1@1y4U0l9J5x3h3j5^5x3h3t1$3k6o6R3%4j5U0R3&6y4o6N6T1j5W2)9J5k6h3S2@1L8h3H3`.

玩过新浪微博的人都知道,在每条微博的下方都会显示出该条微博来自于什么样的客户端
比如网页的、手机版的、Android的、iPhone的、iPad的、Symbian的、Kjava的以及很多第三方应用等等



本次教程的最终目的是“偷龙转凤”,通过修改Android客户端让其发表的微博显示“来自iPhone客户端”
iPhone多火呀!用iPhone多有面子呀!呵呵

第一件事还是准备好所需要的工具。工欲善其事,必先利其器!

【手机一部】
当然必须是Android系统的

【新浪微博Android客户端】
有了手机当然也要有客户端安装文件了,下载地址:03bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8Q4x3X3g2K6K9h3&6S2i4K6u0W2j5$3!0E0i4K6u0W2j5$3&6Q4x3V1k6E0L8$3u0A6L8r3g2Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0W2M7r3S2H3

【JDK】
后面要用到一些Java程序,所以必须安装Java环境
我这里装的1.6版,下载地址:9d9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3A6S2N6X3q4Q4x3X3g2F1k6i4c8Q4x3V1k6V1L8%4N6F1L8r3!0S2k6q4)9J5c8X3A6V1K9K6k6Q4x3V1j5$3N6e0p5H3i4K6u0r3M7s2u0G2L8h3!0@1k6h3c8Q4x3V1k6T1x3K6u0Q4x3V1k6T1K9h3&6S2M7X3W2W2M7#2)9J5c8X3A6V1K9#2)9J5k6o6k6#2x3e0m8Q4x3X3c8J5j5K6u0Q4x3X3c8T1K9h3&6Q4x3X3c8T1x3K6u0Q4x3X3c8%4K9h3&6V1L8%4N6K6i4K6u0V1K9e0f1^5y4W2)9J5k6s2m8Q4x3X3b7I4x3W2)9#2k6Y4y4W2M7q4)9#2k6U0t1H3x3o6S2Q4x3X3g2W2P5r3f1`.

【ADB】
这个安装了Android的SDK都会有的,或着单独下载提取出来的:e88K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2G2j5X3W2D9k6g2)9J5k6i4W2W2M7$3E0&6i4K6u0W2j5$3!0E0i4K6u0r3K9h3#2S2k6$3g2D9K9i4y4@1i4K6u0r3x3U0l9H3z5g2)9J5c8U0x3H3x3g2)9J5c8X3u0&6K9K6R3%4j5U0b7&6M7o6k6Y4M7W2)9J5k6i4u0S2M7R3`.`.
这里面带有USB驱动,可以不用理会

【Tcpdump】
Linux下的网络监视工具,下载:27bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4g2#2M7X3!0A6k6q4)9J5k6h3y4G2L8g2)9J5c8Y4g2H3L8r3!0S2k6q4)9J5c8Y4c8U0M7r3c8#2L8i4m8Q4x3X3g2*7K9i4l9`.

【dex2jar】
Java程序,可以把dex文件反编译成jar文件,下载:147K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4S2K9h3y4Z5j5h3!0Q4x3X3g2Y4L8$3!0Y4L8r3g2U0L8$3c8W2i4K6u0W2j5$3!0E0i4K6u0r3k6X3W2D9k6i4y4Q4x3V1k6V1k6i4R3J5K9X3q4J5i4K6u0V1x3q4)9J5k6e0m8Q4x3X3f1%4i4K6u0V1f1@1&6m8f1q4y4t1e0#2c8Q4x3X3g2*7K9i4l9`.

【JD-GUI】
Java反编译程序,可以查看jar文件源码,下载:d73K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3c8#2L8%4c8W2i4K6u0W2j5$3!0E0i4K6u0r3M7$3!0X3N6q4)9J5c8U0M7%4z5e0y4Q4x3X3g2Z5N6r3#2D9

【baksmali和smali】
解包打包java源码的工具,下载:af5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3y4G2k6r3g2Q4x3X3g2Y4L8$3!0Y4L8r3g2Q4x3X3g2U0L8$3#2Q4x3V1k6H3i4K6u0r3M7$3#2S2L8r3W2Q4x3V1k6V1L8%4N6F1L8r3!0S2k6s2y4Q4x3V1k6D9K9i4y4@1

【IDA】
强大的反汇编工具,不用解释了吧,我这用的5.5版

【91手机助手】
主要用它来传输文件,当然你用豌豆荚等工具也是可以的

【EFFind】
文本搜索工具,这个不是必须的,只是有它的话能更快地从大量的源码中找到自己想要的数据

新浪微博开放了API接口,官方网站:d52K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6W2K9h3u0G2i4K6u0W2j5$3&6Q4x3V1k6%4K9h3E0A6i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2H3K9s2l9`.
这里只需要简单地看看“授权机制说明”那部分,有两种授权方式
其中的Basic Authentication方式需要一个Appkey值,而新浪就是通过这个key来判断你是什么客户端
比如“优酷连接分享”的Appkey是2684493555,这个值在优酷网点击转贴到新浪微博后,在URL地址栏都能看到



再看浏览器的地址栏



也就是说,我们只要在客户端上修改对应的Appkey即可达到欺骗服务器的目的
这也是本教程的最终目的

不过后来分析发现,新浪官方的客户端是没有Appkey的,官方的客户端并不访问这个公开的API接口
而是有自己内部的访问接口,当然我们也不必去关心内部接口,因为我们不是要去做客户端

第一篇就暂时到这,做好准备工作,下篇实战


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (29)
雪    币: 2322
活跃值: (573)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
2
mark,期待后续
2011-3-23 10:19
0
雪    币: 437
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
iphone
2011-3-23 15:22
0
雪    币: 319
活跃值: (1531)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
作者:地球仪
原文:cceK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3S2A6i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7i4c8S2N6r3p5^5x3e0N6Q4x3V1k6T1L8r3!0Y4i4K6u0r3K9i4c8W2L8g2)9J5c8U0j5%4x3r3b7%4z5h3k6V1z5e0M7#2k6U0l9$3x3h3q4V1z5h3j5&6k6X3b7I4j5#2)9J5k6h3S2@1L8h3H3`.

上次把准备工作做好了,这次直就接“开刀”
为了方便后面的操作,先把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客户端
上传的附件:
2011-3-23 17:34
0
雪    币: 437
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
look look
2011-3-23 17:41
0
雪    币: 1233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈,很有趣,试试看
2011-3-23 19:23
0
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我是來看 Android  的
2011-3-23 19:23
0
雪    币: 559
活跃值: (349)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学习!!
2011-3-23 22:58
0
雪    币: 559
活跃值: (349)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark!!!
2011-3-23 23:01
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark,期待下文
2011-3-24 13:04
0
雪    币: 319
活跃值: (1531)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
作者:地球仪
原文:900K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3S2A6i4K6u0W2j5X3q4A6k6s2g2Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7i4c8S2N6r3p5^5x3e0N6Q4x3V1k6T1L8r3!0Y4i4K6u0r3K9i4c8W2L8g2)9J5c8U0u0X3j5U0f1^5j5K6p5J5j5K6R3&6x3r3f1I4x3e0b7@1j5e0V1H3j5e0M7I4x3#2)9J5k6h3S2@1L8h3H3`.

1.寻找iPhone的Key
iPhone的安装包为ipa格式,官方并不提供ipa文件下载
我这里找到的一个地址:5e9K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0y4Y4i4K6u0W2M7$3W2F1j5g2)9J5k6h3y4G2L8g2)9J5k6h3y4F1i4K6u0r3N6s2k6Q4x3V1k6K6L8$3k6@1i4K6u0r3N6$3g2A6j5X3!0Q4x3V1k6%4k6h3W2T1L8#2)9#2k6U0p5H3x3U0b7K6x3o6p5H3i4K6u0W2K9i4m8S2
用IDA打开ipa文件,有很多文件,我们点击Size排序一下,选择最大的那个Weibo



按下Shift+F12调出字符串窗口,设置过滤字符类型,细心找下就能发现一个类似Key的字符



经过测试后,确定该字符串正是iPhone的Key

2.重建Android客户端
我们现在要做的就是将Android客户端中的Key替换掉,再将“android”字符替换为“iphone”
还记得第二篇里提取出的classes.dex文件吗?这次再用baksmali.jar将其反编译
进入控制台,输入:java -jar baksmali.jar -o C:\123\out classes.dex



这时C:\123目录下又多出了个out目录,其中就是反编译出的源码
我们用EF Find搜索这个目录,搜索Android的Key和替换为iPhone的Key
搜索标识字符“"android"”替换为“"iphone"”,注意有引号,这样才表示是一个字符串
修改好后再次进入控制台,输入命令:java -jar smali.jar C:\123\out -o C:\123\_classes.dex



成功后,会多出一个_classes.dex文件,改名为classes.dex后覆盖到客户端安装包里并删除META-INF文件夹
但是这个安装包并不能成功安装,因为文件已经被修改,需要重新进行签名

我们把这个安装包改名为jj.apk放到Auto-sign目录下,双击Signapk.bat即可
稍等一会,目录下会生成签名后的apk安装包,这就是最终的修改后的Android客户端了
(当然这里并不一定要用Auto-sign,别的apk签名工具都可以)

最后,我们先将手机上的客户端卸载掉,再安装这个修改后的客户端并测试



看看下方显示的“来自iPhone客户端”,成功啦!



最后提一下iPad,这个并没有访问内部接口,而是访问的公开接口,Appkey是2849184197
好了,教程到这里就全部结束了,谢谢!
上传的附件:
2011-3-24 22:12
0
雪    币: 52
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
楼主的钻研精神值得敬佩,先收藏了,有空也研究一下
2011-3-24 22:26
0
雪    币: 437
活跃值: (130)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
13
成功搞定,谢谢。
上传的附件:
2011-3-25 07:35
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
14
哇。。厉害。。谢谢楼主了
2011-3-25 22:35
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
高 实在是高
2011-3-26 01:23
0
雪    币: 7622
活跃值: (3415)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
、有意思,mark一下
2011-3-26 13:56
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
17
一直想改symbian的,不知道行不?
2011-3-26 16:53
0
雪    币: 143
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
有空仔细看一下..
2011-3-27 15:38
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
太高了  只有膜拜
2011-4-18 09:59
0
雪    币: 5
活跃值: (35)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
NB。。。。。。
2011-7-23 16:44
0
雪    币: 6051
活跃值: (1441)
能力值: ( LV15,RANK:1473 )
在线值:
发帖
回帖
粉丝
21
这个必须要学习一下,涵盖了android和iphone的逆向技术,感谢!
2011-7-23 19:59
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
呵呵,很好的文章
2011-9-23 13:49
0
雪    币: 1681
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
itf
23
楼主很厉害啊 正在考虑学习呢 以后有问题找你请教啊
2012-9-13 13:54
0
雪    币: 243
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
哈哈,学习了
2012-9-22 18:48
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
只能学习,不能膜拜啊~
2012-9-22 19:32
0
游客
登录 | 注册 方可回帖
返回