Can adb shell work in binary mode? adb shell sends \r\n instead of \n. Can I tell adb to not change the datastream (just like I can with ssh)?
Yes, but:

The linebreak conversion is not done by ADB, but your host system (and its console host), Windows.

This issue has already been discussed on SO, and there are a few posts providing possible solutions. Here are some of them


Stack Overflow: Read binary stdout data from adb shell?  
This site (Android.SE): Is it possible to cat a file to an android phone and dd to /dev/xxx on the fly with just adb shell?