这篇文章纯粹属于安全分析研究,请勿用于非法用途。如有侵犯到厂家,请告知作者删除
12306Android客户端每个请求包都会带个baseDTO.check_code(如下图)作为数据包安全及完整性校验码,这个校验码由libcheckcode.so生成
如果需要模拟购买火车票的过程,就要调用这个libcheckcode.so,不过这个SO使用dlopen无法加载。其ELF头,如下图所示,红框内表示ProgramHeader,里面的内容不符合elf格式规范
那它是如何加载起来的呢,猜测是借助了其它SO做了解密,下图列出lib/armeabi里的SO
分析后确定解密的工作是由libDexHelper.so来做的。 libDexHelper.so是最先加载的so,application调用的时候就加载了这个SO
libDexHelper.so自身做了加壳,这个壳不用花心思去脱,等它加载起来后,整个SO DUMP出来,将内存文件对齐修正一下就可以用IDA分析了
libDexHelper.so带有JNI_OnLoad,它会调用一个JNI_ALIYUN_ONLOAD函数
从函数名字上看,这个安全方案应该是由阿里云来做的
JNI_ALIYUN_ONLOAD内会做如下HOOK动作