12306 2.2版本SO的分析和修复
来源:互联网 发布:阿里企业邮箱端口 编辑:程序博客网 时间:2024/05/22 14:03
这篇文章纯粹属于安全分析研究,请勿用于非法用途。如有侵犯到厂家,请告知作者删除
老早写的,现在已经2.3版本了,把这个放出来,这个方法要比之前的简单很多。
12306的so加载顺序是先libDexHelper.so后libcheckcode.so
一、修复libDexHelper.so
我们先把libDexHelper.so dump出来,并修复,修复后的IDA分析结果如下图:
libDexHelper.so修复好后,备用,后面需要用到这个so来辅助分析。
二、修复libcheckcode.so
先dump出libcheckcode.so
之前在_mmap2函数上dump出原始libcheckcode.so方式2.2版本已经无效了,
那么这次我们就直接等功能已经跑起来后,直接把libcheckcode.so内存dump出来
把这个dump用修复工具修复
三个关键的函数checkcoode,decheckcode,JNI_Onload,如下图所示
IDA分析结果都是arm指令集,但是JNI_OnLoad后面接着的函数却是thumb指令集,很显然,这里其实被故意改了函数的偏移。那么偏移了多少呢?
对dlsym进行HOOK,输出如下:
JNI_OnLoad的地址是0x525a3d11-0x52585000=0x1ED11
跟IDA分析出的0x1ED50相差了0x3F
把0x1ed10指向的地址分析为函数,如下图所示,已经是正常的函数了:
checkcode和decheckcode两个函数则不行,因为这两个函数是处于加密状态
checkcode和decheckcode两个函数是动态加解密的,该函数运行前被解密,运行完后又加密回去。
那么解密点,就要找到这个动态加解密的位置。
把590c3000-100__Java_com_MobileTicket_CheckCodeUtil_checkcode.dmp文件用IDA打开(指定为arm指令集)
libDexHelper.so的基址是0x51a25000,则可以计算出解密函数地址是0x51a4c305-0x51a25000=0x27305,加密函数是0x51a4c2ed-0x51a25000=0x272ed
解密函数:
在这里的解密函数上进行hook,等其解密完后,把libcheckcode.so dump出来即可。
因为这里有两个函数decheckcode和checkcode,所以需要dump两次。
可以在解密函数里通过输入长度的大小不同来分别dump
将直接dlopen完dump出的libcheckcode.so和解密函数执行完dump出来的进行二进制比较,可以看到有一部分是不一样的,不一样的地方,就是被解密的函数。
那么剩下的工作就是把这两个解密后的函数二进制,写个覆盖到dlopen完的dump上,即可。这个工作可以用脚本来实现。
剩下需要修复的工作是:
1.把JNI_OnLoad、checkcode、decheckcode三个函数地址减去0x3f
2.修复so,使其可以正常运行
3.把init_proc函数去掉,不让其再进行解密
(创建了一个Android逆向分析群,欢迎有兴趣的同学加入,群号码:376745720)
- 顶
- 0
- 踩
- 12306 2.2版本SO的分析和修复
- 12306 Android客户端的libcheckcode.so解密及修复
- 12306之梆梆加固libsecexe.so的脱壳及修复
- Android so库文件的区节section修复代码分析
- 修复SO BOM 的IBASE错误
- 腾讯应用加固的脱壳分析和修复
- MYSQL数据表损坏的原因分析和修复
- 腾讯应用加固的脱壳分析和修复
- glibc CVE-2015-7547漏洞的分析和修复方法
- MYSQL数据表损坏的原因分析和修复方法小结
- MYSQL数据表损坏的原因分析和修复方法小结
- MySQL表的检查、修复、分析和优化
- android5.0版本对.so文件适配的简单测试分析
- 热修复tinker 更新.so出现的问题
- 集成阿里热修复找不到so的问题
- so文件的简单分析
- android热修复--阿里热修复使用和源码分析
- Indigo版本Gazebo2.2.3的启动修复
- 同步异步
- nyist 组合数
- nil null Nil 的区别
- 电商系统Broadleaf文档翻译(七) – 扩展实体extending entities
- C++的4种类型转换关键字及其特点
- 12306 2.2版本SO的分析和修复
- ZOJ 3844 Easy Task(模拟+哈希 | 暴力)
- 关于intern()方法
- 第二周项目4【2】-用循环求
- ADO几种数据库连接方式
- 正则表达式三 (修正模式)
- shell之网络相关配置文件
- [iOS] 在循环中使用setNeedsDisplay来调用drawRect的方法
- Java初级工程师面试题精选2