Jac*_*mth 3 linux automation cryptography
我有一个HIKVISION DS-2CD2512F-IS,并且我试图从Linux机器上自动执行激活步骤,而我一直试图找出如何对Web界面进行反向工程的方法。设置其他所有内容都很容易-只需将一堆XML文件上传到URL中,并在URL中嵌入用户名和密码即可-但是设置密码的初始激活步骤使我感到困惑。当然,我可以通过Web界面或HIKVISION软件轻松完成此操作...但是,如果相机正常工作,则每年全国各地一百个不同的人需要一次激活30个,密码输入错误意味着相机将无法播放。另外,当然,d在阅读或遵守说明时,这样做并非完全100%可靠(毫不夸张地说,承包商在三个不同地点的工作单上都说“没人告诉我,我需要带那个”,这很普遍,粗体),因此我无法确定他们是否会带上一台具有适当软件的笔记本电脑来执行此操作。因此,出于可靠性和人工成本的原因,我想使涉及的所有过程自动化。到目前为止,对我而言,唯一的难点是相机上的激活步骤。因此,出于可靠性和人工成本的原因,我想使涉及的所有过程自动化。到目前为止,对我而言,唯一的难点是相机上的激活步骤。因此,出于可靠性和人工成本的原因,我想使涉及的所有过程自动化。到目前为止,对我而言,唯一的难点是相机上的激活步骤。
在所有这些位置,我将交付一个受我控制的linux盒(这是一个克隆映像)。我可以为此在主服务器上放置一个bash脚本(以及我喜欢的任何命令行程序),并在计算机上分配一个按钮来运行它,没问题,我有信心在激活时自动执行所有操作这点。
现在,他们的客户服务团队向我发送了激活指南(您可以在这里找到:http : //docdro.id/ntP7v8w),但是显然谁写的都没有英语作为他们的第一语言。我已经使用WireShark监听了我的浏览器和相机之间的交换,并且肯定是使用引用的API进行了实际的激活。不过,我似乎无法使其正常运行。到目前为止,我的测试脚本...可悲的是,我似乎无法在这里很好地渲染它。浏览相机的javascript(这很痛苦,因为有人在其上运行了一个最小化程序,因此没有任何注释,并且所有变量都是单个字母)建议我需要:
1)生成我的RSA密钥。2)将我的密钥从base 64更改为二进制。3)将二进制密钥转换为基数为16的密钥。4)将基数为16的密钥重新编码为基数为64。5)将密钥传输到摄像机(以XML包装)。6)将返回值更改为以64为底(在解包XML之后)。7)将提取的信息转换为二进制,将其视为以16为基数的人类可读整数进行转换。8)将二进制信息转换为openssl需要的base64。9)用我的密钥从1解密摄像机的响应。10)使用所述随机字符串作为AES密钥(这很可能会再次涉及步骤7和8),用openssl加密我的密码。11)通过撤消base64转换从该结果中提取二进制数据。
...在弄清楚如何在Linux中实现这一目标方面,我遇到了一些麻烦。有什么帮助吗?
附带说明一下,似乎文档中引用的API页面在激活后仍然保持活动状态……对于我计划的实现而言,这不是问题,因为它们全部位于物理隔离的网络上,但效果不佳。
具有ISAPI界面的《海康威视激活指南》。
Run Code Online (Sandbox Code Playgroud)<ActivateStatus xmlns="http://www.std-cgi.com/ver10/XMLSchema" version="1.0"> <Activated>true</Activated> </ActivateStatus>
如果凸轮已被激活,则在“已激活”标签中为“ true”,否则为“ false”。如果cam不支持激活,它将以如下方式响应:
Run Code Online (Sandbox Code Playgroud)<!DOCTYPE html> <html><head><title>Document Error: Unauthorized</title></head> <body><h2>Access Error: 401 -- Unauthorized</h2> <p>Authentication Error: Access Denied! Authorization required.</p> </body> </html>
然后,该字符串以base 64进行编码。结果字符串放入下一个XML的标签“ key”中:
Run Code Online (Sandbox Code Playgroud)<PublicKey> <key>publickey</key> </PublicKey>
并通过POST请求发送到CAM_IP / ISAPI / Security / challenge
Run Code Online (Sandbox Code Playgroud)<Challenge version=“2.0” xmlns=“http://www.isapi.org/ver20/XMLSchema”> <key>MDcyYzhlODc5NTRlOGJkODY1YWE0NDVmYzQ2YWU5MGQyNWZiNmI5ZDk1ZWRkYzRkOTRl MmRmYmNjZjhmNThmMzQ4NTA3ZTYyODI5YzkyZjZlNjNlMDY2ZjUzM2E1MWY2MGJhYjllNDk3NW NjNjNhZGM0MTcxZjhkNjk1M2MyN2YxOTNkZTc1NDdiZmU2ZGNkNTQ2ZmVhN2U0NTAwZjJkOTlk MTlkZjJkM2YyODM0ODQ2MjQyMjE5ZGE3MjY5NDI0YTMyZjY3NjNhM2JjOTEwZmU1ZTg2YTgzMzB lZjE3NDQ1ZWNjMzA4MzEzYzNkMjYwOGQzZjFjM2ZlMDEwNGFkYg==</key> </Challenge>
从使用Base64标签的“钥匙”解码字符串,它的十六进制字符串是这样的:072c8e87954e8bd865aa445fc46ae90d25fb6b9d95eddc4d94e2dfbccf8f58f348507e62829c92f6e63e066f533a51f60bab9e4975cc63adc4171f8d6953c27f193de7547bfe6dcd546fea7e4500f2d99d19df2d3f2834846242219da7269424a32f6763a3bc910fe5e86a8330ef17445ecc308313c3d2608d3f1c3fe0104adb
将其转换为字节数组(每对字符转换为一个字节,所有步骤都采用相同的转换方式,在此示例中,它应以0x07、0x2c,0x8e等开头)。使用专用RSA密钥(在步骤2中生成)解密,并获取解密结果的最后32个字节。它应该是另一个十六进制字符串。
步骤3的结果字符串转换为字节数组。该阵列将用作AES密钥。使用此密钥加密步骤3的结果字符串的前16个字节。
然后,您需要为凸轮选择新密码。如果少于16个符号,则需要用\ 0到长度16的字符填充密码字符串。然后,使用相同的AES密钥对其进行加密。
合并步骤4和5中的字节数组,并将其转换为十六进制字符串(每个字节转换为2个字符)。使用base64编码结果字符串。
步骤6的结果base64字符串放入下一个XML的标记“ password”中:
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="UTF-8"?> <ActivateInfo> <password>pass</password> </ActivateInfo>
并随PUT请求一起发送至:CAM_IP / ISAPI / System / activate
答案应该是:
Run Code Online (Sandbox Code Playgroud)<?xml version="1.0" encoding="UTF-8"?> <ResponseStatus version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema"> <requestURL>/ISAPI/System/activate</requestURL> <statusCode>1</statusCode> <statusString>OK</statusString> <subStatusCode>ok</subStatusCode> </ResponseStatus>
有用于激活的批量配置海康威视摄像头的python脚本:https : //github.com/qb60/Hikvision-batch-configure