Sim-sim开放或逆向工程智能对讲机

看完帖子 克鲁普尼卡斯有个想法可以解决mitmproxy,并了解如何安排日常使用的移动应用程序的后端。选择取决于对讲应用程序。授权后,它可以让您打开门并接听视频电话。我会从切口中看出来了什么,我设法找到了什么孔。



代理设定


为了分析流量,通常使用一种称为中间人的方法。它包含以下事实:连接到本地网络时,来自被分析设备的流量首先流向计算机,在该计算机上对其进行解密和分析,然后将其加密回并发送到服务器。要解密流量,最流行的是mitmproxy程序。安装mitmproxy没什么大不了的。

要查看来自移动设备的流量,您需要通过手机和计算机连接到家庭wifi。在计算机上安装mitmproxy并运行。在电话的wifi设置中,将本地地址和计算机端口设置为代理服务器。接下来,从电话转到mitm.it并安装允许您解密https请求的证书。这些步骤之后,来自浏览器的请求变为可见。万岁!但是,下一步是令人失望的:


谷歌 搜索导致github上出现一个公开问题事实证明,从API级别24开始,应用程序不再信任用户证书。幸运的是,您可以通过解压缩apk并将以下配置添加到AndroidManifest.xml来解决此问题:

<network-security-config>  
     <debug-overrides>  
          <trust-anchors>  
               <!-- Trust preinstalled CAs -->  
               <certificates src="system" />  
               <!-- Additionally trust user added CAs -->  
               <certificates src="user" />  
          </trust-anchors>  
     </debug-overrides>  
</network-security-config>

此外,github上有一个现成的脚本可以自动执行此操作。因此,下载apk,补丁脚本,设置adb install命令并确保一切正常。

流量分析


我们看到对表单地址的请求是:

https://{intercom-company-url}/api/

标头中传递了两个参数:
'api-version': '2',
'authorization''Bearer your.jwt.token’

第一个参数是api版本,第二个参数是授权令牌。为了进行授权,使用了json网络令牌,该令牌由三部分组成:标头,有效负载和签名。
使用以下命令对其进行解码:

pyjwt decode --no-verify your.jwt.token

看到有效负载包含account_id和exp。exp字段对应于令牌创建的时间,这使您可以从一个帐户为不同设备生成令牌。

对我们来说最有趣的是要求提供可用对讲机和开门清单。发送请求时(我使用python和请求库)

https://{intercom-company-url}/api/customers/properties/{account_id}/intercoms 

我们得到的json包含带有字段的门电话列表:

[
    {
        'id': ID,
        'mode': MODE, 
        'sip_account': {'ex_user': USER_ID, 'proxy': PROXY,  'password': PSWD}, 
        'video': [{'quality': 'low', 'source': 'rtsp://LINK }]
    }
]

在json id-门电话标识符,模式-可以打开的门(可能的值是one_door,left_door,right_door),sip帐户和视频广播的链接中。哇!

使用会话发起协议(sip),可通过对讲机进行视频通话。在sip_account字段中,我们收到了ID'shniki和我们的帐户可以访问的对讲机的密码。由于它们都位于内部网络上,因此完全调用它们不起作用。但是视频领域很有趣。它包含一个外部链接,用于从摄像机广播视频。打开vlc,复制链接就足够了,您可以在门电话摄像头上全天候浏览。分散此类链接不是很好!

接下来,我们将弄清楚如何打开门。当您单击开门按钮时,应用程序发送一个获取请求:

https://{intercom-company-url}/api/customers/intercoms/{intercom_id}/unlock?door=left_door&id={intercom_id}

事实证明,存在或不存在id参数不会影响任何事情,但是对于具有两个门的门电话,door不仅可以自己打开,还可以选择自己打开的下一扇门。

sim-sim开!


弄清楚了api之后,我决定做一些有用的事情。结果是一个Android应用程序可以识别语音命令,并且当它识别预定义命令(例如“ sim-sim open”)时,会发送一个请求以打开相应的门。

发现


智能对讲机是好的,但是安全和智能对讲机则更好。

All Articles