Reverse Engineering the firmware on a Kenwood DDX9903S

I bought and really like my Kenwood Excelon DDX9903S headunit. I had it in my WRX, and moved it to my LS430. It supports Android Auto and CarPlay, which I find really useful when driving.

However, it has a nag screen every time it boots up. This got me curious as to how it worked, and see if it could be patched to skip this disclaimer. I figured it probably ran Linux on a SoC, as pretty much everything does nowadays. So I grabbed the latest firmware for it (mine was already updated to it), and started probing.

S_V2_7_0008_0600_AT1.zip

Extract that and you get 3 folders under S_V2_7_0008_0600/:

BOOT_V2_7_0008_0600_release/
MAIN_V1_0_2758_0400/
SOC_V2_7_0008_0600/

In each there’s a .nfu file, which I’ve never encountered before. I ran binwalk on each:

[BOOT_V2_7_0008_0600_release]$ binwalk Boot_2.7.0008.0600.nfu
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
248776 0x3CBC8 Android bootimg, kernel size: 0 bytes, kernel addr: 0x4F525245, ramdisk size: 1226848850 bytes, ramdisk addr: 0x6C61766E, product name: "ERROR: Cannot read kernel image"
1571592 0x17FB08 ELF, 64-bit LSB shared object, AMD x86-64, version 1 (SYSV)
2358024 0x23FB08 ELF, 64-bit LSB shared object, AMD x86-64, version 1 (SYSV)
3209992 0x30FB08 ELF, 64-bit LSB shared object, AMD x86-64, version 1 (SYSV)

Surprise, surprise, it runs Android. But, I’m thinking this image is possibly just the firmware updater, and not what I am looking for.

Continue reading

Adding a disk to an encrypted mdadm array

My RAID6 was originally planned with 6 drives, but only had 5 for a while due to space concerns with the case. However, I found as a file, media, and multiple cryptocurrency node it filled up the 2.7TB pretty quickly. So, I got a new case (and some more RAM), which has proper space for 6 3.5″ drives (and 2 5.25″). When migrating to this I decided to add the extra 1TB WD Red NAS drive I bought but have not been able to use.

The case is a Fractal Design Define Mini, and I am thoroughly impressed. Six 3.5″ slots, two 5.25″ external slots, and lots of sound padding on the doors and sides.

Continue reading

Sync login/lock screen wallpaper to current desktop background

For Windows 7, this turned out to be pretty easy to do via PowerShell. I just had to look for a native image resizing library since the lock screen for some odd reason, only supports JPEGs up to 256KB in size. Probably one of those legacy items left over from NT, like the file system permissions dialogs, and the built-in environment variables editor…

I ended up using WIA’s ImageProcess COM library which worked surprisingly well. It just resizes whatever you give it to the primary desktop resolution, so that’s not guaranteed to be less than 256KB, but it works more often than not so it was good enough for my purposes.

https://github.com/nearwood/wallsync

Windmill – Windows Window unclobberer

I noticed during the (many) meetings I attend that disconnecting and reconnecting my laptop from the dock reorganizes all my windows to the laptop’s display. This got annoying to have to drag and resize everything when returning to my desk, which has a 3 monitor setup. So, I wrote this small Win32 application to allow you to save the positioning and size of all windows and then restore them at a later time.

https://github.com/nearwood/windmill

There are binaries in the releases tab.

There doesn’t seem to be an API to detect when removed or added from a dock, so a futher enhancement I’d like to do is to detect when (the same) monitors are re-connected and then automatically move all the windows back. But, it works really well as it is.

405HP 280Z

A somewhat local place had a surprise dyno day so I went to try and tune my car a bit. Was somewhat successful, reaching 405 HP and 420 Ft-lbs. before giving up. I was hoping for 450 HP, as my turbo and injectors should be able to support it easily, but oh well. I couldn’t get past ~14psi or so.

But I kept experiencing some spark blow-out and had a rear main leak, so I decided to cut it short.

Fixing mirrorlist on Arch Linux Arm (Raspberry Pi)

I hadn’t updated my Raspberry Pi (a B+ model for my rpi-drd project) in about a year. Pacman -Syu kept complaining about being unable to find files on any of the mirrors.

So I, without thinking, ran reflector on an x86 host and copied it over. Oops. Now it definitely can’t find packages.

The archlinuxarm.org website gave me the hostname I needed, but not the entire URL. Put this in your mirrorlist (as the sole entry) to restore functionality:

Server = http://mirror.archlinuxarm.org/$arch/$repo

DCS MiG-21: First Flight

I have DCS World, and whenever I get a new module I like to try and “just fly the thing” with minimal cockpit familiarity. I always expect hilarity to ensue but it’s really not that exciting. Like with the Ka-50 I just crashed with in-air starts, and could never get it off the ground with a cold start (until I read the operating manual). But helicopters are hard, so that’s not a surprise. Planes are easy. After getting the MiG-21BIS module though, I did have a few solid chuckles.

Here’s my in my first ever flight (started in flight at about 500 meters). I attempt to find the gear and flap controls and land. Gear was easy; flaps, not so much but I ended up ‘cheating’ and using a keyboard shortcut for flaps as I feared I was coming in way too fast. Which I still was. Skip to 4:50 if you just want to see the ‘bouncy’ landing.

And then I fumbled around trying to open the cockpit and extinguish the fire (which was a entire-plane-on-fire, not engine fire), but my fire extinguisher system was off.

October Autocross

Got a new oxygen sensor installed, tuned it a bit, and went to an autocross in my 280Z a couple weeks ago. I was third in my class! Out of three, though. So last. Still, the real victory is that my car made it there, ran, started and restarted fine, and then made it back home.

I also got to try my slicks out for the first time, and man, they make the car much more predictable. Lift-off oversteer is still there but manageable and much more forgiving (which probably doesn’t help that I have a bad habit of inducing it). Traction is not as greatly improved as I thought it would be, but I was just running them on the rear.

Anyway, here are a couple runs. A fun run (no time, just learning the course), and my fastest run.