⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orilpk.pas

📁 delphi编写LPK注入文件的源代码。。。。写补丁很实用
💻 PAS
字号:
unit oriLPK;

interface

uses
  Windows ;

const
  strLpkDllInitialize        ='LpkDllInitialize' ;
  strLpkDrawTextEx           ='LpkDrawTextEx'    ;
  strLpkEditControl          ='LpkEditControl'   ;
  strLpkExtTextOut           ='LpkExtTextOut'    ;
  strLpkGetCharacterPlacement='LpkGetCharacterPlacement'  ;
  strLpkGetTextExtentExPoint ='LpkGetTextExtentExPoint'   ;
  strLpkInitialize           ='LpkInitialize'    ;
  strLpkPSMTextOut           ='LpkPSMTextOut'    ;
  strLpkTabbedTextOut        ='LpkTabbedTextOut' ;
  strLpkUseGDIWidthCache     ='LpkUseGDIWidthCache' ;
  strftsWordBreak            ='ftsWordBreak'     ;
var
  strBLpkDllInitialize   ,
  strBLpkDrawTextEx      ,
  strBLpkEditControl     ,
  strBLpkExtTextOut      ,
  strBLpkGetCharacterPlacement,
  strBLpkGetTextExtentExPoint ,
  strBLpkInitialize       ,
  strBLpkPSMTextOut       ,
  strBLpkTabbedTextOut    ,
  strBLpkUseGDIWidthCache ,
  strBftsWordBreak        : Pointer ;


Procedure LpkInitialize       ;stdcall ;
Procedure LpkTabbedTextOut    ;stdcall ;
Procedure LpkDllInitialize    ;stdcall ;
Procedure LpkDrawTextEx       ;stdcall ;
Procedure LpkExtTextOut       ;stdcall ;
Procedure LpkGetCharacterPlacement ;stdcall ;
Procedure LpkGetTextExtentExPoint  ;stdcall ;
Procedure LpkPSMTextOut       ;stdcall ;
Procedure LpkUseGDIWidthCache ;stdcall ;
Procedure ftsWordBreak        ;stdcall ;
Procedure LpkEditControl      ;stdcall ;

Procedure LoadoriLPK ; stdcall ;

exports
  LpkInitialize ,
  LpkTabbedTextOut ,
  LpkDllInitialize ,
  LpkDrawTextEx ,
  LpkExtTextOut ,
  LpkGetCharacterPlacement ,
  LpkGetTextExtentExPoint ,
  LpkPSMTextOut ,
  LpkUseGDIWidthCache ,
  ftsWordBreak ,
  LpkEditControl ;

implementation

procedure ModMemData();
var
  pData: pointer;
  dwOldProtect:DWORD;
  mbi_thunk: TMemoryBasicInformation;

begin
  VirtualProtect(@LpkEditControl,$40,PAGE_READWRITE,@dwoldProtect);
  exit ;

  pData := @LpkEditControl ;
  //查询页信息。
  VirtualQuery(pData, mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
  //改变页保护属性为读写。
  VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize,PAGE_READWRITE, mbi_thunk.Protect);
end;

procedure LoadoriLPK ; stdcall ;
var
  sysdir :array[0..256] of char ;
  libpath :string ;
  LibID       : Dword ;
begin
  GetSystemDirectory(sysdir,256);
  LibPath:= sysdir+'\LPK.DLL';
  LibID := LoadLibrary(pchar(LibPath));
  if LibID <> 0 then
    begin
      ModMemData() ;
      strBLpkDllInitialize   := GetProcAddress(LibID,strLpkDllInitialize);
      strBLpkDrawTextEx      := GetProcAddress(LibID,strLpkDrawTextEx   );
      strBLpkExtTextOut      := GetProcAddress(LibID,strLpkExtTextOut   );
      strBLpkGetCharacterPlacement:=GetProcAddress(LibID,strLpkGetCharacterPlacement);
      strBLpkGetTextExtentExPoint :=GetProcAddress(LibID,strLpkGetTextExtentExPoint );
      strBLpkInitialize      := GetProcAddress(LibID, strLpkInitialize  );
      strBLpkPSMTextOut      := GetProcAddress(LibID, strLpkPSMTextOut  );
      strBLpkTabbedTextOut   := GetProcAddress(LibID, strLpkTabbedTextOut );
      strBLpkUseGDIWidthCache:= GetProcAddress(LibID,strLpkUseGDIWidthCache );
      strBftsWordBreak       := GetProcAddress(LibID ,strftsWordBreak   );
      strBLpkEditControl     := GetProcAddress(LibID ,strLpkEditControl );

      asm
        pushad
        mov esi , eax
        lea edi , LpkEditControl
        mov ecx , 40h
        rep movsb
        popad
      end;
    end
  else
    ExitProcess(0);
end;

Procedure LpkInitialize  ;stdcall ;
asm   jmp  strBLpkInitialize   end;

Procedure LpkTabbedTextOut ;stdcall ;
asm  jmp strBLpkTabbedTextOut end;

Procedure LpkDllInitialize ;stdcall ;
asm  jmp strBLpkDllInitialize end;

Procedure LpkDrawTextEx ; stdcall ;
asm  jmp strBLpkDrawTextEx    end;

Procedure LpkExtTextOut ; stdcall ;
asm  jmp strBLpkExtTextOut    end;

Procedure LpkGetCharacterPlacement ; stdcall ;
asm  jmp strBLpkGetCharacterPlacement  end;

Procedure LpkGetTextExtentExPoint;  stdcall ;
asm  jmp strBLpkGetTextExtentExPoint   end;

Procedure LpkPSMTextOut; stdcall ;
asm  jmp strBLpkPSMTextOut       end;

Procedure LpkUseGDIWidthCache ;  stdcall ;
asm  jmp strBLpkUseGDIWidthCache end;

Procedure ftsWordBreak ;   stdcall ;
asm  jmp strBftsWordBreak        end;

Procedure LpkEditControl; stdcall ;
asm
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  dd 0
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -