缘起

应用开发过程中要对接支付宝支付,简单体验下来,市面上有三种实现方式:

  1. 网页版
  2. 快捷支付服务插件版
  3. 某团版(姑且这么叫,由于先发现某团是这种实现,其实某点评也是这种)

前2种没什么疑问,应用广泛,实现上支付宝也都给出了SDK,第3种实现各种“诡异”:

  1. 完全是App原生的体验,没有发现支付宝有公开的支持方式
  2. 没有在应用数据包和SD卡上找到任何痕迹
  3. 某团退出登录再登录依然可用,卸载再安装依然可用(免登录列出支付信息,只需要输入支付密码),某团登录一次,安装大众点评也直接可用。
  4. 手机恢复出厂设置依然可用,恐怖吧?

探究竟

验证查找下来觉得各种不可思议,找不到痕迹,最后只能放大招:重装系统。这招倒是有效了,但是信息存在哪里了呢?各种搜索无效。很恐怖,很费解,各种不舒服有木有?

这问题不搞明白得一直不舒服下去。。。所以决定反编译看看某团到底搞了什么鬼(想当然的认为Mac下反编译不好处理,还拖了2天,真搞起来发现像linux下一样简单快捷。。)

虽然反编译出来的代码有误差,但是还是很快定位到一切诡异的所在,实现是这样的:算是有一个内部的api吧,应用生成一个机器指纹(嗯,就这么叫吧,唯一的不变的机器相关的信息,由一些可获取的基本信息组合而来,即使机器恢复出厂设置这个信息也不会变),然后提交到支付宝的一个请求地址(这里不贴了,有兴趣的同学反编译下吧~~),获取用户支付宝账号的信息。每次支付之前,用机器指纹查询支付信息,然后完成支付。

所有的诡异都明了了:这是一个私有Api,少数App可用,登录状态存在服务器上,本地根本不会保存,由于不变的机器指纹,卸载重装或者其他应用来使用结果都一样,恢复出厂设置,也没有改变机器指纹。只要不重装,一次登录,时时可用,处处(有权使用Api的App)可用,目前尚不知道会不会有时间有效期,我表示只能呵呵了。。。

问题搞清楚了,心里敞亮了,可是这做法也太狠了点吧?

额外赠送

拿到Url后,Google查询了一下,信息有限,不过发现这个Url,支付宝的客户端也在用。同时发现了一个非常不错的服务:Mobile Sandbox

分析APK文件,生成分析报告,支持静态分析和动态分析,可以获得很多信息:

  1. 是否有恶意病毒功能
  2. 可能的危险调用
  3. 有那些资源文件
  4. 使用的硬件特性,使用的权限,调用的系统Api
  5. 调用的Intents,使用的Activitys,Providers,服务和广播接收器
  6. 请求了那些Url

附上一个针对支付宝的分析报告:http://mobilesandbox.org/report/?q=314747

有意思的About页面:http://mobilesandbox.org/about/

服务非常不错,但是也有很多不足:服务还在开发完善中,上传的Apk文件要排队等分析,三天前上传的文件还是idle状态;没有做中文支持,搜索中文报错,上传的文件中文名乱码;搜索功能比较弱智。