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

📄 ualltablehook.pas

📁 very useful codes by uall,very useful codes by uall,very useful codes by uall,very useful codes by u
💻 PAS
📖 第 1 页 / 共 2 页
字号:
OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OPnull  ,OP_eins ,OPnull  ,OPnull  );

var table0F: array[$00..$FF] of integer =
(
  // $0     $1      $2        $3      $4       $5      $6        $7       $8        $9      $a       $b       $c       $d       $e      $f
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OP_eins  ,OP_eins  ,OPnull   ,OP_eins  ,OPnull   ,OP_eins  ,OP_eins  ,OPnull   ,OP_eins  ,OPtable  ,OPnull   ,OPtable ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins  ,OP_eins ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier   ,OPvier  ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull    ,OPnull  ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull   ,OPnull  ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,
OP_eins  ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OPtable2 ,OP_eins);

function myInstructionLength(addr: pointer): integer; stdcall;
var anzahl: integer;
    fertig: boolean;
    b: ^byte;
    x: integer;
begin
  fertig := false;
  anzahl := 1;
  b := addr;
  x := firsttable[b^];
  repeat
    case x of
      -1..10:
      begin
        inc(anzahl,x);
        fertig := true;
      end;
      OPtable:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        x := firsttable[b^];
      end;
      OPtable2:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        x := secondtable[b^];
      end;
      OPtable7:
      begin
        inc(anzahl,2);
        b := pointer(integer(b)+1);
        x := secondtable[b^];
      end;
      OPtable6:
      begin
        inc(anzahl,5);
        b := pointer(integer(b)+1);
        x := secondtable[b^];
      end;
      OPtableFF:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        inc(anzahl,FFtable[b^]);
        fertig := true;
      end;
      OPtableF7:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        inc(anzahl,F7table[b^]);
        fertig := true;
      end;
      OPtableFE:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        inc(anzahl,FEtable[b^]);
        fertig := true;
      end;
      OPtableDD:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        inc(anzahl,DDtable[b^]);
        fertig := true;
      end;
      OPtable8:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        inc(anzahl,table8[b^]);
        fertig := true;
      end;
      OPtable3:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        inc(anzahl,thirdtable[b^]);
        fertig := true;
      end;
      OPtable0f:
      begin
        inc(anzahl);
        b := pointer(integer(b)+1);
        x := table0f[b^];
      end else fertig := true
    end;
  until fertig;
  result := anzahl;
end;


function UnhookAPIJMP(nextfunction: pointer): boolean; stdcall;
type
  tjumpcode = packed
  record
    nix: byte;
    JMP: Byte;
    Distance: Integer;
  end;
var old: cardinal;
    anzahl, gesamt,origfkt: cardinal;
    jcode: ^tjumpcode;
begin
  result := false;
  gesamt := 0;
  repeat
    virtualprotect(nextfunction,12,PAGE_EXECUTE_READWRITE,old);
    anzahl := myInstructionLength(nextfunction);
    virtualprotect(nextfunction,anzahl,old,old);
    nextfunction := pointer(cardinal(nextfunction)+anzahl);
    inc(gesamt,anzahl);
  until gesamt >= sizeof(tjumpcode);
  jcode := nextfunction;
  if (jcode^.nix = $65) and
     (jcode^.JMP = $E9) then
  begin
    origfkt := cardinal(jcode^.Distance)+6+cardinal(nextfunction)-gesamt;
    jcode := pointer(origfkt);
    if (jcode^.nix = $65) and
       (jcode^.JMP = $E9) then
    begin
      nextfunction := pointer(cardinal(nextfunction)-gesamt);
      copymemory(pointer(origfkt),nextfunction,gesamt);
      freemem(nextfunction);
      result := true;
    end;
  end;
end;

function HookAPIJMP(oldfunction,yourfunction: pointer; var nextfunction: pointer): boolean; stdcall;
type
  tjumpcode = packed
  record
    nix: byte;
    JMP: Byte;
    Distance: Integer;
  end;
var anzahl, gesamt: integer;
    old: cardinal;
    jmpcode: tjumpcode;
begin
  result := false;
  jmpcode.nix := $65;
  jmpcode.jmp := $E9;
  gesamt := 0;
  repeat
    virtualprotect(oldfunction,12,PAGE_EXECUTE_READWRITE,old);
    anzahl := myInstructionLength(oldfunction);
    virtualprotect(oldfunction,anzahl,old,old);
    oldfunction := pointer(integer(oldfunction)+anzahl);
    inc(gesamt,anzahl);
  until gesamt >= sizeof(tjumpcode);
  oldfunction := pointer(integer(oldfunction)-gesamt);

  getmem(nextfunction,gesamt+sizeof(tjumpcode));
  if virtualprotect(oldfunction,gesamt,PAGE_EXECUTE_READWRITE,old) and
     virtualprotect(nextfunction,gesamt+sizeof(tjumpcode),PAGE_EXECUTE_READWRITE,old) then
  begin
    copymemory(nextfunction,oldfunction,gesamt);
    jmpcode.distance := (integer(oldfunction)+gesamt)-(integer(nextfunction)+gesamt)-6;
    copymemory(pointer(integer(nextfunction)+gesamt),@jmpcode,sizeof(tjumpcode));
    jmpcode.distance := (integer(yourfunction))-(integer(oldfunction))-6;
    copymemory(oldfunction,@jmpcode,sizeof(jmpcode));
    result := true;
    virtualprotect(oldfunction,gesamt,old,old);
    virtualprotect(oldfunction,gesamt+sizeof(tjumpcode),old,old);
  end;
end;


end.

⌨️ 快捷键说明

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