打狗的一般性思路总结
2, bp DeviceIoControl 读取U盘数据,相当于bp ReadFile
3, bp MessageBoxA 提示
4, 几个重要的dll: JTUSB.dll, setupapi.dll, hid.dll
5, 一些关键Call的名字以及说明:
// 准备查找符合HID规范的USB设备
SetupDiGetClassDevs(&guidHID,NULL,0,DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
// 查找USB设备接口
SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&guidHID,0, &strtInterfaceData);
//释放
SetupDiDestroyDeviceInfoList(hDevInfo);
// 若找到了设备,则读取设备路径名
SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,&strtDetailData,sizeof(strtDetailData),NULL,NULL))
// 开放与设备的通信
CreateFile(m_strPath,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
// 读取
HidD_GetAttributes(hCom,&strtAttrib))
Hid.dll.HidD_GetHidGuid
取得类别的
Setupapi.dll.SetupDiGetClassDevs
传回一个设备信息群,包含指定类的所有设备
Setupapi.dll.SetupDiEnumDeviceInterfaces
传回信息群内一个设备的信息路径
Setupapi.dll.SetupDiGetDeviceInterfaceDetail
传回设备路径
Hid.dll.HidD_GetAttributes
传回厂商与产品,及版本号码
Hid.dll.HidP_GetValueCaps
传回描述设备能力的结构
Kernel32.dll.CreateFile
开启设备通信
Kernel32.dll.WriteFile
传送一个输出报文给设备
Kernel32.dll.ReadFile
从设备读取报文
Kernel32.dll.CloseHandle
释放CreateFile使用的资源
Setupapi.dll.SetupDiDestroyDeviceInfoList
释放SetupDiGetClassDevs使用的资源
Hid.dll.HidD_GetPreparsedData
返回一个句柄到保存设备能力信息的缓冲器
Hid.dll.HidD_FreePreparsedData
释放HidD_GetPreparsedData使用的资源
Hid.dll.HidD_SetFeature
传送一个特征报文给设备
Hid.dll.HidD_GetFeature
从设备读取一个特征报文
打狗无非就是:识别有没有插入狗-->枚举狗路径-->读取狗的版本-->读取狗数据-->验证。
根据上面的API断点,总是可以找到破解思路的。
注意,验证中可能有断点检查,会进误区。