通过逆向Anan刷机大师得到集成三星线刷的思路
2016-02-22 12:59
323 查看
0x01发现设备
一旦有线刷模式的三星手机通过USB连接上PC,三星的USB转COM口驱动ssudmdm.sys就会在注册表
键为\HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM增加值项\Device\ssudmdmXXXX,如下图1:
![](https://img-blog.csdn.net/20160222125652529)
图1
很明显,三星的设备都是\Device\ssudmdm开头,后面的XXXX是由驱动分配的序号,这里配合Windows的USB的热插拔消息能很好的发现三星设备。
0x02 集成安安的三星刷机shell
安安的三星的刷机shell其实是改过后的odin3,如图2,通过修改程序入口处, LoadLibrary一个名为CONDLG32.dll的动态链接库以达到在进程中修改odin3程序行为的目的。我们不妨调用它的shell与
![](https://img-blog.csdn.net/20160222125658408)
图 2
odin3进行交互线刷,能省去不少精力。相应的shell文件以及其依赖的文件全部放在报告中odin文件夹下。
详细的交互流程请见报告中src文件夹下的demo工程http://download.csdn.net/detail/autohacker/9438947
![](https://img-blog.csdn.net/20160222125703092)
图3
全部逻辑全部在函数startshell里面,startshell的参数说明如下:
Id – 线刷ID , shell会通过这个id去查找注册表查找对应的串口号,所以我们需要先准备好注册表相应的值项(详见代码)
deviceName– 串口设备名 , 就是上一节我们介绍的\Device\ssudmdmXXXX
comport – 串口号
romFileName– 刷机包路径 , 这里即支持安安的刷机包,也支持三星原版的刷机包
通过匿名管道重定向shell的输出流后,我们能清晰地看到整个详细的刷机进程,如下图
![](https://img-blog.csdn.net/20160222130113238)
图4
0x03 如何提取安安的刷机包
安安的dx3刷机文件是一种对tar格式的刷机rom的压缩加密之后的自定义文件格式,它通过hook住kernel32.CreateFileW,kernel32.ReadFile等文件操作函数实现一个微型文件沙盒从而对dx3文件进行解密并无缝调用odin3的相关线刷函数,如下图5,kernel32.ReadFile的函数开头处被inline hook。
![](https://img-blog.csdn.net/20160222125730186)
图5
因此,研究它的文件解密算法还不如直接注入到shell进程里面去调用被它hook住的相关函数,具体逻辑请参见报告中src文件夹下的dumptar工程,它是一个dll工程,我们需要把dumptar.dll注入到shell进程里面去,因此这里采用微软detours里面的工具setdll将这个dll写入到shell的导入表里面去,如下图:
![](https://img-blog.csdn.net/20160222130056957)
运行安安优化大师进行刷机既可以将刷机tar文件解密到c:\parker.tar。
0x04 总结
安安解锁三星机型的具体逻辑在rom包的相关文件中,直接拷贝安安刷机包中aboot.mbn即可实现对三星手机解锁。
一旦有线刷模式的三星手机通过USB连接上PC,三星的USB转COM口驱动ssudmdm.sys就会在注册表
键为\HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM增加值项\Device\ssudmdmXXXX,如下图1:
图1
很明显,三星的设备都是\Device\ssudmdm开头,后面的XXXX是由驱动分配的序号,这里配合Windows的USB的热插拔消息能很好的发现三星设备。
0x02 集成安安的三星刷机shell
安安的三星的刷机shell其实是改过后的odin3,如图2,通过修改程序入口处, LoadLibrary一个名为CONDLG32.dll的动态链接库以达到在进程中修改odin3程序行为的目的。我们不妨调用它的shell与
图 2
odin3进行交互线刷,能省去不少精力。相应的shell文件以及其依赖的文件全部放在报告中odin文件夹下。
详细的交互流程请见报告中src文件夹下的demo工程http://download.csdn.net/detail/autohacker/9438947
图3
全部逻辑全部在函数startshell里面,startshell的参数说明如下:
Id – 线刷ID , shell会通过这个id去查找注册表查找对应的串口号,所以我们需要先准备好注册表相应的值项(详见代码)
deviceName– 串口设备名 , 就是上一节我们介绍的\Device\ssudmdmXXXX
comport – 串口号
romFileName– 刷机包路径 , 这里即支持安安的刷机包,也支持三星原版的刷机包
通过匿名管道重定向shell的输出流后,我们能清晰地看到整个详细的刷机进程,如下图
图4
0x03 如何提取安安的刷机包
安安的dx3刷机文件是一种对tar格式的刷机rom的压缩加密之后的自定义文件格式,它通过hook住kernel32.CreateFileW,kernel32.ReadFile等文件操作函数实现一个微型文件沙盒从而对dx3文件进行解密并无缝调用odin3的相关线刷函数,如下图5,kernel32.ReadFile的函数开头处被inline hook。
图5
因此,研究它的文件解密算法还不如直接注入到shell进程里面去调用被它hook住的相关函数,具体逻辑请参见报告中src文件夹下的dumptar工程,它是一个dll工程,我们需要把dumptar.dll注入到shell进程里面去,因此这里采用微软detours里面的工具setdll将这个dll写入到shell的导入表里面去,如下图:
运行安安优化大师进行刷机既可以将刷机tar文件解密到c:\parker.tar。
0x04 总结
安安解锁三星机型的具体逻辑在rom包的相关文件中,直接拷贝安安刷机包中aboot.mbn即可实现对三星手机解锁。
相关文章推荐
- .Net 转战 Android 4.4 日常笔记(3)--目录结构分析
- .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
- .Net 转战 Android 4.4 日常笔记(5)--新软件Android Studio 0.5.8安装与配置及问题解决
- .Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
- .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
- .Net 转战 Android 4.4 日常笔记(8)--常见事件响应及实现方式
- .Net 转战 Android 4.4 日常笔记目录
- .Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]
- .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用
- Golang语法总结(三):可见性规则(公有与私有,访问权限)
- 用谷歌浏览器来当手机模拟器
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- .Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
- phpexcel使用说明1
- codeforces 628F. Bear and Fair Set 网络流
- EF异常:“System.InvalidOperationException”类型的未经处理的异常在 mscorlib.dll 中发生
- 跟我学数据结构之图
- Android学习笔记-广播机制的一些简单实例
- 去除input标签/button按钮原本样式 并利用js赋值,select 中Option的增加与删除
- sqoop 导入数据的时候出现Unsupported major.minor version 52.0的问题描述