应用开发过程中要对接支付宝支付,简单体验下来,市面上有三种实现方式:
前2种没什么疑问,应用广泛,实现上支付宝也都给出了SDK,第3种实现各种“诡异”:
验证查找下来觉得各种不可思议,找不到痕迹,最后只能放大招:重装系统。这招倒是有效了,但是信息存在哪里了呢?各种搜索无效。很恐怖,很费解,各种不舒服有木有?
这问题不搞明白得一直不舒服下去。。。所以决定反编译看看美团到底搞了什么鬼(想当然的认为Mac下反编译不好处理,还拖了2天,真搞起来发现像linux下一样简单快捷。。)
虽然反编译出来的代码有误差,但是还是很快定位到一切诡异的所在,实现是这样的:算是有一个内部的api吧,应用生成一个机器指纹(嗯,就这么叫吧,唯一的不变的机器相关的信息,由一些可获取的基本信息组合而来,即使机器恢复出厂设置这个信息也不会变),然后提交到支付宝的一个请求地址(这里不贴了,有兴趣的同学反编译下吧~~),获取用户支付宝账号的信息。每次支付之前,用机器指纹查询支付信息,然后完成支付。
所有的诡异都明了了:这是一个私有Api,少数App可用,登录状态存在服务器上,本地根本不会保存,由于不变的机器指纹,卸载重装或者其他应用来使用结果都一样,恢复出厂设置,也没有改变机器指纹。只要不重装,一次登录,时时可用,处处(有权使用Api的App)可用,目前尚不知道会不会有时间有效期,我表示只能呵呵了。。。
问题搞清楚了,心里敞亮了,可是这做法也太狠了点吧?
拿到Url后,Google查询了一下,信息有限,不过发现这个Url,支付宝的客户端也在用。同时发现了一个非常不错的服务:Mobile Sandbox。
分析APK文件,生成分析报告,支持静态分析和动态分析,可以获得很多信息:
附上一个针对支付宝的分析报告:http://mobilesandbox.org/report/?q=314747
有意思的About页面:http://mobilesandbox.org/about/
服务非常不错,但是也有很多不足:服务还在开发完善中,上传的Apk文件要排队等分析,三天前上传的文件还是idle状态;没有做中文支持,搜索中文报错,上传的文件中文名乱码;搜索功能比较弱智。