如今移动互联网已经完全融入到我们的生活中,各类APP也是层出不穷,APP在我们购物、出行、教育、医疗、金融等方面提供了极大的便利。但从实际情况看,目前Android平台恶意代码数目呈指数级增长,并且出现了多种对抗分析、检测、查杀的技术,恶意代码植入、应用内付费破解、窃取隐私、恶意扣费等行为普遍存在,威胁各行业用户信息和财产安全。

本文通过通付盾移动安全专家对一款金融类APP应用逆向分析,几个简单步骤实现自动脚本遍历手机号列表,判断手机号是否是App的注册账户,并进行记录统计,进一步揭示目前市面上部分APP忽视安全问题所带来的安全风险。以下为APP逆向全过程——

打开网易新闻 查看精彩图片

登录方式有两种:一种输入手机号、短信验证码,另外一种是输入手机号、密码,我们尝试对第二种登录方式进行逆向。

打开网易新闻 查看精彩图片

首先,我们通过抓包工具Charles抓取应用登录操作的网络数据包。然后分析抓到的包数据,得出该应用通过https协议,同应用服务端进行数据交互。对请求报文、响应报文进行分析后,发现请求报文除了用户名、密码被加密过外,其它信息基本是明文,响应报文同样是明文。进一步分析后,对于该App只需知道登录用户名、密码的加密算法,就能模拟登录请求。最后编写自动化执行脚本进行登录请求,整个破解工作就此完成。

打开网易新闻 查看精彩图片

通过对抓包得到的网络数据包分析后,破解的关键点:我们必须掌握App所采用的数据加密算法。

我们利用反编译工具Jeb对目标 APK进行逆向分析。通过Jeb工具,我们可以查看该APP应用的程序清单文件、资源文件、附件文件、库文件等,方便我们对应用进行分析。

通过分析,发现该APP未进行安全加固,也未采取其它保护措施,仅对部分代码进行了混淆。我们只要准确定位到APP中处理登录的代码模块,应该就能找到用户名、密码加密算法的相关核心代码。

为了方便特征值的搜索,我们在Jadx中打开该应用,根据登录时反馈的提示信息,搜索“请输入手机号码”、“请输入密码”、“该手机号未注册”等关键词。搜索“请输入手机号”,有5条结果。采用排除法,我们可以最终确定第二条搜结果应该就是登录代码所在位置。

打开网易新闻 查看精彩图片

选择第二条搜索结果,进入登录代码。

打开网易新闻 查看精彩图片

找到了处理登录的业务代码后,我们看到了请求报文中用户名、密码参数信息相关代码,确认用户名、密码的加密逻辑也在业务代码中,使用的是AES加密。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

过进一步跟踪分析,我们也找到了应用发起HTTPS请求的代码。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

根据逆向找到的登录代码、HTTPS请求代码,结合Charles抓包数据,我们编写一个简单的模拟登录操作脚本,随机输入未注册过的手机号、密码,看下响应报文是否包含“该手机号未注册”的信息。比如输入手机号:138987654321,密码:123456,响应报文返回内容包含了“该手机号未注册”的信息。破解成功!

打开网易新闻 查看精彩图片

通过上述逆向分析可以看出,没有进行安全加固的应用,是如此脆弱。部分应用几乎没有安全保护措施,完全对外暴露了应用业务代码。因此,后期对APP的安全防护处理工作就显得至关重要。