首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我是如何做apk算法逆向分析的?

我们在做渗透测试时对App抓包,会发现基本上请求都有加密,可见挖掘Android漏洞,逆向分析是个很重要技能,感谢zeroisone分享。

「破壳社区ID: zeroisone」

0x00 选择入口

大部分人的渗透习惯,在app算法分析中都喜欢从登录处开始入手,如果安装在模拟器的app点登录后直接崩溃,可以试试换个入口点。

很多app最终调用的算法函数名称存在encrypt、decrypt关键字,用jadx反编译apk,全局搜索关键字"decrypt"。

打开SecurityCryptor类,看到调用了动态链接库(libsgmain.so)进行加密,关键加密算法应该就在这里了。

看起来似乎很顺利,记录下之前的曲折过程。

0x01 寻找decrypt

一开始莫名的搜索了“decode”关键字。

看到了DES关键词,打开查看挺像是加解密函数。

搜索哪处调用了util.y函数

进一步追踪

加密函数y.a(str,str2)具有不同的参数,利用xposed hook加密函数y.a(str,str2)。

在意见反馈提交信息后并没有看到hook日志,也就是说思路错了,这函数不是最终调用的加密函数,倒是在logcat中看到url after encode信息。

全局搜索logcat信息

关键函数部分jadx反编译不出来

查看smali代码后有点吃力,使用smali动态调式分析。

0x02 smali动态调试

对app进行二次打包,修改AndroidManifest.xml中application,添加

android:debuggable="true",重新打包后发现apk对签名做了校验,网络通讯功能无法使用。

比较方便的方法:

1.安装xposed框架(需要root,刷第三方recovery),之后安装xinstaller模块,设置xistaller启动专家模式,在其他设置中开启“调试应用”

2.用模拟器进行调试,ro.debuggable默认为1,不需要二次打包。

Android Studio 动态调试Smali

1)安装smalidea

下载 Android Studio 插件 smalidea-0.05.zip,

下载地址:https://bitbucket.org/JesusFreke/smali/downloads/

1.打开Android Studio,按Alt+Ctrl+S打开设置界面,点击Preferences—— Plugins——Install

plugin from disk…——选择下载好的smalidea-0.05.zip。

2.重启Android Studio。

2)反编译apk

用apktool 反编译apk,将反编译好的工程导入Android Studio,导入完Android studio提示有个警告,如下图所示,点击Configure。

在终端运行,开启app调试模式

adb shell am start -D -n

com.bbk.appstore/.ui.AppStore

模拟器如下图所示的话说明成功。

回到android studio处,已经自动帮我们构建好了调试环境,打开smali,找到前面的关键函数处下断点。

3)开始动态调试

在右下角的Watches窗口可以添加变量,查看各个寄存器的值,然后按下f8单步运行这个apk ,找到具体的加密函数,看它到底是怎么加密流量的:

后续调试发现程序调用了一个动态链接库进行加密,然后把加密结果再传递出来,又回到了开头,下面使用Brida调用libsgmain.so的加解密函数,方便测试。

0x03 使用Brida解密函数

Brida是一款 Burp Suite 扩展,作为一座桥梁连接着Burp Suite以及Frida,以帮助用户修改应用程序与后端服务器之间的通信数据为己任。在分析移动端应用时遇到应用使用随机密钥式对称加密,如果不知道其使用的密钥就无法篡改其通信数据,通过Burp也就无法对所有的交换数据进行更改了,于是Brida就这样出现在我们视野中。

参考:https://www.anquanke.com/post/id/86567

配置好Frida好后,启动Brida。

Brida脚本代码如下:

burp中使用右键调用contextcustom2对请求参数解密

0x04 后续

使用Brida插件,省去了分析so文件加密算法的时间,我们可以直接调用应用中的方法,来对数据进行加/解密 ,而不用去逆向对应的方法。为了更深入的分析Android NDK逆向,后续会使用IDA动态调试so文件,进一步练手。

开壳计划

破壳漏洞社区「开壳」版块,是为了个大家提供一个知识分享、探索交流的空间,技术的探索是无止境的,攻防的对抗也是如此,甲方同学可以总结自己的防御经验,白帽子也可以站在攻击者角度去谈谈自己的见解,这正是我们一直鼓励的攻防思路的碰撞。你会发现攻防思路不停的碰撞,会让你对安全有更全面对认知,同时也打开你思路更多的可能性,我们希望把大家遇到过的各种场景收集起来,给后来者更多启发。

开壳——让姿势探索无限扩大

点击可查看社区原文

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G0GIVO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券