Hi,
I just wrote a quick tool to patch all occurrences of a file inside a program folder (no matter the file name) given an MD5 checksum.
It is useful when the original files may have different names and are present in multiple sub directories.
Usage:
python replace.py FOLDER MD5_SUM CRACKED_FILE_PATH
Example:
python replace.py 098f6bcd4621d373cade4e832627b4f6 c:\mysoftware license.dll
Where:
-> 098f6bcd4621d373cade4e832627b4f6: is the MD5 of the original files to be replaced by the cracked file. You can get the MD5 checksum by using powershell with the function Get-FileHash -alg md5 ORIGINAL_FILE
-> c:\mysoftware is the folder of the software
-> license.dll is the path to the cracked file
You can also edit the file and set DEBUG_MODE=True to only print the occurrence of the files instead of replacing them.
Compiled version is also available attached.
Code:
import os
import sys
import hashlib
import shutil
DEBUG_MODE=False
if len(sys.argv) < 4:
print("Usage: python replace.py FOLDER MD5_SUM FILE_PATH_TO_REPLACE_BY")
sys.exit(-1)
g_path = sys.argv[1]
md5_to_find = sys.argv[2]
to_replace_by = sys.argv[3]
if not os.path.isfile(to_replace_by):
print("Error: the path of the file to replace by does not exists")
sys.exit(-1)
def md5sum(fname):
try:
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
except:
pass
return "ERROR"
for root, directories, filenames in os.walk(g_path):
for filename in filenames:
full_path = os.path.join(root, filename)
checksum = md5sum(full_path)
#print(full_path, md5sum(full_path))
if not DEBUG_MODE and checksum == md5_to_find:
print("Replacing [%s] by [%s]" % (full_path, to_replace_by))
shutil.copy(to_replace_by, full_path)
elif checksum == md5_to_find:
print("Should replace [%s] by [%s]" % (full_path, to_replace_by))