逆向工程校验和算法

时间:2017-10-19 13:47:30

标签: c++ algorithm activex reverse-engineering checksum

我有一台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 功能显然会根据时间戳 session_id 这两个参数计算校验和。真实的例子(用Wireshark捕获):

tt = "20171018231918"
session_id = "30303532646561302D623434612D3131"
cc = "849e586524385e1071caa4023a3df75401e5bb82"

Checksum似乎是160bit。我尝试了 sha-1 ripemd-160 以及我想到的连接tt和session_id的所有组合。但我似乎无法获得与原始插件获得的哈希相同的哈希值。插件dll似乎是用c ++编写的。而且我几乎没有反编译经验从这个角度深入研究这个问题。

所以我的问题基本上是有人可以弄清楚他们如何计算 cc ,或者至少让我知道进一步研究的方向。也许我正在查看错误的哈希算法或者某些东西...或者让我知道如何以某种方式弄清楚原始ActiveX函数nsstpGetCC正在做什么,例如通过反编译或者通过监视它的操作运行时的记忆。我应该使用哪些工具?

0 个答案:

没有答案