对某旅行APP的逆向分析

💡 原文中文,约2900字,阅读约需7分钟。
📝

内容提要

本文分析了目标APP的技术架构,使用开源库进行改写,涉及TCP发包、数据加解密、压缩方案及protobuffer解析。通过hook方法打印堆栈,分析加密流程和压缩接口,并探讨性能监控及冗余代码问题。

🎯

关键要点

  • 目标APP的技术架构分析,采用多种开源库进行改写。

  • 怀疑使用开源ssl.so进行自写TCP发包,protobuffer解析使用io.protobuf自写魔改。

  • 压缩方案采用Zstd或GZip,Zstd为Facebook开源的压缩库,固定等级为3。

  • token生成方式为随机数与魔改MD5签名,加解密方案包括XOR和AEScbc。

  • TCP分析流程中,通过hook方法打印堆栈以定位目标方法。

  • 加密过程分析中,buileRequest返回值主要走getRequestDataBeanV6,ListUtil.combineByteArr用于合并数组。

  • encode的产生方式有三种,使用hook确定加密方式为encodeByXor,压缩使用getCompressProvider().compress。

  • encodeByXor实现为对字节数组进行异或操作。

  • 压缩接口定义为SOTPCompressProvider,实际调用CTZ.a方法使用Facebook的zstd压缩库。

  • protobuff反序列化分析中,clientToken为魔改MD5对随机数的签名,Serialize.writeMessage将对象序列化成字节数组。

  • RequestHead类和BusinessBean基类的定义示例,存在与标准io.protostuff库的区别。

  • 代码中存在大量性能监控的冗余代码。

🔎

延伸解读

技术架构的复杂性

目标APP的技术架构采用了多种开源库进行改写,这意味着开发团队可能在追求灵活性和功能扩展性方面做出了努力。然而,使用魔改的开源库可能会引入不必要的复杂性和潜在的安全风险,开发者需谨慎评估这些选择的长期影响。

加密与压缩方案的选择

文章提到的加密方案包括XOR和AEScbc,而压缩方案则使用了Facebook的Zstd库。选择合适的加密和压缩算法对于保护数据安全和提高传输效率至关重要。开发者应关注这些方案的性能表现及其在实际应用中的适用性。

性能监控的冗余问题

文中指出代码中存在大量性能监控的冗余代码,这可能导致系统性能下降。开发者在进行性能监控时,应确保监控代码的必要性和有效性,以避免不必要的资源浪费。

延伸问答

目标APP使用了哪些开源库进行改写?

目标APP采用了多种开源库进行改写,包括Zstd和GZip用于压缩,io.protobuf用于protobuffer解析。

目标APP的加解密方案是什么?

目标APP的加解密方案包括XOR和AEScbc两种方式。

如何分析目标APP的TCP发包过程?

可以通过hook SocketInputStream和SocketOutputStream的方法打印堆栈,从而定位到目标方法。

目标APP的压缩方案使用了什么库?

目标APP的压缩方案使用了Facebook开源的Zstd压缩库,压缩等级固定为3。

protobuffer反序列化的过程是怎样的?

protobuffer反序列化过程中,clientToken是魔改MD5对随机数的签名,Serialize.writeMessage将对象序列化成字节数组。

目标APP中存在什么样的冗余代码问题?

代码中存在大量性能监控的冗余代码,可能影响性能。

🏷️

标签

➡️

继续阅读