对某旅行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使用了哪些开源库进行改写?

目标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中存在什么样的冗余代码问题?

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

➡️

继续阅读