00577767 8B11 mov edx, dword ptr [ecx]
00577769 53 push ebx
0057776A FF52 0C call dword ptr [edx+C]
0057776D 8B46 10 mov eax, dword ptr [esi+10] //esi+10是数据包结束地址
00577770 8B4E 0C mov ecx, dword ptr [esi+C] //esi+C是数据包开始地址
00577773 8B56 30 mov edx, dword ptr [esi+30]
00577776 2BC1 sub eax, ecx
00577778 8D7E 28 lea edi, dword ptr [esi+28]
0057777B 50 push eax
0057777C 51 push ecx
0057777D 52 push edx
0057777E 8BCF mov ecx, edi
00577780 E8 EBE5EBFF call 00435D70
0057776D 8B46 10 mov eax, dword ptr [esi+10] //esi+10是数据包结束地址
00577770 8B4E 0C mov ecx, dword ptr [esi+C] //esi+C是数据包开始地址
我想从0057776D开始,把这里的数据包读出来,保存到一个文件里,而且让程序可以继续执行下去,当前已经有个DLL在目标程序内,有请高手上场……
500分不够了还可以再加
解决方案 »
- 调用浏览器的问题
- 请帮查看SQLsever多表查询代码??
- WebServices 中如何用ADOConnection动态连接SQL服务器? 代码是BCB写的,应该是差不多的。
- 100分, [信息系统] 帮助文件的例子.
- 救命啊,如何打开一个DOS窗口并执行指定的带参数的批处理文件?
- Adoquery与Adocommand有什么区别呀!!up者有分
- 如何用CREATE TABLE 创建一个DBASE表??
- Table改为ADOtable时遇上的问题!!
- 请帮忙想一下?——————————————————
- Delphi6怎么样?
- 运行中动态更改组件caption的问题。。。
- Indy的IdTelnet实现TELNET的问题
procedure OutData(s:string;len:integer); //输出到txt文件
var
F:TEXTFILE;
OutStr:array[0..40] of Char;
begin
CopyMemory(@OutStr,@s,len);
AssignFile(F, 'C:\a.txt');
Append(F);
Writeln(F,':'+OutStr);
Closefile(F);
end;procedure MyData(); //截取,再让程序继续进行
begin
asm
pushad
mov eax, dword ptr [esi + $10]
mov ecx, dword ptr [esi + $C]
sub ecx,eax
push ecx
push eax
call OutData
popad
mov eax, dword ptr [esi+$10]
mov ecx, dword ptr [esi+$C]
mov edx, dword ptr [$0057776D]
add edx, 6
jmp edx
popad
end;
end;--------------------------------------------
x:function():integer; test:=$E9; //Jmp
WriteProcessMemory (hProcess, Pointer($0057776D), @test, 1, tt);
x:=addr(MyData); //取函数地址?
test:=x-$0057776D-$5;
WriteProcessMemory (hProcess, Pointer($0057776E), @test, 4, tt);
OutData(); //输出到txt文件
procedure MyData(); //截取,再让程序继续进行只把这两个处理函数写出来也行啊……绝对给分
Function OutData(s:Pointer;len:integer): Integer; stdcall;
var
F:TEXTFILE;
ns:string;
begin
CopyMemory(@ns,@s,len);
AssignFile(F, 'C:\a.txt');
Append(F);
Writeln(F,':'+ns);
Closefile(F);
end;function MyData(): Integer; stdcall;
begin asm
pushad
push eax // 这里push eax是为了用EAX放包长度
push ecx // 这里push edx是为了用EDX放包指针
mov eax, dword ptr [esi + $10]
mov ecx, dword ptr [esi + $C]
sub eax,ecx
pushad // 这里pushad是为了下面调用输出信息时防止破坏原寄存器数据
push eax
push ecx
call OutData
popad // 恢复寄存器
pop ecx // 恢复寄存器
pop eax // 恢复寄存器
mov eax, dword ptr [esi+$10]
mov ecx, dword ptr [esi+$C]
mov edx, dword ptr [$0057776D]
add edx, 6
jmp edx
popad
end;
end;
-----------------------------------------
address2:^DWORD;address2:=@MyData;
test:=$E9;
WriteProcessMemory (hProcess, Pointer($0057776D), @test, 1, tt);
test:=address2^-$0057776D-$5;
WriteProcessMemory (hProcess, Pointer($0057776E), @test, 4, tt);
push ecx // 包指针
call OutData