【vc++精品源码栏目提醒】:网学会员--在 vc++精品源码编辑为广大网友搜集整理了:USB设备多线程异步通信机制的反汇编剖析与设计实现 - 讲义教程绩等信息,祝愿广大网友取得需要的信息,参考学习。
第2期第8卷第2期2009年2月Vol.8No.2Feb.2009软件导刊SoftwareGuid0引言WindowsNT31引入了一种名为PE文件格式的新可执行文件格式用高级语言CC、Pascal编写的程序再经过编译程序编译和链接就生成了能在in32平台上执行的E格式。
大多数的程序设计者都采用这种方式来发布in32平台上的软件。
在没有
源代码的情况下如果想分析原程序的思路借鉴程序设计者的思想那么就可以采用反汇编的方式。
通过查阅资料发现很少对USB设备多线程异步通信模式的介绍本文将通过分析一个USB通信程序的E文件
学习其中的多线程异步通信的思想然后加以自己的内存池技术创新最后在VC环境下设计一个对USB设备通信的程序。
1主要技术USB是通用串行总线是一种支持即插即用的串行接口。
比标准串并行口9针或25针快得多它仅仅需要4针通过采用菊花链形式可以把所有的外设连接起来并且不会损失带宽除了具有较高的传输率外它还能给外围设备提供支持正在取代当前PC上的串口和并口。
反汇编即是指将PE执行文件反编译还原成汇编语言然后通过阅读和分析汇编语言来了解程序流程反汇编包括静态反汇编和动态跟踪分析静态反汇编即从反汇编出来的程序清单上分析从提示信息入手进行分析通过查找字符串等提示信息定位到相关的位置可了解软件的编程思路。
常用的静态分析工具是IDA、32DAM等。
虽然从静态上可以了解程序的思路但是并不能真正地了解软件的细节另外有许多程序为了阻止非法跟踪比如EH技术和反汇编比如加壳、花指令、MC技术对执行代码的大部分内容进行了加密变换导致必须通过动态跟踪的方式来了解程序的思路所谓动态分析是利用Ollydbg、oftice一步一步地单步执行软件。
重叠I模型是让应用程序使用重叠数据结构一次投递一个或多个I请求。
针对这些提交的请求在它们完成之后应用程序会收到通知通常采用事件对象通知方法来管理重叠I请求的完成情况。
重叠结构中有一个verlappe参数其中这个参数又要与inows的事件对象“绑定”在一起因此我们只要在ReaFile或riteFile这样的操作“绑定”到这个重叠结构上提交一个请求等到重叠操作完成以后自然会有与之对应的事件来通知我们操作完成然后我们就可以根据重叠操作的结果取得我们想要的数据了。
2反汇编分析和VC模拟实现USB通信程序21反汇编分析与USB外设的通信需要通过设备驱动inows上已包含应用
程序通信需要的各种信息因此通过I32提供的API函数需安装DDK与USB设备通信应用程序也不用了解和USB通信的协议但是必须知道相关的API参数信息所以必须分两个部分去分析查找需要通信的USB设备和采用异步方式来通信。
1查找USB设备。
indows上查找USB设备步骤如图1所示。
通过图1的4个步骤就可以得到打开USB设备的路径后面3个步骤的函数参数通过MSD简单地查到因此需要分析的是SetupDiGetClassDevs函数。
HDEVIFSetupDiGetClassDevsCSGUIDClassGuid制定设备的GUIDPCSEnumerator特定的字符串一般为ULLHDhwnParent与获得信息相关的顶层窗口句柄一般为0USB设备多线程异步
通信机制的反汇编剖析与设计实现雷力同济大学软件学院上海201204摘要介绍了inows平台下反汇编方法通过分析一个USB通信程序的
设计思想加以改进和创新在VisualC环境下通过inowsAPI函数模拟实现多线程加上内存池技术的USB异步通信程序给出了关键类的UML图。
关键词反汇编USB多线程内存池UML中图分类号TP31.52文献标识码A文章编号672-780020090-0079-02作者简介雷力1984-男湖北仙桃人同济大学
软件学院在职硕士研究生研究方向为嵌入式编程、加密与解密软件导刊2009年软件导刊2009年DWORFlags设备信息集的方式通过进一步的分析发现我们需要得到指定USB的GUI所以采用动态跟踪的方式用llybg加载参考的USB通信程序然后对SetupDietClassDevs下断点来就可以截取到设备的UID。
2分析通信方式。
通过前面的分析已经得到设备路径此时可以通过Createile来打开设备然后要做的是如何采用多线程读取设备数据所以程序启动时要创建两个工作线程一个用于发数据一个用于收数据。
发数据线程是我们主动控制不发送数据的时候可以通过WaitorMultiplebjects让线程挂起有数据需要发送的时候在SetEvent让线程恢复发送完数据后继续挂起。
关键的
问题点是如何适当地控制收线程没有数据的时候如何挂起如果收数据过程中出错又该如何处理先用Peid发现软件用VC编写并且没有加壳因此先用W32dasm静态反汇编参考的USB通信程序然后用llydbg加载EXE文件对Createile下断点跟踪收线程的处理通过不断地单步跟踪分析发现采用的模式类似于网络编程中重叠模型有两个值得注意的地方是事件注册和缓冲区大小关键反汇编代码部分代码如下calldwordptrKERNEL32ReadileKERNEL32Readile……calldwordp