Delphi 封包修改

下面的函数我想把 Bao代替Buf 作为OldRecv的参数返回要怎样做呢?

试了很多次都不成功最后的98分了帮帮我吧

Delphi(Pascal) code
function MyRecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
dwSize: cardinal;
Bao: array[0..267] of Byte;
str:string;
begin
//调用直正的Recv函数
str:='485454502F312E3120323030204F4B0D0A5365727665723A204170616368652D436F796F74652F312E310D0A436F'; str:=str+'6E74656E742D547970653A20746578742F68746D6C3B636861727365743D49534F2D383835392D310D0A436F6E74';
str:=str+'656E742D4C656E6774683A203132300D0A446174653A205468752C203230204E6F7620323030382032303A30323A';
str:=str+'323820474D540D0A0D0A386264663362336632613030303030303330303030303030343335303433343135653061';
str:=str+'34303532356535313435353235633434353530303534353435373533343735303437303535323434356335323034';
str:=str+'3533303235623564353034373562356431373537343230383134313634303533353734613032';
HexToBin(PChar(Str),PChar(@Bao[0]),Length(Bao));
WriteProcessMemory(ProcessHandle, AddRecv, @OldProc[1], 8, dwSize);
Result := OldRecv(S, Buf,len,flags); //这里想用Bao代替Buf
JmpCode.Address := @MyRecv;
WriteProcessMemory(ProcessHandle, AddRecv, @JmpCode, 8, dwSize);
end;
答复:

 

 

{//修改Buf的方法

var
  str:string;
...............
Setlength(str,len);
MyRecv(Socket,Pointer(str)^,len,0);
...................

}
你只要 把Bao写到 Buf里
result:=Bao的长度就可以
下面 就是 我破了别人的 一个在线注册的


function myrecv(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; export;
var
dwProtect, temp: cardinal;
l: integer;
str: string;
i, j: integer;
begin
调用直正的Recv函数

result := OldrecvFunction(s, Buf, len, flags);

try
    //login
    if (willcrack) and (not haveLogin) then
      begin
        displaymsg('willcrack');
        //' <Successful xsi:type="xsd:boolean">false </Successful>'
        l := result;
        if l < 2048 then
          l := 2048;
        if l > 0 then
          begin
            SetLength(str, l);
            move(Buf, str[1], l);
            j := pos('Successful', str);
            displaymsg('pos(''Successful'', str)=' + IntToStr(j));
            if j > 0 then
              begin
                j := PosEx('false', str, j);
                displaymsg('PosEx(''false'', str, j)=' + IntToStr(j));
                if j > 0 then
                  begin
                    str := 'true </Successful> ';
                    for i := 1 to length(str) do
                      (pchar(@Buf))[j - 1 + i - 1] := str[i];
                    haveLogin := true;
                    displaymsg('Successful');
                  end;
              end;
            str := '';
          end;
      end;
except
end;
//..................

end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值