使用Delphi编写DLL劫持内存补丁

在有些破解程序时,不能暴力修改程序,修改后,程序就不能正常运行,因为很多程序启动时有自我的校验,但是当程序加载到内存后,在内存中修改相应的地方就可以达到破解的效果。那么怎样在不破坏程序的前提下,达到修改程序呢?

当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持了。

我们常用的系统的DLL有:

lpk.dll、msimg32.dll、version.dll、winmm.dll、usp10.dll、uxtheme.dll 等

为了完成对软件的破解,需要按以下步骤进行:

1、首先分析要破解的软件(以ZY_Modbus_Slave_sim.exe为例)调用了那些系统的dll文件,可以使用微软出品的进程资源管理器procexp64 https://download.sysinternals.com/files/ProcessExplorer.zip

该软件调用了操作系统的uxtheme.dll文件

2、使用dllexp工具,分析出该系统untheme.dll的所有函数

将所有的函数名称保留出来,如下:

 3、打开Delphi,创建一个Dll文件项目,项目名称修改保存为uxtheme,

根据每个函数名新建一个对应的指针,例如:

BeginBufferedAnimation 修建一个 PoldBeginBufferedAnimation: Pointer;
对应创建一个过程:
procedure BeginBufferedAnimation;  
asm jmp PoldBeginBufferedAnimation
end;
即原程序调用BeginBufferedAnimation函数时,自动调用 PoldBeginBufferedAnimation
程序在启动时 将PoldBeginBufferedAnimation 指向原系统的 BeginBufferedAnimation函数
PoldBeginBufferedAnimation := GetProcAddress(ModHandle, 'BeginBufferedAnimation');
这样就可以在dll运行时将所有的函数指向原系统的函数,同时可以在程序中加入自己的代码,到达不破坏原程序而进行内存修改程序的功能。
4、编程程序,生成untheme.dll文件
5、将untheme.dll文件拷贝到ZY_Modbus_Slave_sim.exe文件所在目录中,就可以完成内存补丁的破解工作。
ZY_Modbus_Slave_sim在启动调用untheme.dll时,自动调用执行同目录的这个文件。

其样例程序如下: 

library uxtheme;

uses
  Winapi.Windows,
  Winapi.TlHelp32, Winapi.mmsystem,
  Winapi.PsAPI,
  System.SysUtils,
  System.Classes;
{$R *.res}
var
  ModHandle: Cardinal;
  CCID: DWORD;
  MMTimerID: Integer; // 定时器ID

  PoldBeginBufferedAnimation: Pointer;
  PoldBeginBufferedPaint: Pointer;
  PoldBeginPanningFeedback: Pointer;
  PoldBufferedPaintClear: Pointer;
  PoldBufferedPaintInit: Pointer;
  PoldBufferedPaintRenderAnimation: Pointer;
  PoldBufferedPaintSetAlpha: Pointer;
  PoldBufferedPaintStopAllAnimations: Pointer;
  PoldBufferedPaintUnInit: Pointer;
  PoldCloseThemeData: Pointer;
  PoldDllCanUnloadNow: Pointer;
  PoldDllGetActivationFactory: Pointer;
  PoldDllGetClassObject: Pointer;
  PoldDrawThemeBackground: Pointer;
  PoldDrawThemeBackgroundEx: Pointer;
  PoldDrawThemeEdge: Pointer;
  PoldDrawThemeIcon: Pointer;
  PoldDrawThemeParentBackground: Pointer;
  PoldDrawThemeParentBackgroundEx: Pointer;
  PoldDrawThemeText: Pointer;
  PoldDrawThemeTextEx: Pointer;
  PoldEnableThemeDialogTexture: Pointer;
  PoldEnableTheming: Pointer;
  PoldEndBufferedAnimation: Pointer;
  PoldEndBufferedPaint: Pointer;
  PoldEndPanningFeedback: Pointer;
  PoldGetBufferedPaintBits: Pointer;
  PoldGetBufferedPaintDC: Pointer;
  PoldGetBufferedPaintTargetDC: Pointer;
  PoldGetBufferedPaintTargetRect: Pointer;
  PoldGetColorFromPreference: Pointer;
  PoldGetCurrentThemeName: Pointer;
  PoldGetImmersiveColorFromColorSetEx: Pointer;
  PoldGetImmersiveUserColorSetPreference: Pointer;
  PoldGetThemeAnimationProperty: Pointer;
  PoldGetThemeAnimationTransform: Pointer;
  PoldGetThemeAppProperties: Pointer;
  PoldGetThemeBackgroundContentRect: Pointer;
  PoldGetThemeBackgroundExtent: Pointer;
  PoldGetThemeBackgroundRegion: Pointer;
  PoldGetThemeBitmap: Pointer;
  PoldGetThemeBool: Pointer;
  PoldGetThemeColor: Pointer;
  PoldGetThemeDocumentationProperty: Pointer;
  PoldGetThemeEnumValue: Pointer;
  PoldGetThemeFilename: Pointer;
  PoldGetThemeFont: Pointer;
  PoldGetThemeInt: Pointer;
  PoldGetThemeIntList: Pointer;
  PoldGetThemeMargins: Pointer;
  PoldGetThemeMetric: Pointer;
  PoldGetThemePartSize: Pointer;
  PoldGetThemePosition: Pointer;
  PoldGetThemePropertyOrigin: Pointer;
  PoldGetThemeRect: Pointer;
  PoldGetThemeStream: Pointer;
  PoldGetThemeString: Pointer;
  PoldGetThemeSysBool: Pointer;
  PoldGetThemeSysColor: Pointer;
  PoldGetThemeSysColorBrush: Pointer;
  PoldGetThemeSysFont: Pointer;
  PoldGetThemeSysInt: Pointer;
  PoldGetThemeSysSize: Pointer;
  PoldGetThemeSysString: Pointer;
  PoldGetThemeTextExtent: Pointer;
  PoldGetThemeTextMetrics: Pointer;
  PoldGetThemeTimingFunction: Pointer;
  PoldGetThemeTransitionDuration: Pointer;
  PoldGetUserColorPreference: Pointer;
  PoldGetWindowTheme: Pointer;
  PoldHitTestThemeBackground: Pointer;
  PoldIsAppThemed: Pointer;
  PoldIsCompositionActive: Pointer;
  PoldIsThemeActive: Pointer;
  PoldIsThemeBackgroundPartiallyTransparent: Pointer;
  PoldIsThemeDialogTextureEnabled: Pointer;
  PoldIsThemePartDefined: Pointer;
  PoldOpenThemeData: Pointer;
  PoldOpenThemeDataEx: Pointer;
  PoldOpenThemeDataForDpi: Pointer;
  PoldSetThemeAppProperties: Pointer;
  PoldSetWindowTheme: Pointer;
  PoldSetWindowThemeAttribute: Pointer;
  PoldThemeInitApiHook: Pointer;
  PoldUpdatePanningFeedback: Pointer;

procedure BeginBufferedAnimation;
asm jmp PoldBeginBufferedAnimation
end;

procedure BeginBufferedPaint;
asm jmp PoldBeginBufferedPaint
end;
procedure BeginPanningFeedback;
asm jmp PoldBeginPanningFeedback
end;

procedure BufferedPaintClear;
asm jmp PoldBufferedPaintClear
end;

procedure BufferedPaintInit;
asm jmp PoldBufferedPaintInit
end;

procedure BufferedPaintRenderAnimation;
asm jmp PoldBufferedPaintRenderAnimation
end;

procedure BufferedPaintSetAlpha;
asm jmp PoldBufferedPaintSetAlpha
end;

procedure BufferedPaintStopAllAnimations;
asm jmp PoldBufferedPaintStopAllAnimations
end;

procedure BufferedPaintUnInit;
asm jmp PoldBufferedPaintUnInit
end;

procedure CloseThemeData;
asm jmp PoldCloseThemeData
end;

procedure DllCanUnloadNow;
asm jmp PoldDllCanUnloadNow
end;

procedure DllGetActivationFactory;
asm jmp PoldDllGetActivationFactory
end;

procedure DllGetClassObject;
asm jmp PoldDllGetClassObject
end;

procedure DrawThemeBackground;
asm jmp PoldDrawThemeBackground
end;

procedure DrawThemeBackgroundEx;
asm jmp PoldDrawThemeBackgroundEx
end;
procedure DrawThemeEdge;
asm jmp PoldDrawThemeEdge
end;

procedure DrawThemeIcon;
asm jmp PoldDrawThemeIcon
end;

procedure DrawThemeParentBackground;
asm jmp PoldDrawThemeParentBackground
end;

procedure DrawThemeParentBackgroundEx;
asm jmp PoldDrawThemeParentBackgroundEx
end;

procedure DrawThemeText;
asm jmp PoldDrawThemeText
end;

procedure DrawThemeTextEx;
asm jmp PoldDrawThemeTextEx
end;
procedure EnableThemeDialogTexture;
asm jmp PoldEnableThemeDialogTexture
end;

procedure EnableTheming;
asm jmp PoldEnableTheming
end;

procedure EndBufferedAnimation;
asm jmp PoldEndBufferedAnimation
end;

procedure EndBufferedPaint;
asm jmp PoldEndBufferedPaint
end;

procedure EndPanningFeedback;
asm jmp PoldEndPanningFeedback
end;

procedure GetBufferedPaintBits;
asm jmp PoldGetBufferedPaintBits
end;

procedure GetBufferedPaintDC;
asm jmp PoldGetBufferedPaintDC
end;
procedure GetBufferedPaintTargetDC;
asm jmp PoldGetBufferedPaintTargetDC
end;
procedure GetBufferedPaintTargetRect;
asm jmp PoldGetBufferedPaintTargetRect
end;

procedure GetColorFromPreference;
asm jmp PoldGetColorFromPreference
end;

procedure GetCurrentThemeName;
asm jmp PoldGetCurrentThemeName
end;
procedure GetImmersiveColorFromColorSetEx;
asm jmp PoldGetImmersiveColorFromColorSetEx
end;
procedure GetImmersiveUserColorSetPreference;
asm jmp PoldGetImmersiveUserColorSetPreference
end;

procedure GetThemeAnimationProperty;
asm jmp PoldGetThemeAnimationProperty
end;

procedure GetThemeAnimationTransform;
asm jmp PoldGetThemeAnimationTransform
end;
procedure GetThemeAppProperties;
asm jmp PoldGetThemeAppProperties
end;

procedure GetThemeBackgroundContentRect;
asm jmp PoldGetThemeBackgroundContentRect
end;

procedure GetThemeBackgroundExtent;
asm jmp PoldGetThemeBackgroundExtent
end;

procedure GetThemeBackgroundRegion;
asm jmp PoldGetThemeBackgroundRegion
end;
procedure GetThemeBitmap;
asm jmp PoldGetThemeBitmap
end;

procedure GetThemeBool;
asm jmp PoldGetThemeBool
end;

procedure GetThemeColor;
asm jmp PoldGetThemeColor
end;

procedure GetThemeDocumentationProperty;
asm jmp PoldGetThemeDocumentationProperty
end;

procedure GetThemeEnumValue;
asm jmp PoldGetThemeEnumValue
end;

procedure GetThemeFilename;
asm jmp PoldGetThemeFilename
end;

procedure GetThemeFont;
asm jmp PoldGetThemeFont
end;
procedure GetThemeInt;
asm jmp PoldGetThemeInt
end;
procedure GetThemeIntList;
asm jmp PoldGetThemeIntList
end;
procedure GetThemeMargins;
asm jmp PoldGetThemeMargins
end;

procedure GetThemeMetric;
asm jmp PoldGetThemeMetric
end;

procedure GetThemePartSize;
asm jmp PoldGetThemePartSize
end;

procedure GetThemePosition;
asm jmp PoldGetThemePosition
end;

procedure GetThemePropertyOrigin;
asm jmp PoldGetThemePropertyOrigin
end;

procedure GetThemeRect;
asm jmp PoldGetThemeRect
end;

procedure GetThemeStream;
asm jmp PoldGetThemeStream
end;

procedure GetThemeString;
asm jmp PoldGetThemeString
end;

procedure GetThemeSysBool;
asm jmp PoldGetThemeSysBool
end;

procedure GetThemeSysColor;
asm jmp PoldGetThemeSysColor
end;

procedure GetThemeSysColorBrush;
asm jmp PoldGetThemeSysColorBrush
end;

procedure GetThemeSysFont;
asm jmp PoldGetThemeSysFont
end;

procedure GetThemeSysInt;
asm jmp PoldGetThemeSysInt
end;

procedure GetThemeSysSize;
asm jmp PoldGetThemeSysSize
end;

procedure GetThemeSysString;
asm jmp PoldGetThemeSysString
end;

procedure GetThemeTextExtent;
asm jmp PoldGetThemeTextExtent
end;

procedure GetThemeTextMetrics;
asm jmp PoldGetThemeTextMetrics
end;

procedure GetThemeTimingFunction;
asm jmp PoldGetThemeTimingFunction
end;

procedure GetThemeTransitionDuration;
asm jmp PoldGetThemeTransitionDuration
end;
procedure GetUserColorPreference;
asm jmp PoldGetUserColorPreference
end;
procedure GetWindowTheme;
asm jmp PoldGetWindowTheme
end;

procedure HitTestThemeBackground;
asm jmp PoldHitTestThemeBackground
end;

procedure IsAppThemed;
asm jmp PoldIsAppThemed
end;

procedure IsCompositionActive;
asm jmp PoldIsCompositionActive
end;

procedure IsThemeActive;
asm jmp PoldIsThemeActive
end;

procedure IsThemeBackgroundPartiallyTransparent;
asm jmp PoldIsThemeBackgroundPartiallyTransparent
end;

procedure IsThemeDialogTextureEnabled;
asm jmp PoldIsThemeDialogTextureEnabled
end;

procedure IsThemePartDefined;
asm jmp PoldIsThemePartDefined
end;

procedure OpenThemeData;
asm jmp PoldOpenThemeData
end;
procedure OpenThemeDataEx;
asm jmp PoldOpenThemeDataEx
end;

procedure OpenThemeDataForDpi;
asm jmp PoldOpenThemeDataForDpi
end;

procedure SetThemeAppProperties;
asm jmp PoldSetThemeAppProperties
end;
procedure SetWindowTheme;
asm jmp PoldSetWindowTheme
end;

procedure SetWindowThemeAttribute;
asm jmp PoldSetWindowThemeAttribute
end;

procedure ThemeInitApiHook;
asm jmp PoldThemeInitApiHook
end;

procedure UpdatePanningFeedback;
asm jmp PoldUpdatePanningFeedback
end;

function AdjustProcessPrivilege(ProcessHandle: THandle; Token_Name: PChar): Boolean;  //提权函数
var
  // Token: Cardinal;
  TokenHandle: NativeUint;
  TokenPri: _TOKEN_PRIVILEGES;
  ProcessDest: int64;
  l: DWORD;
begin
  Result := False;
  // if OpenProcessToken(ProcessHandle, TOKEN_Adjust_Privileges, Token) then
  if OpenProcessToken(ProcessHandle, TOKEN_Adjust_Privileges, TokenHandle) then
  begin
    if LookupPrivilegeValue(nil, Token_Name, ProcessDest) then
    begin
      TokenPri.PrivilegeCount := 1;
      TokenPri.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      TokenPri.Privileges[0].Luid := ProcessDest;
      l := 0;
      // 更新进程令牌,成功返回TRUE
      if AdjustTokenPrivileges(TokenHandle, False, TokenPri, SizeOf(TokenPri), nil, l) then
        Result := True;
    end;
  end;
end;
 
function GetCCID: Boolean;
var
  sProc: PROCESSENTRY32;
  hSnap: DWORD;
  ok, fd: BOOL;
  FdTxt: string;
  FindNum: Integer;
begin
  sProc.dwSize := SizeOf(sProc);
  hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  Result := False;
  ok := Process32First(hSnap, sProc);
  FindNum := 0;
  while ok do
  begin
    FdTxt := uppercase(sProc.szExeFile); //获取执行文件的名称
    if FdTxt = 'ZY_MODBUS_SLAVE_SIM.EXE' then
    begin
      CCID := sProc.th32ProcessID;   //获取执行文件的hid值
      Result := True;
      Inc(FindNum);
      timeKillEvent(MMTimerID); //发现要破解的进程后,关闭定时执行
    end;
    ok := Process32Next(hSnap, sProc);  //寻找下一个进程文件
    if FindNum >= 1 then
      Break;
  end;
  CloseHandle(hSnap);
end;

Procedure inject_LicenseService;
var
  h, hModel: THandle;
  tt2: NativeUint;
  CrGold: byte;  //要替换的字符
  GoldA: Integer; //要破解的内存补丁地址
  pPMC: PPROCESS_MEMORY_COUNTERS;
  pPMCSize, ProcessPriority: Cardinal;
  n: DWORD;
 
begin
  if GetCCID then
  begin
    h := OpenProcess(PROCESS_ALL_ACCESS, False, CCID);
    if h = 0 then
    begin
      // GetLastError;
      //不能打开线程OpenProcess
      exit;
    end;
    // 从开始执行移动到每秒执行
    pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);
    GetMem(pPMC, pPMCSize);
    pPMC.cb := pPMCSize;
    if GetProcessMemoryInfo(h, pPMC, pPMCSize) then
    begin
      // 根据进程句柄找到模块句柄
      ENumProcessModules(h, @hModel, SizeOf(hModel), n);
      GoldA:= 4270327; // 内存地址 004128f7 转换成10进制  //要破解的内存补丁地址
      CrGold := 235; // 004128f7 的字符替换成'EB'
      WriteProcessMemory(h, ptr(GoldA), @CrGold, 1, tt2); //写入内存
      CloseHandle(h);
      exit;
    end;
  end;
end;

procedure TimerProc(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
begin
  // 业务代码
  inject_LicenseService; // 定时执行
end;
// 主程序开始.............................
exports
  BeginBufferedAnimation,
  BeginBufferedPaint,
  BeginPanningFeedback,
  BufferedPaintClear,
  BufferedPaintInit,
  BufferedPaintRenderAnimation,
  BufferedPaintSetAlpha,
  BufferedPaintStopAllAnimations,
  BufferedPaintUnInit,
  CloseThemeData,
  DllCanUnloadNow,
  DllGetActivationFactory,
  DllGetClassObject,
  DrawThemeBackground,
  DrawThemeBackgroundEx,
  DrawThemeEdge,
  DrawThemeIcon,
  DrawThemeParentBackground,
  DrawThemeParentBackgroundEx,
  DrawThemeText,
  DrawThemeTextEx,
  EnableThemeDialogTexture,
  EnableTheming,
  EndBufferedAnimation,
  EndBufferedPaint,
  EndPanningFeedback,
  GetBufferedPaintBits,
  GetBufferedPaintDC,
  GetBufferedPaintTargetDC,
  GetBufferedPaintTargetRect,
  GetColorFromPreference,
  GetCurrentThemeName,
  GetImmersiveColorFromColorSetEx,
  GetImmersiveUserColorSetPreference,
  GetThemeAnimationProperty,
  GetThemeAnimationTransform,
  GetThemeAppProperties,
  GetThemeBackgroundContentRect,
  GetThemeBackgroundExtent,
  GetThemeBackgroundRegion,
  GetThemeBitmap,
  GetThemeBool,
  GetThemeColor,
  GetThemeDocumentationProperty,
  GetThemeEnumValue,
  GetThemeFilename,
  GetThemeFont,
  GetThemeInt,
  GetThemeIntList,
  GetThemeMargins,
  GetThemeMetric,
  GetThemePartSize,
  GetThemePosition,
  GetThemePropertyOrigin,
  GetThemeRect,
  GetThemeStream,
  GetThemeString,
  GetThemeSysBool,
  GetThemeSysColor,
  GetThemeSysColorBrush,
  GetThemeSysFont,
  GetThemeSysInt,
  GetThemeSysSize,
  GetThemeSysString,
  GetThemeTextExtent,
  GetThemeTextMetrics,
  GetThemeTimingFunction,
  GetThemeTransitionDuration,
  GetUserColorPreference,
  GetWindowTheme,
  HitTestThemeBackground,
  IsAppThemed,
  IsCompositionActive,
  IsThemeActive,
  IsThemeBackgroundPartiallyTransparent,
  IsThemeDialogTextureEnabled,
  IsThemePartDefined,
  OpenThemeData,
  OpenThemeDataEx,
  OpenThemeDataForDpi,
  SetThemeAppProperties,
  SetWindowTheme,
  SetWindowThemeAttribute,
  ThemeInitApiHook,
  UpdatePanningFeedback;
const
{$IF Defined(CPUX86)}
  xpath = 'system32';
{$ELSEIF Defined(CPUX64)}
  xpath = 'SysWOW64';
{$IFEND}
begin
  ModHandle := LoadLibrary('C:\WINDOWS\' + xpath + '\uxtheme.dll');
  if ModHandle > 0 then
  begin
    PoldBeginBufferedAnimation := GetProcAddress(ModHandle, 'BeginBufferedAnimation');
    PoldBeginBufferedPaint := GetProcAddress(ModHandle, 'BeginBufferedPaint');
    PoldBeginPanningFeedback := GetProcAddress(ModHandle, 'BeginPanningFeedback');
    PoldBufferedPaintClear := GetProcAddress(ModHandle, 'BufferedPaintClear');
    PoldBufferedPaintInit := GetProcAddress(ModHandle, 'BufferedPaintInit');
    PoldBufferedPaintRenderAnimation := GetProcAddress(ModHandle, 'BufferedPaintRenderAnimation');
    PoldBufferedPaintSetAlpha := GetProcAddress(ModHandle, 'BufferedPaintSetAlpha');
    PoldBufferedPaintStopAllAnimations := GetProcAddress(ModHandle, 'BufferedPaintStopAllAnimations');
    PoldBufferedPaintUnInit := GetProcAddress(ModHandle, 'BufferedPaintUnInit');
    PoldCloseThemeData := GetProcAddress(ModHandle, 'CloseThemeData');
    PoldDllCanUnloadNow := GetProcAddress(ModHandle, 'DllCanUnloadNow');
    PoldDllGetActivationFactory := GetProcAddress(ModHandle, 'DllGetActivationFactory');
    PoldDllGetClassObject := GetProcAddress(ModHandle, 'DllGetClassObject');
    PoldDrawThemeBackground := GetProcAddress(ModHandle, 'DrawThemeBackground');
    PoldDrawThemeBackgroundEx := GetProcAddress(ModHandle, 'DrawThemeBackgroundEx');
    PoldDrawThemeEdge := GetProcAddress(ModHandle, 'DrawThemeEdge');
    PoldDrawThemeIcon := GetProcAddress(ModHandle, 'DrawThemeIcon');
    PoldDrawThemeParentBackground := GetProcAddress(ModHandle, 'DrawThemeParentBackground');
    PoldDrawThemeParentBackgroundEx := GetProcAddress(ModHandle, 'DrawThemeParentBackgroundEx');
    PoldDrawThemeText := GetProcAddress(ModHandle, 'DrawThemeText');
    PoldDrawThemeTextEx := GetProcAddress(ModHandle, 'DrawThemeTextEx');
    PoldEnableThemeDialogTexture := GetProcAddress(ModHandle, 'EnableThemeDialogTexture');
    PoldEnableTheming := GetProcAddress(ModHandle, 'EnableTheming');
    PoldEndBufferedAnimation := GetProcAddress(ModHandle, 'EndBufferedAnimation');
    PoldEndBufferedPaint := GetProcAddress(ModHandle, 'EndBufferedPaint');
    PoldEndPanningFeedback := GetProcAddress(ModHandle, 'EndPanningFeedback');
    PoldGetBufferedPaintBits := GetProcAddress(ModHandle, 'GetBufferedPaintBits');
    PoldGetBufferedPaintDC := GetProcAddress(ModHandle, 'GetBufferedPaintDC');
    PoldGetBufferedPaintTargetDC := GetProcAddress(ModHandle, 'GetBufferedPaintTargetDC');
    PoldGetBufferedPaintTargetRect := GetProcAddress(ModHandle, 'GetBufferedPaintTargetRect');
    PoldGetColorFromPreference := GetProcAddress(ModHandle, 'GetColorFromPreference');
    PoldGetCurrentThemeName := GetProcAddress(ModHandle, 'GetCurrentThemeName');
    PoldGetImmersiveColorFromColorSetEx := GetProcAddress(ModHandle, 'GetImmersiveColorFromColorSetEx');
    PoldGetImmersiveUserColorSetPreference := GetProcAddress(ModHandle, 'GetImmersiveUserColorSetPreference');
    PoldGetThemeAnimationProperty := GetProcAddress(ModHandle, 'GetThemeAnimationProperty');
    PoldGetThemeAnimationTransform := GetProcAddress(ModHandle, 'GetThemeAnimationTransform');
    PoldGetThemeAppProperties := GetProcAddress(ModHandle, 'GetThemeAppProperties');
    PoldGetThemeBackgroundContentRect := GetProcAddress(ModHandle, 'GetThemeBackgroundContentRect');
    PoldGetThemeBackgroundExtent := GetProcAddress(ModHandle, 'GetThemeBackgroundExtent');
    PoldGetThemeBackgroundRegion := GetProcAddress(ModHandle, 'GetThemeBackgroundRegion');
    PoldGetThemeBitmap := GetProcAddress(ModHandle, 'GetThemeBitmap');
    PoldGetThemeBool := GetProcAddress(ModHandle, 'GetThemeBool');
    PoldGetThemeColor := GetProcAddress(ModHandle, 'GetThemeColor');
    PoldGetThemeDocumentationProperty := GetProcAddress(ModHandle, 'GetThemeDocumentationProperty');
    PoldGetThemeEnumValue := GetProcAddress(ModHandle, 'GetThemeEnumValue');
    PoldGetThemeFilename := GetProcAddress(ModHandle, 'GetThemeFilename');
    PoldGetThemeFont := GetProcAddress(ModHandle, 'GetThemeFont');
    PoldGetThemeInt := GetProcAddress(ModHandle, 'GetThemeInt');
    PoldGetThemeIntList := GetProcAddress(ModHandle, 'GetThemeIntList');
    PoldGetThemeMargins := GetProcAddress(ModHandle, 'GetThemeMargins');
    PoldGetThemeMetric := GetProcAddress(ModHandle, 'GetThemeMetric');
    PoldGetThemePartSize := GetProcAddress(ModHandle, 'GetThemePartSize');
    PoldGetThemePosition := GetProcAddress(ModHandle, 'GetThemePosition');
    PoldGetThemePropertyOrigin := GetProcAddress(ModHandle, 'GetThemePropertyOrigin');
    PoldGetThemeRect := GetProcAddress(ModHandle, 'GetThemeRect');
    PoldGetThemeStream := GetProcAddress(ModHandle, 'GetThemeStream');
    PoldGetThemeString := GetProcAddress(ModHandle, 'GetThemeString');
    PoldGetThemeSysBool := GetProcAddress(ModHandle, 'GetThemeSysBool');
    PoldGetThemeSysColor := GetProcAddress(ModHandle, 'GetThemeSysColor');
    PoldGetThemeSysColorBrush := GetProcAddress(ModHandle, 'GetThemeSysColorBrush');
    PoldGetThemeSysFont := GetProcAddress(ModHandle, 'GetThemeSysFont');
    PoldGetThemeSysInt := GetProcAddress(ModHandle, 'GetThemeSysInt');
    PoldGetThemeSysSize := GetProcAddress(ModHandle, 'GetThemeSysSize');
    PoldGetThemeSysString := GetProcAddress(ModHandle, 'GetThemeSysString');
    PoldGetThemeTextExtent := GetProcAddress(ModHandle, 'GetThemeTextExtent');
    PoldGetThemeTextMetrics := GetProcAddress(ModHandle, 'GetThemeTextMetrics');
    PoldGetThemeTimingFunction := GetProcAddress(ModHandle, 'GetThemeTimingFunction');
    PoldGetThemeTransitionDuration := GetProcAddress(ModHandle, 'GetThemeTransitionDuration');
    PoldGetUserColorPreference := GetProcAddress(ModHandle, 'GetUserColorPreference');
    PoldGetWindowTheme := GetProcAddress(ModHandle, 'GetWindowTheme');
    PoldHitTestThemeBackground := GetProcAddress(ModHandle, 'HitTestThemeBackground');
    PoldIsAppThemed := GetProcAddress(ModHandle, 'IsAppThemed');
    PoldIsCompositionActive := GetProcAddress(ModHandle, 'IsCompositionActive');
    PoldIsThemeActive := GetProcAddress(ModHandle, 'IsThemeActive');
    PoldIsThemeBackgroundPartiallyTransparent := GetProcAddress(ModHandle, 'IsThemeBackgroundPartiallyTransparent');
    PoldIsThemeDialogTextureEnabled := GetProcAddress(ModHandle, 'IsThemeDialogTextureEnabled');
    PoldIsThemePartDefined := GetProcAddress(ModHandle, 'IsThemePartDefined');
    PoldOpenThemeData := GetProcAddress(ModHandle, 'OpenThemeData');
    PoldOpenThemeDataEx := GetProcAddress(ModHandle, 'OpenThemeDataEx');
    PoldOpenThemeDataForDpi := GetProcAddress(ModHandle, 'OpenThemeDataForDpi');
    PoldSetThemeAppProperties := GetProcAddress(ModHandle, 'SetThemeAppProperties');
    PoldSetWindowTheme := GetProcAddress(ModHandle, 'SetWindowTheme');
    PoldSetWindowThemeAttribute := GetProcAddress(ModHandle, 'SetWindowThemeAttribute');
    PoldThemeInitApiHook := GetProcAddress(ModHandle, 'ThemeInitApiHook');
    PoldUpdatePanningFeedback := GetProcAddress(ModHandle, 'UpdatePanningFeedback');
  end;
  begin
    // 添加自己的补丁内容!
    AdjustProcessPrivilege(GetCurrentProcess, 'SeDebugPrivilege'); // 提升权限
    MMTimerID := timeSetEvent(500, 0, @TimerProc, 0, TIME_PERIODIC); // 启动定时器,定时执行TimerProc函数
  end;
end.

posted on 2023-07-14 20:02  blockke  阅读(310)  评论(0)    收藏  举报