试了很多次都不成功最后的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;