As dingoo-digital-usa explained, we are not the ones who actually fixed the problem, we just made a way to easily apply the fix to more apps. For those interested, here is the script. It runs in Python 2.6 (probably Python 2.4 or higher is good enough, but it is not compatible with Python 3.x).
import sys
def parseHex(hexString):
assert len(hexString) % 2 == 0
return ''.join(
chr(int(hexString[i : i + 2], 16))
for i in xrange(0, len(hexString), 2)
)
signature = parseHex('50ffbd279000b0af')
replacement = parseHex('010002240800e0030000000000000000')
def patchFiles(fileNames):
for fileName in fileNames:
print 'Loading %s...' % fileName
inp = open(fileName, 'rb')
try:
data = inp.read()
finally:
inp.close()
print 'Analyzing %s...' % fileName
index = data.find(signature)
if index == -1:
print 'Signature not found; skipping file'
else:
print 'Signature found at index %08X' % index
outFileName = fileName + '.patched'
print 'Saving %s...' % outFileName
out = open(outFileName, 'wb')
try:
out.write(data[ : index])
out.write(replacement)
out.write(data[index + len(replacement) : ])
finally:
out.close()
if len(sys.argv) >= 2:
patchFiles(sys.argv[1 : ])
print 'Done.'
else:
print >>sys.stderr, 'Usage: python apppatch.py file1.app [file2.app [...]]'
sys.exit(2)
The signature this script looks for is the first two instructions of a routine. They are replaced by "return 1". I have no idea what the routine does. It would be interesting if someone could disassemble and analyze it.