Beispiel #1
0
        static void Main(string[] args)
        {
            var file       = args.FirstOrDefault();
            var baseDir    = Path.GetDirectoryName(file);
            var outputPath = Path.Combine(baseDir, Path.GetFileNameWithoutExtension(file) + "_patched" + Path.GetExtension(file));

            var pe      = new PeFile(file);
            var manager = new IATManager(pe);
            var config  = JsonConvert.DeserializeObject <Dictionary <string, string> >(File.ReadAllText(Path.Combine(GetCurrentDirectory(), "config.json")));

            byte[] output = Array.Empty <byte>();
            foreach (var c in config)
            {
                output = PatchFile(manager, c.Key, c.Value);
            }

            File.WriteAllBytes(outputPath, output);
        }
Beispiel #2
0
        static byte[] PatchFile(IATManager manager, string originalFunc, string hookFunc)
        {
            var original = manager.GetFunction(originalFunc);

            if (original == null)
            {
                throw new Exception($"Original: {originalFunc} not found !");
            }

            var hook = manager.GetFunction(hookFunc);

            if (hook == null)
            {
                throw new Exception($"Hook: {hookFunc} not found !");
            }

            var iatThunk    = manager.GetIATThunk(original);
            var delta       = hook.IATOffset - original.IATOffset;
            var fullAddress = iatThunk + delta;

            return(manager.PatchIAT(iatThunk, fullAddress));
        }