安卓APP安全问题越来越多地得到验证。作为移动安全渗透人员,有时有必要对移动apk进行全面渗透测试,而不仅仅是apk本身。此时,通常有必要将静态分析和动态分析结合起来。 静态分析通过观察发现,无需运行代码。在运行代码的情况下进行动态分析,通过跟踪相关内存的分析,如寄存器内容、函数执行结果、内存使用情况等。,分析函数函数,阐明代码逻辑,并利用可能的漏洞。在某些情况下,需要动态分析来进行后续渗透测试。 安卓APP渗透测试中如何挖掘漏洞,对APP进行安全加固的安全文章分享 在apk分析过程中,有时需要分析数据包,但有些数据包受到保护,例如,增加了完整性检查参数,这可以防止数据被篡改。鉴于这种情况,很难进行直接分析,如果要继续进行渗透试验,可能需要进行动态分析。因此,接下来,我将介绍一个完整的分析思想。 一.背景 当测试apk的穿透时,发现apk在发送数据包时传输数据完整性参数。因此,如果渗透测试人员想要分析这些参数,他就不能修改它们。然后为了成功地进行后续的渗透测试,有必要尝试反转数据包的签名算法。 第二,相反的目的 通过静态分析和动态分析,得到数据包的签名算法,从而实现apk的后续渗透测试。 第三,解决办法 首先,作为一名渗透测试人员,你必须考虑程序是如何签署的。理论上,数字签名是给加密信息和信息抽象。服务器汇总接收到的数据,然后匹配汇总的信息,以判断接收到的数据包是否完整和正确。然而,在实战中,可能会有一些差异。这些差异需要简单地通过观察数据包的格式来判断。因此,下一步是抓取数据包并查看传输数据包的模式。 有许多工具用来抓包。你可以使用石膏或填料。这里我使用Fillder抓取工具进行分析。 1.抓住包 抓取数据包的目的是分析数据包并判断其内容。图1和2是通过抓取包装获得的信息。在图中可以看到符号字段,以及其他字段、用户名、方法、t、smscode等。 1填充器捕获数据包样式 2填充器捕获数据包样式 看上面的图,我们可以大致猜测如下:符号字段的构造可能与v、userName、method、t、password中的一个或多个参数有关。当然,这只是猜测,需要进一步分析。 2.分析apk以获得符号构造方法。 拆卸apk进行分析,以判断是否可以通过查看smail代码找到标志的构建位置。使用的工具是机器人杀手(AndroidKiller)或APKide。 3,反汇编apk获取程序代码信息 当apk被加载到AndroidKiller中时,您可以看到apk的smail代码信息,如图3所示。然后可以进行分析。首先,我考虑静态分析,并通过搜索关键字符号进行搜索。如果我能找到它,那就容易多了。但是后来,我发现我可以找到很多相关的信息,但不能作为参考,如图4所示。 4,搜索符号关键字的结果 因此,我们必须改变我们的想法。经过分析,觉得数据包应该在登录处发送,如果数据包有签名参数,那么就必须有一个建立签名的地方。所以我尝试开始搜索,最终在LoginActivity中找到了快速登录的功能,如图5所示。 5,登录函数smail实现代码 看到这里没有发现标志结构,我们继续深入分析。分析loginQuickRequest类:它包含在发出四个请求时要显示的参数信息。如图6所示。 6,对应于loginquickrequest类的smail代码 仍未找到所需的符号参数,并进一步跟踪了BasicRequest类。我很幸运终于在BasicRequest.class中找到了符号参数。 7,符号构建了相应的java代码 在这里,我们成功地看到了期待已久的符号字段,然后我们可以分析代码。 localHashMap.put("sign "),a . a .(LocalHashMAp,(字符串)LocalHashMAp . get(" method ")); 看到localhashmap,您大致知道这里使用的是映射容器,这个函数的第二个参数对应于符号的值。继续跟踪,最后追溯到solibrary -libNoodleMD5 .因此,MD5加密是在那里执行的。如图8和9所示。 8,其中构造了8个标志 9,sign调用本机代码来执行在这个阶段,分析so代码显然是合乎逻辑的。图10是apk使用的so库。 10,apk主键使用的一些so库 分析so库需要IDA工具。IDA是一个强大的逆向分析工具,支持动态分析。利用IDA加载相应的加密库,然后设置断点,进行动态跟踪分析,找到加密函数。So文件中的加密函数如图11所示:通常,它应该是smail代码。为了方便起见,这里使用了IDA的转换函数。IDA按F5键将smail代码转换成c类程序。此时,需要先导入JNI函数,然后才能获得下面显示的结果。 11,so库中相应的加密函数 通过对这段代码的简单分析,我们可以看到一些关键功能,strjoin (PTR,“6c 57 ab 91 a 1308 e 26 b 797 F4 CD 382 AC 79d”),字面意思是拼接字符串。接下来是MD5Init、MD5Update、MD5Final和其他函数。这些功能是形成MD5加密的完整过程。从这里的分析基本上可以知道包签名的算法,最后一步是验证。 最后,通过对注册信息的单步跟踪和观察,我们可以成功地找到规则并获得符号的构造方法。这种方法可以用来编写自动工具,快速生成任何所需数据的签名。 四.签名算法 签名算法的原理是首先获取URI的参数信息(方法、用户名、t、密码、v等)。),然后拼接一个字符串:6c 57 ab 91 a 1308 e 26 b 797 F4 CD 382 AC 79d(字符串是固定的)。获取长字符串,最后用MD5值对长字符串进行加密,成功获取签名信息签名。 V.摘要 APK只写在SO文件中的关键代码无法得到有效保护,需要使用其他保护机制,如代码反调试机制、混淆机制等。只有通过应用各种保护方案,才能有效防止反向攻击,如果对app有渗透测试的需求可以联系专业的网站安全公司来测试安全性,确保app的安全稳定运行。 |