您的位置:首页 > 其它

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的指纹采集、比对、存取权限都是由硬件完成的,跟软件没任何关系。即使没有软件照样使用。

……


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: