懒虫工控(旧)

标题: 有关DCS 监控温度压力数据的一些想法 [打印本页]

作者: miaoxinProc    时间: 2019-4-16 12:40
标题: 有关DCS 监控温度压力数据的一些想法
很幸运认识到本论坛,让国内DCS工作者有一个学习的平台。
我也某企业DCS的工作人员,同样也是逆向爱好者,我们企业使用的是CENTUM VP 系统,工作这些年发现这个系统的报警系统是有问题的(不知道别的企业是不是这样),首先 高 低 温度 液位报警,这是一个很正常又很好的事情,可以提醒DCS操作人员哪里的问题不用一直盯着屏幕,但就是我们企业的报警,
不光是高 低 温度 液位报警,阀位限定等一些没必要报警的值频繁报警,这让DCS操作人员已不管报警声音,有些干脆关闭报警声,使这工作时不能即使发现问题,后果可想而知。(给我们制作DCS系统公司说 无法改变现状)

因为没有学习DCS的 GUI的制作,而且我们企业已有现成的分布式控制系统,我只要改进一些东西就好。
初步思想改进两个地方,1,报警,只报警高低 液位、温度。 2,自己分析温度和液位 是不是画直线,也就是传过来的值不变,有可能是硬件出了故障。
所以我只要逆出来我需要的的数据就好,同时HOOK住报警。

通过几天的逆向分析[attach]4102[/attach]
在电脑屏幕显示的数据(温度、压力点),通过最底层组件进程实现。
[attach]4103[/attach]
数据是以 float类型也就是单精度浮点数存储。

具体实现方式:[attach]4104[/attach]
这是刚启动CENTUM VP 启动的样子,
后启动一个画面后:[attach]4105[/attach]

首先进程调用 CreateThread来创建线程,以后使用mfc90 模块来实现界面显示。
抽拉数据过程:使用内部模块SendRead发送数据,分配内存(这里的内存存储这需要显示在屏幕所要抽拉的标志)
360截图20190416121547706.jpg
从2B BE 00 56这里开始是发送数据头,这里是一个时间,高位 00 56始终不变,低位 每秒加1,到FF FF重置。
我把数据往上拉: 360截图20190416121951345.jpg
看到了显示数据的String字符串,以后使用WriteFile函数把这段数据写入一个驱动文件。
228b5e3eda744f1f5db6da8ea021348.jpg
格式:WriteFile(BKTDI,DataAddress,Size,SizeWritte,异步操作句柄)
因为这里是驱动文件所以比较谨慎,所以还没有分析驱动文件的内部实现。
再来看看写入驱动文件后;调用了ReadFile,读文件
格式:ReadFile(BKTDI,这里存储这文件的固定内存偏移为9910,Size,SizeWritten,异步操作句柄).
这时发现 9910内存地址存储这需要显示的数值,不过是以大端序保存的(网络传输格式),x86 是以小端序存储的。
所以他分配了一块内存调用memCpy函数。
memcpy(Address,9910,Size)
使用htonl 函数把大端序转换为小端序。
htonl(Address)。这时Address就是屏幕所要显示的数据。
上面的步骤是电脑显示界面获取数据过程,如果我要抽拉全部(包括没有显示在电脑屏幕的数据),就得模拟他获取数据的过程。
难点就是驱动程序 BKTDI,实现过程,怎样交互的。这样得到了想要的数据,然后加以分析就可以判断数据是否假数据。(报警还没有搞 暂时不知道在哪个模块组件实现)。

这里希望上层制作DCS的大牛可以给我些提示与思路。


作者: pcdhacker    时间: 2019-4-22 13:07
不知道你这是想做什么功能?
作者: miaoxinProc    时间: 2019-4-25 13:00
更改报警系统(我们厂的报警有问题),增加数据智能分析。
作者: 拔丝苹果    时间: 2019-5-20 16:35
谢谢楼主分享
作者: 631678392    时间: 2019-7-5 10:52
没看完哈哈哈
作者: gktyy    时间: 2019-10-10 09:41
里希望上层制作DCS的大牛可以给我些提示与思路




欢迎光临 懒虫工控(旧) (http://old.lanchonggk.com/) Powered by Discuz! X3.2