C++ 校验和算法的逆向工程

C++ 校验和算法的逆向工程,c++,algorithm,activex,reverse-engineering,checksum,C++,Algorithm,Activex,Reverse Engineering,Checksum,我有一个IP摄像头,它使用POST HTTP请求接收命令(例如调用PTZ命令或设置各种摄像头设置)。控制它的标准方式是通过它自己的web界面,部分是ActiveX插件,部分是标准html+js。当然,由于ActiveX部分,它只能在Windows下的IE中工作 我试图改变这一点,通过找出所有的命令并编写一个小的python或javascript代码来执行相同的操作,从而使它更具跨平台性 我有一个大问题。每个POST请求都包含一个计算出的“cc”字段,我假设它是一个校验和。cam界面中的JS代码指

我有一个IP摄像头,它使用POST HTTP请求接收命令(例如调用PTZ命令或设置各种摄像头设置)。控制它的标准方式是通过它自己的web界面,部分是ActiveX插件,部分是标准html+js。当然,由于ActiveX部分,它只能在Windows下的IE中工作

我试图改变这一点,通过找出所有的命令并编写一个小的python或javascript代码来执行相同的操作,从而使它更具跨平台性

我有一个大问题。每个POST请求都包含一个计算出的“cc”字段,我假设它是一个校验和。cam界面中的JS代码指出,它是通过调用插件内部的函数计算出来的:

tt = new Date().Format("yyyyMMddhhmmss");
jo_header["tt"] = tt;

if (getCpPlugin() != null && getCpPlugin().valid) {
    jo_header["cc"] = getCpPlugin().nsstpGetCC(tt, session_id);
}
nsstpGetCC函数显然是根据两个参数计算校验和的,时间戳和会话id。真实示例(使用Wireshark捕获):

校验和似乎是160位。我尝试了sha-1ripemd-160以及我能想到的连接tt和会话id的所有组合。但我似乎无法得到与原始插件相同的哈希值。插件DLL似乎是用C++编写的。我几乎没有反编译的经验来从这个角度深入研究这个问题


所以我的问题基本上是,有人能找出他们是如何计算出cc的,或者至少给我一个进一步研究的方向。也许我看到了错误的散列算法或者其他什么。。。或者给我一些想法,让我知道最初的ActiveX函数nsstpGetCC在做什么,例如通过反编译,或者在运行时监视它在内存中的操作。我应该使用什么工具?

您知道调用哪个二进制文件/可执行文件吗?这是一个大话题,可能需要几天或几周的时间。我建议您看看OllyDBG,因为这是windows。假设代码是在windows上运行的。我会用电子邮件联系相机制造商。没有源代码。没有文件。只有windows二进制文件。有问题的插件是这样的:老实说,我也不确定这样的插件是不是合适的地方。我愿意接受建议,如果不合适的话,我向所有人道歉!!那就应该删除了!如果你传递相同的数据,你总是得到相同的结果吗?@Lou Franco,是的!所以这个例子,总是给出相同的结果。。。tt和session_id的相同组合给出了相同的cc
tt = "20171018231918"
session_id = "30303532646561302D623434612D3131"
cc = "849e586524385e1071caa4023a3df75401e5bb82"