View Single Post
  #1  
Old 10-22-2018, 19:26
Elesty Elesty is offline
Friend
 
Join Date: Feb 2017
Posts: 9
Rept. Given: 0
Rept. Rcvd 0 Times in 0 Posts
Thanks Given: 9
Thanks Rcvd at 12 Times in 5 Posts
Elesty Reputation: 0
MD5 replace tool

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))
Attached Files
File Type: 7z replace.7z (4.81 MB, 46 views)
Reply With Quote
The Following User Says Thank You to Elesty For This Useful Post:
Indigo (07-19-2019)