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

📄 unit1.pas

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

  i:=recordnr;

  begin
    begin
      VirtualProtectEx(processhandle,  pointer(memrec[i].Address),1,PAGE_EXECUTE_READWRITE,original);

      if memrec[i].VarType=0 then //byte
      begin
        writeprocessmemory(processhandle,pointer(memrec[i].Address),addr(newvalue1),1,write);
        memrec[i].FrozenValue:=newvalue1;
      end;

      if memrec[i].VarType=1 then //word
      begin
        writeprocessmemory(processhandle,pointer(memrec[i].Address),addr(newvalue2),2,write);
        memrec[i].FrozenValue:=newvalue2;
      end;

      if memrec[i].VarType=2 then //dword
      begin
        writeprocessmemory(processhandle,pointer(memrec[i].Address),addr(newvalue3),4,write);
        memrec[i].FrozenValue:=newvalue3;
      end;

      if memrec[i].VarType=3 then //single
      begin
        writeprocessmemory(processhandle,pointer(memrec[i].Address),addr(newvalue4),4,write);
        memrec[i].FrozenFValue:=newvalue4
      end;

      if memrec[i].VarType=4 then //double
      begin
        writeprocessmemory(processhandle,pointer(memrec[i].Address),addr(newvalue5),8,write);
        memrec[i].FrozenFValue:=newvalue5
      end;

      if memrec[i].VarType=5 then //binary
      begin
        if settings.BinariesAsDecimal then
          newvaluest:=inttobin(abs(newvalue6));

        bl:=1+((length(newvaluest)-1) div 8);

        setlength(newbytes,bl);
        ReadProcessMemory(processhandle,pointer(memrec[i].Address),@newbytes[0],bl,write);

        if settings.BinariesAsDecimal then
          newvaluest:=inttobin(abs(newvalue6));


        j:=0;
        k:=memrec[i].bit;
        for l:=length(newvaluest) downto 1 do
        begin
          case newvaluest[l] of
           '0' : setbit(k,newbytes[j],0);
           '1' : setbit(k,newbytes[j],1);
           '*','?': ;
           else raise exception.Create(newvaluest+' is not a valid binary notation!');
          end;
          inc(k);
          if k>=8 then
          begin
            inc(j);
            k:=0;
          end;
        end;

        writeprocessmemory(processhandle,pointer(memrec[i].Address),@newbytes[0],bl,write);
        memrec[i].frozenstring:=newvaluest;
        setlength(newbytes,0);
      end;

      if memrec[i].VarType=6 then //Int64
      begin
        writeprocessmemory(processhandle,pointer(memrec[i].Address),addr(newvalue6),8,write);
        memrec[i].FrozenValue:=newvalue6;
      end;

      //set old security back
      VirtualProtectEx(processhandle,  pointer(memrec[i].Address),1,original,write);
    end;
  end;

  updatelist(recordnr,recordnr);
end;

procedure TForm1.UpdateList(start: word;stop:word);
var i,j,k: Integer;
    read1: byte;
    read2: word;
    read3: dword;
    read4: single;
    read5: double;
    read6: Int64;
    read7: pchar;
    read8: array of byte;
    read9: pbyte;

    count: dword;
    rec: Integer;
    v,temp,temp2: string;

    nrofbytes: integer;

    counter: integer;
begin
  updatelistcs.Enter;
  try
    count:=0;
    counter:=0;

    for rec:=start to stop do
    begin
      if rec>(numberofrecords-1) then
      begin
        output[0]:=8;
        sendbuf(1);
        exit;
      end;

      if counter>1024 then
      begin
        sendbuf(counter);
        counter:=0;
      end;

      output[0]:=SC_ValueUpdated;
      pword(@output[1])^:=rec; //recnr

      if not memrec[rec].frozen then
      begin
        case memrec[rec].vartype of
        0: begin //byte
             readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read1),1,count);
             if count>0 then
             begin
               if settings.ShowAsSigned then
                 v:=IntToStr(ShortInt(read1))
               else
                 v:=IntToStr(read1);
             end else v:='??'
           end;

      1: begin //word
           readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read2),2,count);
           if count=0 then v:='??' else
           begin
             if settings.ShowAsSigned then
               v:=IntToStr(SmallInt(read2))
             else
               v:=IntToStr(read2);
           end;
         end;

      2: begin //dword
           readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read3),4,count);
           if count=0 then v:='??' else
           begin
             if settings.ShowAsSigned then
               v:=IntToStr(Longint(read3))
             else
               v:=IntToStr(read3);
           end;
         end;

      3: begin //float
           readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read4),4,count);
           if count=0 then
             v:='??'
           else
             v:=FloatToStr(read4);
         end;

      4: begin  //double
           readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read5),8,count);
           if count=0 then
             v:='??'
           else
             v:=FloatToStr(read5);
         end;

      5: begin //binary
           //read the bytes
           nrofbytes:=1+((memrec[rec].Bit+memrec[rec].bitlength) div 8);
           setlength(read8,nrofbytes);

           readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read8[0]),nrofbytes,count);
           if count=0 then v:='??' else
           begin
             //convert what i need to a string of bits
             temp:='';
             j:=memrec[rec].Bit;
             read9:=@read8[0];
             for k:=1 to memrec[rec].bitlength do
             begin
               temp:=temp+IntToStr(getbit(j,read9^));
               inc(j);
               if j>=8 then
               begin
                 j:=0;
                 inc(read9);
               end;
             end;

             temp2:='';
             for k:=length(temp) downto 1 do
               temp2:=temp2+temp[k];

             if settings.BinariesAsDecimal then
             begin
               try
                 v:=IntToStr(bintoint(temp2));
               except
                 v:='Too long';
               end;
             end else v:=temp2;

             //and convert them to a decimal value
           end;
         end;

      6: begin //Int64
           readprocessmemory(processhandle,pointer(memrec[rec].address),addr(read6),8,count);
           if count=0 then v:='??' else
           begin
             v:=IntToStr(read6);
           end;
         end;

      7: begin  //text
           getmem(read7,memrec[rec].Bit+1);
           readprocessmemory(processhandle,pointer(memrec[rec].Address),read7,memrec[rec].Bit,count);
           if count<memrec[rec].Bit then v:='??' else
           begin
             read7[memrec[rec].Bit]:=chr(0);
             v:=read7;
           end;
           freemem(read7);
         end;

      8: begin //array of byte
           setlength(read8,memrec[rec].Bit);
           readprocessmemory(processhandle,pointer(memrec[rec].Address),read8,memrec[rec].Bit,count);

           if count<memrec[rec].Bit then v:='??' else
           begin
             temp:='';
             for j:=0 to memrec[rec].Bit-1 do
               temp:=temp+IntToHex(read8[j],2)+' ';

             v:=temp;
           end;

           setlength(read8,0);
         end;

      end;
    end
    else
    begin
      if settings.ShowAsSigned then
      begin
        if memrec[rec].VarType=0 then v:=IntToStr(ShortInt(memrec[rec].frozenvalue)) else
        if memrec[rec].VarType=1 then v:=IntToStr(SmallInt(memrec[rec].frozenvalue)) else
        if memrec[rec].VarType=2 then v:=IntToStr(LongInt(memrec[rec].frozenvalue));
      end else
      begin
        if memrec[rec].VarType=0 then v:=IntToStr(byte(memrec[rec].frozenvalue)) else
        if memrec[rec].VarType=1 then v:=IntToStr(word(memrec[rec].frozenvalue)) else
        if memrec[rec].VarType=2 then v:=IntToStr(dword(memrec[rec].frozenvalue));
      end;

      if memrec[rec].VarType=3 then  //signle
      begin
        read4:=memrec[rec].FrozenFvalue;
        v:=FloatToStr(read4);
      end;

      if memrec[rec].VarType=4 then  //double
      begin
        read5:=memrec[rec].FrozenFvalue;
        v:=FloatToStr(read5);
      end;

      if memrec[rec].Vartype=5 then //binary
      begin
        //turn arround
        temp2:=memrec[rec].frozenstring;

        temp:='';
        for j:=length(temp2) downto 1 do
          temp:=temp+temp2[j];

        if settings.BinariesAsDecimal then
          v:=IntToStr(bintoint(temp))
        else
          v:=temp;
      end;

      if memrec[rec].VarType=6 then  //int64
      begin
        v:=IntToStr((memrec[rec].frozenvalue));
      end;

      if memrec[rec].VarType=7 then //text
      begin
        v:=memrec[rec].Frozenstring;
      end;

      if memrec[rec].VarType=8 then //array of byte
      begin
        temp:='';

        for j:=0 to length(memrec[i].frozenBytes)-1 do
          temp:=temp+IntToHex(memrec[i].frozenBytes[j],2)+' ';
        v:=temp;
      end;

    end;


    output[3]:=length(v);
    copymemory(@output[4],@v[1],output[3]);
    sendbuf(4+output[3]);

  end;


  output[0]:=SC_VALUELISTDONE;
  sendbuf(1);

  finally
    updatelistcs.Leave;
  end;
end;

procedure TForm1.UpdateList;
begin
  UpdateList(0,numberofrecords-1);


end;

procedure TForm1.FormCreate(Sender: TObject);
var pid: dword;
    ownprocesshandle: THandle;
    tokenhandle: thandle;
    tp:TTokenPrivileges;
    prev: TTokenPrivileges;

    ReturnLength: Dword;
begin
  //create the filemapping for hypermode scanning
  HyperscanFileMapping:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,sizeof(tscansettings),'CEHYPERSCANSETTINGS');
  if HyperscanFileMapping=0 then
  begin
    FreeLibrary(CEHOOKDLL);
    exit;
  end;

  HyperscanView:=MapViewOfFile(HyperscanFileMapping,FILE_MAP_ALL_ACCESS,0,0,0);
  if hyperscanview=nil then
  begin
    closehandle(HyperscanFileMapping);
    FreeLibrary(CEHOOKDLL);
  end;
  try
  zeromemory(hyperscanview,sizeof(tscansettings));

  hyperscanview.mainformHandle:=handle;
  hyperscanview.applicantionhandle:=application.Handle;
  hyperscanview.CheatEngineDir:=CheatEngineDir;
  hyperscanview.CEProcessID:=GetCurrentProcessId;
  hyperscanview.CEMainThreadID:=getcurrentthreadid;
  except

  end;
  

  pid:=GetCurrentProcessID;

  ownprocesshandle:=OpenProcess(PROCESS_ALL_ACCESS,true,pid);
  tokenhandle:=0;

  if ownprocesshandle<>0 then
  begin
    if OpenProcessToken(ownprocesshandle,TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES	,tokenhandle) then
    begin
      if lookupPrivilegeValue(nil, 'SeDebugPrivilege' ,tp.Privileges[0].Luid) then
      begin
        tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        tp.PrivilegeCount := 1; // One privilege to set
        AdjustTokenPrivileges(tokenhandle,false,tp,sizeof(tp),@prev,returnlength);
      end;
    end;
  end;

  Set8087CW($133f);  //bye,bye fp exceptions
  cefuncproc.buffersize:=512*1024;
  progressbar1:=TProgressbar.Create(nil);
  progressbar1.Visible:=true;
  progressbar1.Parent:=form1;
  progressbar1.Left:=500;
  progressbar1.SendToBack;

  senddata:=true;
  logon:=false;
  lag:=500;
  GetCEdir;

  Scan_MEM_PRIVATE:=true;
  Scan_MEM_IMAGE:=true;
  Scan_MEM_MAPPED:=false;

  UpdatelistCS:=TCriticalSection.Create;
end;

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  senddata:=true;
  ErrorCode:=0;
  setlength(memrec,0);
  numberofrecords:=0;
  online:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if button1.caption='Start Server' then
  begin
  try
    closeD:=false;
    idtcpserver1.DefaultPort:=StrToInt(PortValue.Text);
    idtcpserver1.Active:=true;



    online:=true;
    statusBar1.Panels[0].Text:='Online';

    log.Lines.Add('Server started on port:'+PortValue.text);
    Button1.caption:='Stop Server';
  except
    on EConvertError do
      showmessage(PortValue.text+' is not an valid value');
  end;
  end else
  begin
    idtcpserver1.Active:=false;
    closeD:=true;

    online:=false;
    log.Lines.Add('Server Stopped');
    Button1.caption:='Start Server';
    statusBar1.Panels[0].Text:='Offline';
  end;
end;

procedure TForm1.ReceiveBuf(var Buf; Count: Integer;socket:TCustomWinSocket);
//this function keeps on going till the ammount of bytes requiested is read
var bp: ^byte;
    left: integer;
    read: integer;
    timeout: integer;
begin

⌨️ 快捷键说明

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