If you are one of the few still using MS Money for personal finance tracking, the last bunch of years have been trying. Microsoft ceased development on the product releasing the Microsoft Money Plus Sunset Deluxe Edition that stops trying to connect to their non-existent servers (more information available here).
Recent upgrades to Windows 10 caused issues for MS Money users with the error Money requires Internet Explorer 6 to function properly. Please reinstall Internet Explorer 6 so these components can be added. which requires updating of a registry key. The short version is the key HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Version needs to be updated to 9.11.10240.0.
That had me successfully working on Windows 10 with MS Money. I then encountered a strange issue where when loading an OFX or QIF file retrieved from an online bank I would get the message Microsoft Money Has Stopped Working and then the application would crash. As I was thinking I was finally going to be forced to switch to Quicken, I came across a forum post mentioning the issue had to do with a bad piece of code in the mnyob99.dll.
The original issue was identified and patched long ago by the amazing technical wizard Raymond Chen in this post Microsoft Money crashes during import of account transactions or when changing a payee of a downloaded transaction where he talks about patching code beginning at the offset 003FACE8. His process of diagnosing and resolving the issue all without access to the source code is a work of technical artistry. Well worth checking out.
This led to many folks posting patched versions of the dll for download (which isn’t that appealing to any security conscious folks). User Cal Learner on the forum though posted a zipped up concise little Python script that handles replacing the byte sequence in the dll. I have listed his nice short little script below:
#patch99.py 2013-1-5 Cal Learner. Maybe has bugs. #Experimental code for advanced patch-oriented users. #You are free to use this in any helpful way. import os, sys,string, hashlib if __name__=="__main__": f = open("mnyob99.dll.orig",'rb') # file we are opening. data = f.read() #as-found file in f.close() bad_bytes= b'\x85\x1C\xFD\xFF\xFF\x50\x6A\x5C\xFF\xB5\x1C\xFD\xFF\xFF\xE8' good_bytes=b'\x8D\x1C\xFD\xFF\xFF\x51\x6A\x5C\x85\xB5\x1C\xFD\xFF\xFF\xB9' data_bad_spot =data.find(bad_bytes) print "String offset in file:", data_bad_spot, "hex:",hex(data_bad_spot) bad_finds=string.count(data,bad_bytes) good_finds=string.count(data,good_bytes) print "Diagnostics: " ,len(data),', ',bad_finds,', ',good_finds,'.' #print hashlib.md5(data).hexdigest m = hashlib.md5() m.update(data) print "MD5 for mnyob99.dll.orig: ", m.hexdigest() if (data_bad_spot <0): #did not find the bad string print "I don't find the problem target string. Doing nothing." sys.exit(1) else: # found a bad spot.. print "Patching the file" f = open("mnyob99.dll.fix",'wb') # file we are opening. fixed_data=data.replace(bad_bytes, good_bytes,1) #replace the first instance m2= hashlib.md5() m2.update(fixed_data) print "MD5 for mnyob99.dll.fix: ", m2.hexdigest() f.write(fixed_data) sys.exit(0)
After using his script to patch my file, I’m once again back in business with my old antiquated (but perfectly functioning) version of MS Money running on Windows 10. Many thanks to Raymond Chen and Cal Learner for putting their information out there for other users to benefit from.