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

📄 valuechange.pas

📁 冒险岛吸怪源码UCE的制作材料 用于冒险岛游戏的外挂
💻 PAS
字号:
unit Valuechange;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls
  {$ifdef net}
  ,netapis,CEClient;
  {$else}
  ,newkernelhandler, CEFuncProc;
  {$endif}
                                       
type
  TValueChangeForm = class(TForm)
    VarType: TComboBox;
    Button1: TButton;
    Button2: TButton;
    ValueText: TEdit;
    cbunicode: TCheckBox;
    procedure Button2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure VarTypeChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    faddress: Dword;
    fvartype: byte;
    procedure Updatevalue;
    procedure setaddress(x: dword);
    procedure setvartype(x: byte);

    procedure setunicode(x:boolean);
    function getunicode:boolean;
  public
    { Public declarations }

    slength: integer;
    property Address: dword read faddress write setaddress;
    property vtype: byte read fvartype write setvartype;
    property unicode: boolean read getunicode write setunicode;
  end;

var
  ValueChangeForm: TValueChangeForm;

implementation

{$R *.DFM}

function TValueChangeForm.getunicode:boolean;
begin
  result:=cbunicode.checked;
end;


procedure TValueChangeForm.setunicode(x: boolean);
begin
  cbunicode.checked:=x;
end;

procedure TValueChangeForm.setaddress(x: dword);
begin
  faddress:=x;
  caption:='Change offset '+inttohex(x,8);  
  updatevalue;
end;

procedure TValuechangeForm.setvartype(x: byte);
begin
  fvartype:=x;

  case x of
    0: vartype.itemindex:=0;  //byte
    1: vartype.itemindex:=1;  //word
    2: vartype.itemindex:=2;  //dword
    6: vartype.itemindex:=3;  //int64
    4: vartype.itemindex:=4;  //float
    5: vartype.itemindex:=5;  //double
    7: vartype.itemindex:=6;  //text
  end;

  updatevalue;
end;

procedure TValueChangeForm.UpdateValue;
var value1: Byte;
    value2: word;
    value3: dword;
    value4: single;
    value5: double;
    value6: Int64;

    read: dword;

    s: pchar;
    ws: pwchar;

begin
  value4:=0;
  value5:=0;

  case vartype.itemindex of
      0 : begin //byte
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value1),1,read);            
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value1),1,read);
            {$endif}
            valuetext.text:=IntToStr(value1);

            cbunicode.visible:=true;
          end;

      1 : begin //word
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value2),2,read);
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value2),2,read);
            {$endif}

            valuetext.text:=IntToStr(value2);

            cbunicode.visible:=true;
          end;

      2 : begin  //dword
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value3),4,read);
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value3),4,read);
            {$endif}
            valuetext.text:=IntToStr(value3);

            cbunicode.visible:=true;
          end;

      3 : begin //int64
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value6),8,read);
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value6),8,read);
            {$endif}
            valuetext.text:=IntToStr(value6);

            cbunicode.visible:=true;
          end;

      4 : begin //float
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value4),4,read);
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value4),4,read);
            {$endif}
            valuetext.text:=FloatToStr(value4);

            cbunicode.visible:=true;
          end;

      5 : begin //double
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value5),8,read);
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value5),8,read);
            {$endif}
            valuetext.text:=floatToStr(value5);

            cbunicode.visible:=true;
          end;

      6 : begin //text
            if unicode then
            begin
              getmem(ws,slength*2+2);
              {$ifdef net}
              readprocessmemorynet(0,pointer(address),ws,slength*2,read);
              {$else}
              readprocessmemory(processhandle,pointer(address),ws,slength*2,read);
              {$endif}

              ws[slength]:=#0;
              ValueText.text:=ws;

              freemem(ws);

            end
            else
            begin
              getmem(s,slength+1);
              {$ifdef net}
              readprocessmemorynet(0,pointer(address),s,slength,read);
              {$else}
              readprocessmemory(processhandle,pointer(address),s,slength,read);
              {$endif}

              s[slength]:=#0;
              ValueText.text:=s;

              freemem(s);
            end;

            cbunicode.visible:=true;
          end;

      7 : begin
            {$ifdef net}
            readprocessmemorynet(0,pointer(address),addr(value1),1,read);
            {$else}
            readprocessmemory(processhandle,pointer(address),addr(value1),1,read);
            {$endif}
            ValueText.text:=inttohex(value1,2);

            cbunicode.visible:=false;
          end;
  end;
end;

procedure TValueChangeForm.Button2Click(Sender: TObject);
begin
  modalresult:=mrcancel;
end;

procedure TValueChangeForm.FormShow(Sender: TObject);
begin
  ValuechangeForm.caption:='Change Offset: '+IntToHex(address,8);
//  vartype.ItemIndex:=0;
  updatevalue;

  valuetext.SetFocus;
  valuetext.SelectAll;
end;

procedure TValueChangeForm.Button1Click(Sender: TObject);
var write: dword;
    newvalue1: byte;
    newvalue2: word;
    newvalue3: dword;
    newvalue4: single;
    newvalue5: double;
    newvalue6: int64;

    {$ifndef net}
    newvalue7: Tbytes;
    {$endif}
    newstring: array of byte;
    i: Integer;

    newvaluest:string;
begin
  val(valuetext.text,newvalue1,write);
  val(valuetext.text,newvalue2,write);
  val(valuetext.text,newvalue3,write);

  val(valuetext.text,newvalue4,write);
  val(valuetext.text,newvalue5,write);
  val(valuetext.text,newvalue6,write);

  newvaluest:=valuetext.text;


  case vartype.itemindex of
  {$ifdef net}
{byte}  0       : writeprocessmemorynet(0,pointer(address),addr(newvalue1),1,write);
{word}  1       : writeprocessmemorynet(0,pointer(address),addr(newvalue2),2,write);
{dword} 2       : writeprocessmemorynet(0,pointer(address),addr(newvalue3),4,write);
{int64} 3       : writeprocessmemorynet(0,pointer(address),addr(newvalue6),8,write);
{float} 4       : writeprocessmemorynet(0,pointer(address),addr(newvalue4),4,write);
{double}5       : writeprocessmemorynet(0,pointer(address),addr(newvalue5),8,write);
  {$else}
{byte}  0       : writeprocessmemory(processhandle,pointer(address),addr(newvalue1),1,write);
{word}  1       : writeprocessmemory(processhandle,pointer(address),addr(newvalue2),2,write);
{dword} 2       : writeprocessmemory(processhandle,pointer(address),addr(newvalue3),4,write);
{int64} 3       : writeprocessmemory(processhandle,pointer(address),addr(newvalue6),8,write);
{float} 4       : begin

                    if write<>0 then
                    begin

                      if newvaluest[write]=',' then newvaluest[write]:='.'
                      else
                      if newvaluest[write]='.' then newvaluest[write]:=',';

                      write:=0;
                      val(newvaluest,newvalue4,write);
                    end;

                    writeprocessmemory(processhandle,pointer(address),addr(newvalue4),4,write);
                  end;

{double}5       : begin
                    if write<>0 then
                    begin
                      if newvaluest[write]=',' then newvaluest[write]:='.'
                      else
                      if newvaluest[write]='.' then newvaluest[write]:=',';

                      write:=0;
                      val(newvaluest,newvalue5,write);
                    end;

                    writeprocessmemory(processhandle,pointer(address),addr(newvalue5),8,write);
                  end;
  {$endif}
{byte}  6       : begin
                    setlength(newstring,length(ValueText.text));
                    for i:=1 to length(ValueText.text) do
                      newstring[i-1]:=ord(ValueText.text[i]);

                    {$ifdef net}
                    writeprocessmemorynet(0,pointer(address),newstring,length(ValueText.text),write);
                    {$else}
                    writeprocessmemory(processhandle,pointer(address),newstring,length(ValueText.text),write);
                    {$endif}

                  end;

{$ifndef net}

{bytes} 7       : begin
//convert the string to bytes
                    ConvertStringToBytes(Valuetext.Text,true,newvalue7);
                    setlength(newstring,length(newvalue7));
                    for i:=0 to length(newvalue7)-1 do
                    begin
                      //if the bytesvalue is -1 then read that byte from the memory and leave it untouched
                      //if it is unreadable popup a message noptifying the user
                      if newvalue7[i]=-1 then
                      begin
                        write:=0;
                        readprocessmemory(processhandle,pointer(address+i),addr(newstring[i]),1,write);
                        if write<>1 then raise exception.Create('Part of the string is unreadable!');
                      end
                      else
                        newstring[i]:=newvalue7[i];

                      //newstring now contains all the bytes we need so write them to the memory

                    end;
                    writeprocessmemory(processhandle,pointer(address),newstring,length(newstring),write);
                  end;
{$endif}
  end;

  modalresult:=mrok;
end;

procedure TValueChangeForm.VarTypeChange(Sender: TObject);
begin
  updatevalue;
end;

procedure TValueChangeForm.FormCreate(Sender: TObject);
begin
  vartype.Items.Delete(vartype.Items.Count-1);
  vartype.itemindex:=0;
end;

procedure TValueChangeForm.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action:=caFree;
end;

end.

⌨️ 快捷键说明

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