{"id":1239,"date":"2019-01-21T20:21:27","date_gmt":"2019-01-22T02:21:27","guid":{"rendered":"http:\/\/www.jedge.com\/wordpress\/?p=1239"},"modified":"2019-01-21T20:21:27","modified_gmt":"2019-01-22T02:21:27","slug":"escam-qf100-uart","status":"publish","type":"post","link":"https:\/\/www.jedge.com\/wordpress\/2019\/01\/escam-qf100-uart\/","title":{"rendered":"ESCAM QF100 &#8211; UART"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.jedge.com\/images\/QF100_stock.jpg\" width=\"250\" height=\"250\" class=\"alignleft size-full\" \/>Please see the original post on <a href=\"http:\/\/www.jedge.com\/wordpress\/2018\/11\/ip-camera-security\/\" rel=\"noopener\" target=\"_blank\">IP Camera Security<\/a> before reading the rest of this post.<\/p>\n<p>Based on <a target=\"_blank\" href=\"http:\/\/www.jedge.com\/wordpress\/2018\/11\/ip-camera-security\/#comments\">comment #1<\/a> by Carlo UART exists on his Hi3518 wifi cameras. He also mentions the default password of &#8220;zg2014&#8221; for both of his cameras. A Google search for that password reveals other Hi3518 cameras including the Mustcam H809P which has detailed images posted on a forum. This camera board is very different from the ESCAM QF100 but examining the traces from the SoC to the documented TX\/RX on the Mustcam shows potential UART on the QF100. I was off by a couple pins based on my attempt in the <a href=\"http:\/\/www.jedge.com\/wordpress\/2018\/11\/ip-camera-security\/\" rel=\"noopener\" target=\"_blank\">original post<\/a>.<br \/>\n<!--more--><br \/>\nThe forum describing the Mustcam H809P has two HiRes images of the camera&#8217;s board (<a href=\"http:\/\/www.jedge.com\/images\/mustcam_h809p_front.jpg\" rel=\"noopener\" target=\"_blank\">front <\/a>and <a href=\"http:\/\/www.jedge.com\/images\/mustcam_h809p_back.jpg\" rel=\"noopener\" target=\"_blank\">back<\/a>). Examining and comparing the traces leading from the SoC on the H809P to the UART and the same traces on the QF100 shows that they lead under the MicroSD card reader. Before I removed the reader I examined the bottom of the QF100 board and saw a potential header. I soldered four wires and connected them to the JTAGulater.  Using the JTAGulator is a bit overkill since you can easily identify GND via a continuity test and VCC with the same voltmeter.  After that it is just swapping the other two options for RX and TX with your UART to USB adapter. But I do have a JTAGulator and it is simple to use.<pre><code>. . . SNIP . . .\n&gt; v\nCurrent target I\/O voltage: Undefined\nEnter new target I\/O voltage (1.2 - 3.3, 0 for off): 3.3\nNew target I\/O voltage set: 3.3\nEnsure VADJ is NOT connected to target!\n\n&gt; u\n. . . SNIP . . .\nUART&gt; u\nUART pin naming is from the target&#039;s perspective.\nEnter text string to output (prefix with \\x for hex) [CR]:\nEnter starting channel [0]:\nEnter ending channel [2]:\nPossible permutations: 6\n. . . SNIP . . .\nTXD: 0\nRXD: 1\nBaud: 115200\nData: ..Unknown comman [ 0D 0A 55 6E 6B 6E 6F 77 6E 20 63 6F 6D 6D 61 6E ]\n------\nUART scan complete.<\/code><\/pre>Full <a href=\"http:\/\/www.jedge.com\/code\/ESCAM_QF100_IP_camera_UART_JTAGulator_log.txt\" rel=\"noopener\" target=\"_blank\">JTAGulator log<\/a>.<br \/>\nThis images shows UART on the ESCAM QF100.<br \/>\n<a href=\"http:\/\/www.jedge.com\/images\/ESCAM_QF100_UART_header.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.jedge.com\/images\/ESCAM_QF100_UART_header.png\" width=\"400\" height=\"244\" class=\"aligncenter size-full\" \/><\/a><br \/>\nConnecting RX\/TX\/GND to your UART to USB adapter at 115200,8n1 and you have root access to the device.<br \/>\n<pre><code>U-Boot 2010.06 (May 17 2014 - 15:03:14)\n\nCheck spi flash controller v350... Found\nSpi(cs1) ID: 0xC2 0x20 0x18 0xC2 0x20 0x18\nSpi(cs1): Block:64KB Chip:16MB Name:&quot;MX25L128XX&quot;\nIn:&nbsp;&nbsp;&nbsp;&nbsp;serial\nOut:&nbsp;&nbsp; serial\nErr:&nbsp;&nbsp; serial\nHit any key to stop autoboot:&nbsp;&nbsp;0 \n16384 KiB hi_sfc at 0:0 is now current device\n\n## Booting kernel from Legacy Image at 82000000 ...\n&nbsp;&nbsp; Image Name:&nbsp;&nbsp; Linux-3.0.8\n&nbsp;&nbsp; Image Type:&nbsp;&nbsp; ARM Linux Kernel Image (uncompressed)\n&nbsp;&nbsp; Data Size:&nbsp;&nbsp;&nbsp;&nbsp;2134796 Bytes = 2 MiB\n&nbsp;&nbsp; Load Address: 80008000\n&nbsp;&nbsp; Entry Point:&nbsp;&nbsp;80008000\n&nbsp;&nbsp; Loading Kernel Image ... OK\nOK\n\nStarting kernel ...\n\nUncompressing Linux... done, booting the kernel.\nLinux version 3.0.8 (root@ubuntu) (gcc version 4.4.1 (Hisilicon_v100(gcc4.4-290+uclibc_0.9.32.1+eabi+linuxpthread)) ) #30 Tue May 27 21:58:10 CST 2014\nCPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177\nCPU: VIVT data cache, VIVT instruction cache\nMachine: hi3518\n. . . SNIP . . .<\/code><\/pre><br \/>\nThe full boot log can be found <a href=\"http:\/\/www.jedge.com\/code\/ESCAM_QF100_IP_camera_boot_log.txt\" rel=\"noopener\" target=\"_blank\">here<\/a>. Examining the log shows that the device spits out the HTTP username and password in cleartext as well as the the WiFi ESSID and passphrase. NICE! Cracking the DES password hash for the root account found in <kbd>\/etc\/passwd<\/kbd> is &#8220;123456&#8221; just like so many of these devices.<\/p>\n<p>Thank you Carlo for the hint!<\/p>\n<p><strong>Resources<\/strong><br \/>\n<a target=\"_blank\" href=\"https:\/\/ipcamtalk.com\/threads\/mustcam-h809p-720p-pan-tilt-wifi-camera-serial-pinout-and-investigation.11843\/\">https:\/\/ipcamtalk.com\/threads\/mustcam-h809p-720p-pan-tilt-wifi-camera-serial-pinout-and-investigation.11843\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Please see the original post on IP Camera Security before reading the rest of this post. Based on comment #1 by Carlo UART exists on his Hi3518 wifi cameras. He also mentions the default password of &#8220;zg2014&#8221; for both of his cameras. A Google search for that password reveals other Hi3518 cameras including the Mustcam [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[163],"tags":[],"class_list":["post-1239","post","type-post","status-publish","format-standard","hentry","category-hacking"],"_links":{"self":[{"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/posts\/1239","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/comments?post=1239"}],"version-history":[{"count":6,"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/posts\/1239\/revisions"}],"predecessor-version":[{"id":1245,"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/posts\/1239\/revisions\/1245"}],"wp:attachment":[{"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/media?parent=1239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/categories?post=1239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jedge.com\/wordpress\/wp-json\/wp\/v2\/tags?post=1239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}