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

📄 directx9hook.pas

📁 冒险岛吸怪源码UCE的制作材料 用于冒险岛游戏的外挂
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      aimsettings.free;
    end;
  except end;
end;

procedure LoadLockedTextureInfo9(aimconfigfile:string);
var aimsettings,aimsettings2: tfilestream;
    images: array of array of byte;
    i,j: integer;
    tempimage: array of byte;

    imageloaded:boolean;
    total: dword;
    tr: TD3DLocked_Rect;
    pdesc: td3dsurface_desc;
    bug:boolean;
begin
  try

    for i:=0 to length(lockedtexturelist)-1 do
    begin
      try
        lockedtexturelist[i].texturehandle._Release;
      except
        //outputdebugstring('failed to release');
      end;
      zeromemory(@lockedtexturelist[i],sizeof(TTextureInfo));
    end;

    for i:=0 to length(texturelist)-1 do
    begin
      try
        texturelist[i].locked:=false;
      except

      end;
    end;

    setlength(lockedtexturelist,0);
  except

  end;

  LoadPhase:=1;

  try
    try
      aimsettings:=tfilestream.Create(keys.cedir+aimconfigfile+'.cta',fmOpenRead);
      try

        aimsettings.ReadBuffer(total,4);
        setlength(lockedtexturelist,total);
        setlength(images,total);

        maxposition:=length(lockedtexturelist)-1;
        for i:=0 to length(lockedtexturelist)-1 do
        begin
          currentposition:=i;

          aimsettings.ReadBuffer(lockedtexturelist[i].width,sizeof(TTextureInfo));
          lockedtexturelist[i].locked:=false;
          try
            aimsettings.ReadBuffer(total,4);
            setlength(images[i],total);
            aimsettings.ReadBuffer(images[i][0],total);
          except
            exit; //failed to load.....
          end;
          sleep(1);
        end;
      finally
        aimsettings.free;
      end;

      //check the texturelist for these textures
      //outputdebugstring('Entering phase 2');


      loadphase:=2;
      maxposition:=length(texturelist);
      for i:=0 to length(texturelist)-1 do
      begin
        currentposition:=i;
        imageloaded:=false;

        //check the lockedtextures to see if this is a texture that has to be locked
        for j:=0 to length(lockedtexturelist)-1 do
        begin
          if texturelist[i].Width<>lockedtexturelist[j].width then continue;
          if texturelist[i].Height<>lockedtexturelist[j].Height then continue;
          if texturelist[i].Levels<>lockedtexturelist[j].Levels then continue;
          if texturelist[i].Usage<>lockedtexturelist[j].Usage then continue;
          if texturelist[i].Format<>lockedtexturelist[j].Format then continue;
          if texturelist[i].Pool<>lockedtexturelist[j].pool then continue;

          if not imageloaded then
          begin
            //copy the memory of the texture to a local var
            try
              if texturelist[i].texturehandle.LockRect(0,tr,nil,{0}D3DLOCK_NOSYSLOCK  )=0 then
              begin
                try
                  texturelist[i].texturehandle.GetLevelDesc(0,pdesc);
                  total:=(pdesc.Width*pdesc.Height);
                  total:=total div 4;
                  if total<length(images[j]) then continue;

                  setlength(tempimage,total);

                  bug:=true;
                  while bug do
                  begin
                    try
                      copymemory(@tempimage[0],tr.Bits,total);
                      imageloaded:=true;
                      bug:=false;
                    except
                      total:=total div 2;
                      setlength(tempimage,total);
                      if (total<length(images[j])) or (total=0) then bug:=false;
                    end;
                  end;
                finally
                  texturelist[i].texturehandle.UnlockRect(0);
                  sleep(5);
                end;
              end;
              except
                //doesn't exist
              end;

            end;

            if comparemem(@tempimage[0],@images[j][0],500) then
            begin
              //outputdebugstring('It''s the same');
              texturelist[i].locked:=true;
              texturelist[i].xdelta:=lockedtexturelist[j].xdelta;
              texturelist[i].ydelta:=lockedtexturelist[j].ydelta;
              texturelist[i].zdelta:=lockedtexturelist[j].zdelta;

              copymemory(@lockedtexturelist[j].texturehandle,@texturelist[i].texturehandle,4);
              lockedtexturelist[j].locked:=true;
              try
                lockedtexturelist[j].texturehandle._AddRef;
              except
                //outputdebugstring('failed to addref');
              end;
            end;
            sleep(1);
          end;
          sleep(1);
        end;
      except

      end;
    finally
      for i:=0 to length(images)-1 do setlength(images[i],0);
      setlength(images,0);
      setlength(tempimage,0);
    end;

end;


{
-------------------------------------------------------------------------
DirectX 9
-------------------------------------------------------------------------
}
procedure Removetexture(j: integer);
var i: integer;
begin
  if texturepointer>j then dec(texturepointer);

  for i:=j to length(texturelist)-2 do
  begin
    texturelist[i].Width:=texturelist[i+1].Width;
    texturelist[i].Height:=texturelist[i+1].Height;
    texturelist[i].Levels:=texturelist[i+1].Levels;
    texturelist[i].Usage:=texturelist[i+1].Usage;
    texturelist[i].Format:=texturelist[i+1].Format;
    texturelist[i].Pool:=texturelist[i+1].Pool;
    texturelist[i].locked:=texturelist[i+1].locked;
    texturelist[i].xdelta:=texturelist[i+1].xdelta;
    texturelist[i].ydelta:=texturelist[i+1].ydelta;
    texturelist[i].zdelta:=texturelist[i+1].zdelta;
    copymemory(@texturelist[i].texturehandle,@texturelist[i+1].texturehandle,4);
  end;

  fillmemory(@texturelist[length(texturelist)-1].texturehandle,4,0);

  try
    setlength(texturelist,length(texturelist)-1);
  except

  end;

  if length(texturelist)=0 then texturepointer:=-1;
  if (texturepointer)>(length(texturelist)-1) then texturepointeR:=length(texturelist)-1;
end;

function Direct3DCreate9Hook(SDKVersion: DWORD): PIDirect3D9; stdcall;
var x,y:dword;
begin
  asm
    push esi
    push edi
    lea esi,Direct3DCreate9Info.original[0]
    mov edi,Direct3DCreate9Info.location
    movsd
    movsb

    pop edi
    pop esi
  end;
  outputdebugstring('CEHOOK:Creating a direct3d9 object');
  result:=Direct3DCreate9(SDKVersion);

  x:=dword(result);

 //hook createdevice

  outputdebugstring('Hooking createdevice');


  if IDirect3D9_CreateDevice.location=nil then
    IDirect3D9_CreateDevice.location:=pointer(pdword(pdword(x)^+4*16)^);

  virtualprotect(pointer(pdword(x)^+4*16),4,PAGE_EXECUTE_READWRITE,y);
  pdword(pdword(x)^+4*16)^:=dword(@IDirect3D9_CreateDevice_Hook);
  virtualprotect(pointer(pdword(x)^+4*16),4,y,y);

  outputdebugstring('Hooking createdevice-success');
end;




//Hooked IDirect3D9 methods:

function Fixhook(const self:IDirect3DDevice9):boolean; stdcall;
var x:dword;
begin
  virtualprotect(pdword(pdword(dword(Self))^),4*77,PAGE_EXECUTE_READWRITE,x);

  //hook Reset
  if IDirect3DDevice9_Reset.location=nil then
    IDirect3DDevice9_Reset.location:=pointer(pdword(pdword(dword(Self))^+4*16)^);
  pdword(pdword(dword(Self))^+4*16)^:=dword(@IDirect3DDevice9_Reset_Hook);

  //hook createtexture
  if IDirect3DDevice9_CreateTexture.location=nil then
    IDirect3DDevice9_CreateTexture.location:=pointer(pdword(pdword(dword(Self))^+4*23)^);
  pdword(pdword(dword(Self))^+4*23)^:=dword(@IDirect3DDevice9_CreateTexture_Hook);

  //hook BeginScene
  if IDirect3DDevice9_BeginScene.location=nil then
    IDirect3DDevice9_BeginScene.location:=pointer(pdword(pdword(dword(Self))^+4*41)^);
  pdword(pdword(dword(Self))^+4*41)^:=dword(@IDirect3DDevice9_BeginScene_Hook);


  //hook EndScene
  if IDirect3DDevice9_EndScene.location=nil then
    IDirect3DDevice9_EndScene.location:=pointer(pdword(pdword(dword(Self))^+4*42)^);
  pdword(pdword(dword(Self))^+4*42)^:=dword(@IDirect3DDevice9_EndScene_Hook);

  //hook SetTransform
  if IDirect3DDevice9_SetTransform.location=nil then
    IDirect3DDevice9_SetTransform.location:=pointer(pdword(pdword(dword(Self))^+4*44)^);
  pdword(pdword(dword(Self))^+4*44)^:=dword(@IDirect3DDevice9_SetTransform_Hook);

  //hook GetTransform
  if IDirect3DDevice9_GetTransform.location=nil then
    IDirect3DDevice9_GetTransform.location:=pointer(pdword(pdword(dword(Self))^+4*45)^);
  pdword(pdword(dword(Self))^+4*45)^:=dword(@IDirect3DDevice9_GetTransform_Hook);

  //hook SetRenderState
  if IDirect3DDevice9_SetRenderState.location=nil then
    IDirect3DDevice9_SetRenderState.location:=pointer(pdword(pdword(dword(Self))^+4*57)^);
  pdword(pdword(dword(Self))^+4*57)^:=dword(@IDirect3DDevice9_SetRenderState_Hook);

  //hook SetTexture
  if IDirect3DDevice9_SetTexture.location=nil then
    IDirect3DDevice9_SetTexture.location:=pointer(pdword(pdword(dword(Self))^+4*65)^);
  pdword(pdword(dword(Self))^+4*65)^:=dword(@IDirect3DDevice9_SetTexture_Hook);

  //hook DrawPrimitive
  if IDirect3DDevice9_DrawPrimitive.location=nil then
    IDirect3DDevice9_DrawPrimitive.location:=pointer(pdword(pdword(dword(Self))^+4*81)^);
  pdword(pdword(dword(Self))^+4*81)^:=dword(@IDirect3DDevice9_DrawPrimitive_Hook);

  //hook DrawIndexedPrimitive
  if IDirect3DDevice9_DrawIndexedPrimitive.location=nil then
    IDirect3DDevice9_DrawIndexedPrimitive.location:=pointer(pdword(pdword(dword(Self))^+4*82)^);
  pdword(pdword(dword(Self))^+4*82)^:=dword(@IDirect3DDevice9_DrawIndexedPrimitive_Hook);

  //hook DrawPrimitiveUP
  if IDirect3DDevice9_DrawPrimitiveUP.location=nil then
    IDirect3DDevice9_DrawPrimitiveUP.location:=pointer(pdword(pdword(dword(Self))^+4*83)^);
  pdword(pdword(dword(Self))^+4*83)^:=dword(@IDirect3DDevice9_DrawPrimitiveUP_Hook);

  //hook DrawIndexedPrimitiveUP
  if IDirect3DDevice9_DrawIndexedPrimitiveUP.location=nil then
    IDirect3DDevice9_DrawIndexedPrimitiveUP.location:=pointer(pdword(pdword(dword(Self))^+4*84)^);
  pdword(pdword(dword(Self))^+4*84)^:=dword(@IDirect3DDevice9_DrawIndexedPrimitiveUP_Hook);
end;


function IDirect3D9_CreateDevice_Hook(const self: IDirect3D9; const Adapter : Cardinal; const DeviceType : TD3DDevType; FocusWindow : HWND; BehaviorFlags : LongWord; var PresentationParameters : TD3DPresentParameters; out ReturnedDeviceInterface : IDirect3DDevice9) : HResult; stdcall;
var x: dword;
    logfont: tlogfont;
    desc:TD3DXFontDescA;
begin
  directxversion:=directx9;
  setlength(xylist,0);


  Behaviorflags:=behaviorflags and not (D3DCREATE_PUREDEVICE);
  result:=TIDirect3D9_CreateDevice_Original(IDirect3D9_CreateDevice.location)(self,Adapter,DeviceType,FocusWindow,BehaviorFlags,PresentationParameters, ReturnedDeviceInterface);

  if result=0 then
  begin
    D3DXCreateTextureFromFile(ReturnedDeviceInterface,pchar(keys.CEDir+'lockedstring.bmp'),lockedStringTexture);
    D3DXCreateTextureFromFile(ReturnedDeviceInterface,pchar(keys.CEDir+'unlockedstring.bmp'),unlockedStringTexture);
    D3DXCreateTextureFromFile(ReturnedDeviceInterface,pchar(keys.CEDir+'texturestring.bmp'),textureStringTexture);
    D3DXCreateTextureFromFile(ReturnedDeviceInterface,pchar(keys.CEDir+'Black.bmp'),blackTexture);

    //D3DXCreateTextureFromFileEx(ReturnedDeviceInterface,pchar(keys.CEDir+'Logo3.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,myspritetexture);
    D3DXCreateTextureFromFileEx(ReturnedDeviceInterface,pchar(keys.CEDir+'TargetTexture.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,targettexture);
    D3DXCreateTextureFromFileEx(ReturnedDeviceInterface,pchar(keys.CEDir+'Locktexture.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,locktexture);
    D3DXCreateTextureFromFileEx(ReturnedDeviceInterface,pchar(keys.CEDir+'Movementtexture.bmp'),D3DX_DEFAULT,D3DX_DEFAULT,1,0,D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,$FFFFFFFF,nil,nil,movementtexture);

    D3DXCreateSprite(ReturnedDeviceInterface,mysprite);

    cefonthandle.free;
    cefonthandle:=tfont.Create;

⌨️ 快捷键说明

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