whc2001 发表于 2019-9-17 11:27

AccessPort v1.37串口数据抓取工具的最大抓取长度修改

所谓串口数据抓取,即在不打开串口的情况下(Windows上具有一个串口只能被一个程序打开的限制)“聆听”串口的数据交互,并记录下来,串口通信的设备不会留意到抓取工具的存在,类似网络抓包。这类软件通常使用客制化的驱动程序对相关消息进行截获,在破解通过串口通讯的硬件设备的通讯协议时十分实用,但通常收费且价格不菲。

AccessPort是SUDT开发的完全免费的串口助手与串口数据抓取工具,这款软件实际使用过程中比较顺利,但有一个十分严重的设计缺陷:对于长的数据包,只能显示前64字节:


这款软件最后一次更新是在7年前(好在最后一次更新添加了带签名的64位驱动,Windows10x64下可以正常抓取数据,要解决的仅仅是抓取的数据显示不全的问题),而用户反馈页面也早已下线。看来要想使其正常工作只能自己动手了。


仔细观察,发现长度(Length)的数值是正确的,只是显示的数据被截断了,说明软件内部肯定是获取到了完整数据,只是决定不显示出来。那么使用IDA开始分析。首先已知每一个抓取记录都会被输出为形为「Length: {0}, Data: {1}」的形式,于是先搜索字符串"Length",找到了对应的printf模板,可以看到处于data区块:


双击到达data区的对应部分,在变量名上右键,选择使用Xrefs框图查看引用关系,可以看到被叫做sub_435ED0的函数所引用:


定位到sub_435ED0,汇编看不懂,张嘴吃F5:


可以看到引用了模板字符串的代码在一个switch下,而且仅在switch的变量等于3或4时才执行。仔细观察软件主界面运行时的输出,发现对串口的写入和读取的事件分别叫做IRP_MJ_READ和IRP_MJ_WRITE,只有这两个事件发生时软件才会输出模板字符串那样的记录。查询一下,这两个事件的常量值确实为3和4,可以确定关键代码就在此处。


继续观察代码,其中函数sub_463999涉及到了模板字符串,那么这个sub_463999的作用一定就是扩展sprintf,将抓取到的数据根据设置不同进行转换(软件可以选择是直接显示文本还是显示十六进制)然后填进模板字符串里。那么处理抓取到的数据的代码一定就在case之下,sub_463999之上,只有这个叫做sub_435D80的函数了。在双击进入这个函数反编译其详细内容之前,参数列表中的两个常量引起了我的注意:


我们先点进第一个dword_4BE194看看:


我看到了什么?!0x40那不就是十进制的64吗!先别急,还是回上去反编译一下那个函数,注意这个64被传进了第四个变量也就是a4:


这就很清楚了嘛,v6首先赋值为a2,看起来是实际长度没错,然后如果a2大于a4,就把v6设置成a4。a4就是那个64的常量,也就是如果实际长度大于64,就强行截断到64。那么只需要把a4的值也就是上层调用的时候传入的常量dword_4BE194的值改掉就好了!先定位到常量所在的位置也就是.data:004BE194,然后使用菜单中的Edit->Patch program->Change byte对这一行数据进行修改:


既然是DWORD(32位),那干脆改到最大值(0xFFFFFFFF)算了:




最后,使用Edit->Patch program->Apply patches to input file将修改保存回exe文件,记得勾选备份源文件以免失败之后莫得恢复:


来测试一下,大成功!数据长度和数据内容均无误:


来抓取个实际设备(USB转串口的距离传感器),试试看能不能获取到其通信协议:


可以看到应该是由于接收程序算法的原因,每一包数据被分两次读取了,但数据内容拼接起来确实是完整的有效的JSON数据。
破解完毕,感谢观看!
最后放出一下破解过的主程序,去官网下下来完整软件之后覆盖主程序就可以了:链接: https://pan.baidu.com/s/1hhABbRFcNhiGcrM7GgDt9A 提取码: e7jy

wu0o0pj 发表于 2019-9-18 08:30

学习了

还是 1.34 版的好,可惜只能在 x86 中运行
1.37 最烦的就是 当串口上没有数据交互时还有 timeout 事件的记录
不像 1.34,只有当有交互时才显示

没找到隐藏该事件的地方

LZ知道么,或者加加工改造下{:301_978:}

小小/ng 发表于 2019-9-17 13:17

官网这个软件后面标着免费软件,你的pj是什么来的?

Monitor 发表于 2019-9-17 12:23

这个可以有,算是再次更新了   感谢

原版下载地址:http://www.sudt.com/cn/ap/download.htm

ph1999 发表于 2019-9-17 13:33

这个很有意思学习了

TwilightZ 发表于 2019-9-17 13:51

虽然不知道是什么,但看起来好像很厉害的样子!

jamesmeng 发表于 2019-9-17 14:52

楼主精神可嘉。不过用PortMon这个软件就没这个问题了。

冰雪冬樱250 发表于 2019-9-17 20:00

值得学习

whc2001 发表于 2019-9-17 23:00

小小/ng 发表于 2019-9-17 13:17
官网这个软件后面标着免费软件,你的pj是什么来的?

不好意思昨天太晚了写的时候有点懵,不是破解,是修复数据只能显示前64字节的问题

whc2001 发表于 2019-9-17 23:01

jamesmeng 发表于 2019-9-17 14:52
楼主精神可嘉。不过用PortMon这个软件就没这个问题了。

PortMon好像不支持64位系统?Windows10x64之前弄过好几次一直没成功

生如上善若水 发表于 2019-9-18 00:25

学习了,谢谢分享
页: [1] 2 3 4
查看完整版本: AccessPort v1.37串口数据抓取工具的最大抓取长度修改