我有一个用XOR加密的在线TXT文件.我正在使用Indy HTTP来读取此文件.当我这样做:
Buff.Text:= HTTP.Get('http://www.blabla.com/xor.txt');
Run Code Online (Sandbox Code Playgroud)
Buff中的内容已损坏,我无法正确解密.怎么解决这个?下面我将粘贴我正在使用的函数来对Xxt文件进行XOR:
function TForm1.XorStr(Input: AnsiString; Seed: integer): AnsiString;
var
i : integer;
Output : AnsiString;
begin
Output := '';
for i := 1 to Length(Input) do
Output := Output + AnsiChar(Ord(Input[i]) XOR (Seed));
Result:= Output;
end;
Run Code Online (Sandbox Code Playgroud)
希望有人可以帮助我.感谢你们!
我正在使用CreateProcess API将RealVNC与我的exe集成...我只需要为创建的vnc客户端处理句柄,但到目前为止我还没有成功.代码非常简单:
procedure TForm1.VncAuth;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
title: string;
ProcHandle: THandle;
begin
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
CmdLine:= 'vnc.exe';
UniqueString(CmdLine);
CreateProcess(NIL ,PChar(CmdLine), NIL, NIL, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
, NIL, NIL, StartInfo, ProcInfo);
ProcHandle:= ProcInfo.hProcess;
GetWindowText(ProcHandle, PChar(title), 255);
ShowMessage(title);
end;
Run Code Online (Sandbox Code Playgroud)
标题var中没有返回任何内容... GetWindowText函数只是一个测试,看看我是否有正确的句柄,如果是,我应该看到vnc客户端标题是正确的?谢谢!
我有一个简单的DLL,我在记事本中注入仅用于测试目的.我的注射器代码是这样的:
uses
Windows;
var
BytesWritten: cardinal;
PID, Process, Thread, ThreadId, hKernel: dword;
pLoadLibrary, Paramaters: pointer;
DLL: AnsiString;
begin
DLL := 'C:\test.dll'; // Must be full path name.
PID := 3160;
Process := OpenProcess(PROCESS_ALL_ACCESS,
False,
PID);
Paramaters := VirtualAllocEx(Process,
nil,
Length(DLL),
MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
WriteProcessMemory(Process,
Paramaters,
PAnsiChar(DLL),
Length(DLL),
BytesWritten);
hKernel := GetModuleHandle('KERNEL32.DLL');
pLoadLibrary := GetProcAddress(hKernel,
'LoadLibraryA');
Thread := CreateRemoteThread(Process,
nil,
0,
pLoadLibrary,
Paramaters,
0,
ThreadId);
WaitForSingleObject(Thread, INFINITE);
VirtualFreeEx(Process,
Paramaters,
0,
MEM_RELEASE);
CloseHandle(Thread);
CloseHandle(Process);
end.
Run Code Online (Sandbox Code Playgroud)
我的DLL代码很简单:
uses
SysUtils,
Classes,
Windows;
{$R *.res}
procedure …Run Code Online (Sandbox Code Playgroud) 我有以下程序:
procedure MyMainThread.MapProc;
var
Handle: THandle;
PID: dword;
Struct: TProcessEntry32;
Processes: TStringList;
begin
Handle:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Struct.dwSize:=Sizeof(TProcessEntry32);
Process32First(Handle, Struct);
Processes:= TStringList.Create;
repeat
Processes.Add(Struct.szExeFile);
Processes.SaveToFile('C:\Log.txt');
PID:= Struct.th32ProcessID;
PIDHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
PROCESS_VM_READ, false, PID);
CloseHandle(PIDHandle);
until (not Process32Next(Handle,Struct));
Processes.Free;
end;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我将运行的进程保存在C:\ Log.txt中,这在.exe文件中很有用.现在我正在尝试在.DLL文件中实现它,概念是:DLL将被加载,它将有一个EntryPoint调用Thread.Create ...这个Thread将使用SetTimer来运行MapProc的过程每10秒钟在C:\ Log.txt中保存正在运行的进程.代码是:
library Project1;
uses
Windows,
SysUtils,
Classes,
Registry,
EncdDecd,
TLHelp32,
IdHTTP;
{$R *.res}
type
MyMainThread = Class(TThread)
var
DestDir, ContactHost: String;
Sent: TStringList;
PIDHandle: THandle; //need to be public because we use in MapProc / CatchYa
private …Run Code Online (Sandbox Code Playgroud) 我觉得这个问题有点愚蠢,但是我已经测试了我想到的所有东西,试着修复它,没有任何效果.我正在调用一个函数echo,如下面的代码所示:
echo showInfos($ uid,$ con);
好的,showInfos函数是这样的:
function showInfos($uid, $con)
{
$ret = '';
$query = "SELECT Name, ProcName, ByteType, InsertTime FROM tableInfos WHERE uid = '" . mysql_real_escape_string($uid, $con) . "'";
$res = mysql_query($query, $con);
if($res)
{
while($row = mysql_fetch_array($res))
{
$ret .= '----New Track Data ::'."\r\n".'..ProcName:'.$row['ProcName']."\r\n";
}
}
return $ret;
}
Run Code Online (Sandbox Code Playgroud)
你可以看到我在回复中添加"\ r \n"...但由于某些未知原因,我的浏览器仍以这种方式显示所有内容:
----新的跟踪数据:: ..名称:notepad.exe ----新的跟踪数据:: ..名称:notepad.exe ----新的跟踪数据:: ..名称:notepad.exe
我认为应该是这样的:
----新的跟踪数据::
..ProcName:NOTEPAD.EXE
----新的跟踪数据::
..ProcName:NOTEPAD.EXE
这是怎么回事?谢谢关注!
我正在开发一个将由我的EXE加载的DLL文件...所以EXE将调用第一个DLL程序,当这个程序加载时我想保持它打开,即使EXE关闭.例如,我有一个带有计时器的DLL,显示一个'Hello World'消息.DLL代码:
uses
SysUtils,
Classes,
Dialogs,
ExtCtrls;
{$R *.res}
type
TMyTimer = Class(TTimer)
public
procedure OnMyTimer(Sender: TObject);
end;
procedure DllMessage; export;
var
MyTimer: TMyTimer;
begin
MyTimer := TMyTimer.Create(nil);
MyTimer.Interval := 10000;
MyTimer.OnTimer := MyTimer.OnMyTimer;
end;
procedure TMyTimer.OnMyTimer(Sender: TObject);
begin
ShowMessage('Hello World');
end;
exports DllMessage;
begin
end.
Run Code Online (Sandbox Code Playgroud)
EXE加载如下:
procedure DllMessage; external 'Message.dll'
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
DllMessage;
end;
Run Code Online (Sandbox Code Playgroud)
当我关闭EXE时,我希望DLL继续运行并每隔10秒显示一条消息......这可能吗?