吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13063|回复: 35
收起左侧

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

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

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

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

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

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

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

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

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

我们先点进第一个dword_4BE194看看:
8.png

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

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

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

12.png

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

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

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

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

免费评分

参与人数 17吾爱币 +29 热心值 +14 收起 理由
xxzzvv + 1 + 1 谢谢@Thanks!
Hmily + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
无痕软件 + 3 + 1 正好需要
BY丶显示 + 2 + 1 谢谢@Thanks!
bxtww + 2 + 1 谢谢@Thanks!
yanwc + 1 + 1 谢谢@Thanks!
zhangbaida + 3 + 1 用心讨论,共获提升!
zdy666666 + 1 + 1 谢谢@Thanks!
fei8255 + 1 + 1 谢谢@Thanks!
江湖虾米 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
冰雪冬樱250 + 1 + 1 谢谢@Thanks!
ARondMan + 1 谢谢@Thanks!
realdawei + 1 用心讨论,共获提升!
alpt6285 + 1 + 1 用心讨论,共获提升!
小虾66 + 1 + 1 我很赞同!
joneqm + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wu0o0pj 发表于 2019-9-18 08:30
学习了

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

没找到隐藏该事件的地方

LZ知道么,或者加加工改造下
小小/ng 发表于 2019-9-17 13:17
官网这个软件后面标着免费软件,你的pj是什么来的?
Monitor 发表于 2019-9-17 12:23
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
学习了,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 05:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表