They could be using both ulibc and glibc for different executables as they're all statically linked.
As far as hdparm goes, it looks like it's only used to spin up and down the drive. If you look around the hdparm strings in the daemon files you see -y and -Y which are spin-down commands. I don't see any -i or -I which you'd expect from a program that uses hdparm to get a drive signature.
My guess is that the Linux kernel (even modified) boots, but phatd or 51d or one of the other programs does a signature on the kernel file and hangs if it's not right. I've got no way to verify that just yet, though.
I think you're right. They're using uClibc for busybox, and
I think glibc for everything else -- not really sure why. I know that we're using linux 2.4.18 and gcc 2.95.3 and busybox-0.52, but I'm still looking for the exact versions of glibc and uClibc to make it easier to match up the functions in the assembly dump with their C counterparts.
I'm with you on the hdparm bit, but I still fear that both the linux kernel and the drive signature are checked by the firmware. Here's why:
* If the firmware is checking the drive signature and reading ext2fs to load + boot the kernel, then it already has all of the code necessary to verify linux.sig
* The firmware images (*.pac) are both encrypted AND signed, in contrast with everything else (kernel, usermode utils) which are merely signed -- this suggests that they have something to hide in the firmware, as opposed to merely preventing us from reflashing
* These guys are clever (hi, guys!), and it's the right way to do it. If linux.sig isn't checked until phatd or 51d, then we could build a kernel module / patch the kernel to fake-out the signature checking routines. They should make sure the kernel is intact before running it.
* grepping through everything for /dos/linux returns nothing, leading me to doubt they're re-reading it anywhere.
If this is true, then our only avenue would probably be to use the JTAG connectors to reflash something, unless we're able to use the rm %s/%s with shell escape chars, or somehow sneak in a buffer overflow.
In other words, press on -- I hope you're right!
-b