I've managed to implement the hashing code from heroin glands library, and I can hash without errors, though I've never sent this packet without obtaining these values without BNLS. So I'm unsure if I have built the packet correctly.
Also can you take a look at how I copied the data to Pkt.KeyData, it's quick and dirty so forgive me. And I grabbed the ExeVersion value from heroin, so I think it's a little out of date, and I'm unsure what this value actually is, and thus how to calculate it.
http://pastebin.com/ZJnzkDmh