Skip to content
Georg Lukas edited this page Dec 19, 2023 · 3 revisions

The ST1000/CL65 is Samsung's first WiFi-enabled camera.

It's based around a ZORAN COACH10P SoC and there is no known firmware mirror.

The camera can connect to WiFi and then send images via email or to social media services. Except that Samsung's servers are down and the API is unknown.

Reverse Engineering the API

When connecting to WiFi, the camera does two requests:

  1. GET http://www.ospserver.net/security/sso/initialize/time - thanks to a 2012 pastebin we have the response format:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <initializeResult><currentServerTime>1702983551792</currentServerTime></initializeResult>
  2. GET http://www.ospserver.net/social/columbus/serviceproviders/list?DUID=*snipped* - this one is unfortunately unknown, and the camera desperately repeats it multiple times before giving up.

Serial log

There is a UART on the Molex "developer connector":

uart-marked

The UART yields the following log during a WiFi connection attempt (timestamps added by me). This looks like the respective library is called "LifeBridge" and it's also using a few commands prefixed with nx_ which indicates a shared codebase with the Samsung NX cameras, maybe:

12:04:37.277991 LifeBridgeSemaphoreGet : ../../Hce/Network/System/Wifi/wifi.c(343)
LifeBridgeWmCommand : send - 100 
[wifilib] asphodel_create_packet_pool
12:04:37.821304 [wifilib] nx_bcm4325_network_driver_startup
12:04:38.028879 [wifilib] download F/W & nvram file
12:04:38.272122 [wifilib] 4.172 RC66.0
12:04:38.281312 [wifilib] wl0: Jun  5 2009 12:18:37 version 4.172.66.0
12:04:38.352436 [wifilib] asphodel_enable_netx_component
12:04:38.367657 [wifilib] bcm4325_assoc_create
12:04:38.374126 LifeBridgeWmCommand : waiting reply - 100 
LifeBridgeWmCommand : end - 100 ( result : ok ) 
LifeBridgeSemaphorePut : ../../Hce/Network/System/Wifi/wifi.c(358)
LifeBridgeReply(0x3c20) 
WifiAssoc( - latest ap : 0 : 3 : 0 )
12:04:38.490623 SSID: HubertJFarnsworth
12:04:38.493643 LifeBridgeWmCommand : send - 103 
LifeBridgeWmCommand : waiting reply - 103 
LifeBridgeWmCommand : end - 103 ( result : ok ) 
LifeBridgeReply(0x3c23) 
AP_Connecting_Msg_Show- 1 )
LifeBridgeWmCommand : send - 114 
LifeBridgeWmCommand : waiting reply - 114 
LifeBridgeWmCommand : end - 114 ( result : ok ) 
LifeBridgeReply(0x3c2e) 
DataSave : 0xa101
12:04:44.171666 # [sock]Init [0x80f69c60], [0x0]
12:04:44.175633 # [sock]nx_tcp_socket_create [0x0] [t=10000]
12:04:44.177979 # [sock]EventCreate [0x0]
12:04:44.182435 # [sock]nx_tcp_client_socket_bind [0x0] [t=10000]
12:04:44.187478 # [sock]nx_tcp_client_socket_connect req [0x0] [t=10000]
12:04:44.250423 # [sock]nx_tcp_client_socket_connect OK [0x0] [t=10000]
12:04:44.253916 # [sock]TcpClientCreate [0x0] [t=10000]
12:04:44.255751 WebEventHandler [1]
12:04:44.257576 WebEventHandler [2]
12:04:44.259408 WebEventHandler [3]
12:04:44.261229 WebEventHandler [4]
12:04:44.264275 # [sock]RECV [T=30000,T_N=30000]
12:04:44.293594 
12:04:44.297197 # [sock]Callback_Disconnect [0x80f69dd4]
12:04:44.696257 
12:04:44.698279 # [sock]END RECV [3] 
12:04:44.700080 WebEventHandler [5]
12:04:44.702119 # [sock]Close [0x1d1]
12:04:44.705836 # [sock]nx_tcp_client_socket_unbind [0x0]
12:04:44.708967 # [sock]nx_tcp_socket_delete [0x0]
12:04:44.711224 # [sock]Close OK [0x101]
12:04:44.713050 WebEventHandler [6]
12:04:44.716444 WebCheckRelayServer : 5 ( -7 ) 0
LifeBridgeReply(0x3c8a) 
LifeBridgeWaitMsg : done
12:04:44.724982 ui_msg_web_check_relay_server_state : 5
12:04:44.737718 # [sock]Init [0x80f69c60], [0x0]
12:04:44.741722 # [sock]nx_tcp_socket_create [0x0] [t=10000]
12:04:44.744073 # [sock]EventCreate [0x0]
12:04:44.748518 # [sock]nx_tcp_client_socket_bind [0x0] [t=10000]
12:04:44.753560 # [sock]nx_tcp_client_socket_connect req [0x0] [t=10000]
12:04:44.787189 # [sock]nx_tcp_client_socket_connect OK [0x0] [t=10000]
12:04:44.790757 # [sock]TcpClientCreate [0x0] [t=10000]
12:04:44.792582 WebEventHandler [1]
12:04:44.794430 WebEventHandler [2]
12:04:44.796248 WebEventHandler [3]
12:04:44.798073 WebEventHandler [4]
12:04:44.801111 # [sock]RECV [T=30000,T_N=30000]
12:04:44.813596 
12:04:44.817243 # [sock]Callback_Disconnect [0x80f69dd4]
12:04:45.216256 
12:04:45.218254 # [sock]END RECV [3] 
12:04:45.220074 WebEventHandler [5]
12:04:45.222081 # [sock]Close [0x1d1]
12:04:45.225820 # [sock]nx_tcp_client_socket_unbind [0x0]
12:04:45.228948 # [sock]nx_tcp_socket_delete [0x0]
12:04:45.231220 # [sock]Close OK [0x101]
12:04:45.233046 WebEventHandler [6]
12:04:45.236441 WebCheckRelayServer : 5 ( -7 ) 0
LifeBridgeReply(0x3c8a) 
LifeBridgeWaitMsg : done
12:04:45.245002 ui_msg_web_check_relay_server_state : 5
12:04:46.355718 WifiClose : 0(state 22)
WifiClose : 1 0 0 1 0)
12:04:46.361168 LifeBridgeWmCommand : send - 113 
LifeBridgeWmCommand : waiting reply - 113 
LifeBridgeWmCommand : end - 113 ( result : ok ) 
LifeBridgeWmCommand : send - 105 
LifeBridgeWmCommand : waiting reply - 105 
LifeBridgeWmCommand : end - 105 ( result : ok ) 
LifeBridgeWmCommand : send - 101 
[wifilib] Delete "bcm4325_assoc" thread
12:04:46.405377 [wifilib] Delete "assoc thread queue" queue
12:04:46.408158 [wifilib] bcm4325_assoc_delete
12:04:46.411882 [wifilib] asphodel_disable_netx_component
12:04:46.435659 [wifilib] Delete "dhd_asyncEvent" thread
12:04:46.439119 [wifilib] Delete "dhd_sdioIntr" thread
12:04:46.442186 [wifilib] Delete "dhd_dpc" thread
12:04:46.446072 [wifilib] Delete "Ad-hoc guest queue" queue
12:04:46.449501 [wifilib] Delete "802.1X queue" queue
12:04:46.453651 [wifilib] Delete "discard message queue" queue
12:04:46.456916 [wifilib] Delete "sync queue" queue
12:04:46.460698 [wifilib] Delete "async event queue" queue
12:04:46.464559 [wifilib] Delete "bottom half queue" queue
12:04:46.489917 [wifilib] nx_bcm4325_network_driver_cleanup
12:04:46.493313 [wifilib] asphodel_delete_packet_pool
12:04:46.497120 LifeBridgeWmCommand : waiting reply - 101 
LifeBridgeWmCommand : end - 101 ( result : ok ) 
 relay server : 5
12:04:46.586126  relay server : 5
12:04:58.665180 LifeBridgeWmCommand : end - 103 ( result : ok ) 
LifeBridgeReply(0x3c23) 
AP_Connecting_Msg_Show- 1 )
LifeBridgeWmCommand : send - 114 
LifeBridgeWmCommand : waiting reply - 114 
LifeBridgeWmCommand : end - 114 ( result : ok ) 
LifeBridgeReply(0x3c2e) 
DataSave : 0xa101
12:04:59.705563 # [sock]Init [0x80f69c60], [0x0]
12:04:59.709531 # [sock]nx_tcp_socket_create [0x0] [t=10000]
12:04:59.711924 # [sock]EventCreate [0x0]
12:04:59.716335 # [sock]nx_tcp_client_socket_bind [0x0] [t=10000]
12:04:59.721389 # [sock]nx_tcp_client_socket_connect req [0x0] [t=10000]
12:05:01.679910 # [sock]nx_tcp_client_socket_connect OK [0x0] [t=10000]
12:05:01.683443 # [sock]TcpClientCreate [0x0] [t=10000]
12:05:01.685313 WebEventHandler [1]
12:05:01.687100 WebEventHandler [2]
12:05:01.688928 WebEventHandler [3]
12:05:01.690756 WebEventHandler [4]
12:05:01.693806 # [sock]RECV [T=30000,T_N=30000]
12:05:01.710445 
12:05:01.714049 # [sock]Callback_Disconnect [0x80f69dd4]
12:05:02.113032 
12:05:02.114993 # [sock]END RECV [3] 
12:05:02.116819 WebEventHandler [5]
12:05:02.118813 # [sock]Close [0x1d1]
12:05:02.122547 # [sock]nx_tcp_client_socket_unbind [0x0]
12:05:02.125707 # [sock]nx_tcp_socket_delete [0x0]
12:05:02.127936 # [sock]Close OK [0x101]
12:05:02.129765 WebEventHandler [6]
12:05:02.133170 WebCheckRelayServer : 5 ( -7 ) 0
LifeBridgeReply(0x3c8a) 
LifeBridgeWaitMsg : done
12:05:02.141683 ui_msg_web_check_relay_server_state : 5
12:05:02.154403 # [sock]Init [0x80f69c60], [0x0]
12:05:02.158372 # [sock]nx_tcp_socket_create [0x0] [t=10000]
12:05:02.160722 # [sock]EventCreate [0x0]
12:05:02.165177 # [sock]nx_tcp_client_socket_bind [0x0] [t=10000]
12:05:02.170218 # [sock]nx_tcp_client_socket_connect req [0x0] [t=10000]
12:05:04.173963 # [sock]nx_tcp_client_socket_connect OK [0x0] [t=10000]
12:05:04.177563 # [sock]TcpClientCreate [0x0] [t=10000]
12:05:04.179359 WebEventHandler [1]
12:05:04.181185 WebEventHandler [2]
12:05:04.183031 WebEventHandler [3]
12:05:04.184831 WebEventHandler [4]
12:05:04.187878 # [sock]RECV [T=30000,T_N=30000]
12:05:04.205663 
12:05:04.209327 # [sock]Callback_Disconnect [0x80f69dd4]
12:05:04.608982 
12:05:04.610939 # [sock]END RECV [3] 
12:05:04.612788 WebEventHandler [5]
12:05:04.614790 # [sock]Close [0x1d1]
12:05:04.618514 # [sock]nx_tcp_client_socket_unbind [0x0]
12:05:04.621659 # [sock]nx_tcp_socket_delete [0x0]
12:05:04.623934 # [sock]Close OK [0x101]
12:05:04.625743 WebEventHandler [6]
12:05:04.629126 WebCheckRelayServer : 5 ( -7 ) 0
LifeBridgeReply(0x3c8a) 
LifeBridgeWaitMsg : done
12:05:04.637674 ui_msg_web_check_relay_server_state : 5
12:05:05.748362 WifiClose : 0(state 22)
WifiClose : 1 0 0 1 0)
12:05:05.753842 LifeBridgeWmCommand : send - 113 
LifeBridgeWmCommand : waiting reply - 113 
LifeBridgeWmCommand : end - 113 ( result : ok ) 
LifeBridgeWmCommand : send - 105 
LifeBridgeWmCommand : waiting reply - 105 
LifeBridgeWmCommand : end - 105 ( result : ok ) 
LifeBridgeWmCommand : send - 101 
[wifilib] Delete "bcm4325_assoc" thread
12:05:05.798007 [wifilib] Delete "assoc thread queue" queue
12:05:05.800786 [wifilib] bcm4325_assoc_delete
12:05:05.804528 [wifilib] asphodel_disable_netx_component
12:05:05.828447 [wifilib] Delete "dhd_asyncEvent" thread
12:05:05.831907 [wifilib] Delete "dhd_sdioIntr" thread
12:05:05.834952 [wifilib] Delete "dhd_dpc" thread
12:05:05.838866 [wifilib] Delete "Ad-hoc guest queue" queue
12:05:05.842309 [wifilib] Delete "802.1X queue" queue
12:05:05.846455 [wifilib] Delete "discard message queue" queue
12:05:05.849643 [wifilib] Delete "sync queue" queue
12:05:05.853499 [wifilib] Delete "async event queue" queue
12:05:05.857299 [wifilib] Delete "bottom half queue" queue
12:05:05.882624 [wifilib] nx_bcm4325_network_driver_cleanup
12:05:05.885960 [wifilib] asphodel_delete_packet_pool
12:05:05.889811 LifeBridgeWmCommand : waiting reply - 101 
LifeBridgeWmCommand : end - 101 ( result : ok ) 
 relay server : 5
12:05:05.979049  relay server : 5

If the time endpoint is not available, the UART log is slightly different:

15:45:38.886545 WebEventHandler [6]
15:45:38.889966 WebCheckRelayServer : 2 ( -8 ) 0
LifeBridgeReply(0x3c8a) 
LifeBridgeWaitMsg : done
15:45:38.898486 ui_msg_web_check_relay_server_state : 2
[...]
LifeBridgeWmCommand : end - 101 ( result : ok ) 
 relay server : 2
15:45:41.429852  relay server : 2
15:45:41.431507  relay server : 2