对某旅行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中存在什么样的冗余代码问题?
代码中存在大量性能监控的冗余代码,可能影响性能。
➡️