Cruzer Profile 原理分析
2015-09-19 22:13
190 查看
(此文写于2007年,部分概念现在不适用)
(原博客空间不靠谱,内容都被截断了,文章里...的部分基本找不回来了)
今日购得Cruzer Profile一枚,由网上得知该程序无法运行在linux和vista系统上,于是乎试图分析其原理。
相关文件如下:
F:\Program Files\eXeScope\cruzer>dir /b /s
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup.exe
F:\Program Files\eXeScope\cruzer\CruzerProfile.exe
F:\Program Files\eXeScope\cruzer\help
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup\biologon.dll
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup\gdiplus_dll_2_____X86.3643236F_FC70_11D3_A536_0090278A1BB8
F:\Program F
……
上回书说到几个核心文件,这次继续:
用PEid查看,发现是标准的Visual C++编写,没有加壳。看来大厂确实有大家风范,不像某些作者,一个小程序也要层层加壳,唯恐别人侵犯了他的知识产权。
用ollydbg跟了一会主程序,写的很清晰,没有花指令之类。不过tfm.dll是用LoadLibrary加载的,看来是动态调用。
再看tfm.dll,也是标准的Visual C++,还是debug模式。各种函数写的很清楚,不过我的反汇编技术太差,很多都看不懂。
最开始的想法是dll劫持:自己编一个tfm.dll让exe调用,然后再调用真正的dll算出结果,最后把结果返回给exe。这样,调用参数和返回值就都可以截获。
……
前面说到,研究Cruzer Profile 原理的主要目的是让它能在linux下工作。不过现在看来没什么必要,因为upek早就把一切安排好了,只是没说而已。
让linux支持Cruzer Profile,只要在内核里改一个选项即可。不过这里卖个关子,给个bash脚本文件,自动完成加载工作。
cruzermount.sh
……
上回书说到网上已经有api参考,本以为接下来一切顺利,结果发现远没有这么简单:
事情是由PTOpen()引起的。这个函数用于打开设备。按照api上给的格式调用,结果返回错误;而且,错误代码在api里找不到。这时才想到,为了配合sandisk的u盘,upek一定做了修改。
从函数上看,新增了几个:
PTSndkCancelCurrentOperation
PTSndkGetDriveLetters
PTSndkQueryDeviceStatus
PTSndkReadFlash
PTSndkReinitializeKey
PTSndkSetASEPartitionLock
PTSndkWriteFlash
Sndk是sandisk的缩写,这几个函数显然是Cruzer Profile特有的。
……
因为找实验室的原因,隔了这么久,现在既没有时间也没有精力继续研究了。现在再把最后一点能想到的东西记下来。
1 关于兼容性的问题。现在Cruzer Profile只支持2000/XP操作系统。Sandisk曾放风出来说要升级程序兼容Vista,最后也不了了之。其实不是Sandisk偷懒,实在是他们无能为力:不兼容的不是cruzerprofile.exe,而是tfm.dll,这个由UPEK提供的文件。估计UPEK撒手不管了,Sandisk也没辙。
2 还是关于兼容性的问题。难道说Cruzer Profile只能在2000/XP下使用?显然不是。UPEK那帮人早就考虑到可能出这样的问题了。Cruzer Profile的指纹采集、比对、存取权限都是由硬件完成的,跟软件没任何关系。即使没有软件照样使用。
……
(原博客空间不靠谱,内容都被截断了,文章里...的部分基本找不回来了)
今日购得Cruzer Profile一枚,由网上得知该程序无法运行在linux和vista系统上,于是乎试图分析其原理。
相关文件如下:
F:\Program Files\eXeScope\cruzer>dir /b /s
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup.exe
F:\Program Files\eXeScope\cruzer\CruzerProfile.exe
F:\Program Files\eXeScope\cruzer\help
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup\biologon.dll
F:\Program Files\eXeScope\cruzer\CruzerLoginSetup\gdiplus_dll_2_____X86.3643236F_FC70_11D3_A536_0090278A1BB8
F:\Program F
……
上回书说到几个核心文件,这次继续:
用PEid查看,发现是标准的Visual C++编写,没有加壳。看来大厂确实有大家风范,不像某些作者,一个小程序也要层层加壳,唯恐别人侵犯了他的知识产权。
用ollydbg跟了一会主程序,写的很清晰,没有花指令之类。不过tfm.dll是用LoadLibrary加载的,看来是动态调用。
再看tfm.dll,也是标准的Visual C++,还是debug模式。各种函数写的很清楚,不过我的反汇编技术太差,很多都看不懂。
最开始的想法是dll劫持:自己编一个tfm.dll让exe调用,然后再调用真正的dll算出结果,最后把结果返回给exe。这样,调用参数和返回值就都可以截获。
……
前面说到,研究Cruzer Profile 原理的主要目的是让它能在linux下工作。不过现在看来没什么必要,因为upek早就把一切安排好了,只是没说而已。
让linux支持Cruzer Profile,只要在内核里改一个选项即可。不过这里卖个关子,给个bash脚本文件,自动完成加载工作。
cruzermount.sh
……
上回书说到网上已经有api参考,本以为接下来一切顺利,结果发现远没有这么简单:
事情是由PTOpen()引起的。这个函数用于打开设备。按照api上给的格式调用,结果返回错误;而且,错误代码在api里找不到。这时才想到,为了配合sandisk的u盘,upek一定做了修改。
从函数上看,新增了几个:
PTSndkCancelCurrentOperation
PTSndkGetDriveLetters
PTSndkQueryDeviceStatus
PTSndkReadFlash
PTSndkReinitializeKey
PTSndkSetASEPartitionLock
PTSndkWriteFlash
Sndk是sandisk的缩写,这几个函数显然是Cruzer Profile特有的。
……
因为找实验室的原因,隔了这么久,现在既没有时间也没有精力继续研究了。现在再把最后一点能想到的东西记下来。
1 关于兼容性的问题。现在Cruzer Profile只支持2000/XP操作系统。Sandisk曾放风出来说要升级程序兼容Vista,最后也不了了之。其实不是Sandisk偷懒,实在是他们无能为力:不兼容的不是cruzerprofile.exe,而是tfm.dll,这个由UPEK提供的文件。估计UPEK撒手不管了,Sandisk也没辙。
2 还是关于兼容性的问题。难道说Cruzer Profile只能在2000/XP下使用?显然不是。UPEK那帮人早就考虑到可能出这样的问题了。Cruzer Profile的指纹采集、比对、存取权限都是由硬件完成的,跟软件没任何关系。即使没有软件照样使用。
……
相关文章推荐
- Leetcode66: Path Sum
- 为什么整个互联网行业都缺前端工程师?
- popupMenu-----弹出菜单
- 屌丝之歌
- mysql学习笔记——远程连接数据库
- win7 bp SetDlgItemText
- Noip2008提高组初赛 C
- 第二次作业(上):个人项目实践
- Lecture2-3Guarantee of PLA
- Leetcode65: Move Zeroes
- ARM学习记录1
- NIO——buffer
- NIO——Channel
- bzoj-2095 Bridges
- Zookeeper linux下使用
- 自己写的轻量级PHP框架trig与laravel5.1,yii2性能对比
- yii rules 验证详解
- MongoDB操作
- Windows Server 2008 R2网站访问PHP响应慢的解决方法
- 黑马程序员-----反射技术