我有一个DLL被注入到非常老的,错误的,现在它的开发人员应用程序不支持.有时该应用程序崩溃,我需要一些方法来捕获所有未处理的异常(来自DLL)可能会发生以保存数据,然后才允许应用程序崩溃.我怎样才能做到这一点?
目前,有一个外部调试器用于此目的,但它太慢,并且还有错误,以保持这种方式.
我用c ++写了一个简单的程序:
#include <stdio.h>
const signed char pass[] = "\x70\x61\x73\x73\x77\x6F\x72\x64";
bool __stdcall check_password(const signed char * str)
{
unsigned int i;
for(i=0;i<8;++i)
if(str[i]!=pass[i])
return false;
return true;
}
int main(int argc, char * argv[])
{
signed char buf[20];
printf("please enter the password: ");
scanf("%s",buf);
printf((check_password(buf)) ? "correct!\n" : "incorrect.\nPress any key to exit..\n");
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并使用visual studio express 2010编译它.
我在OllyDbg中打开了结果,这就是我所看到的:
Address Hex dump Command Comments
00FF1011 ³. 8B35 A020FF00 MOV ESI,DWORD PTR DS:[<&MSVCR100.printf>]
00FF1017 ³. 68 0021FF00 PUSH …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 .dll 将 dll(在 中找到dll_path[]并且它是正确的路径)注入到目标进程中CreateRemoteThread()。不幸的是,完全没有发生任何事情(预期结果是MessageBox()从DLL_PROCESS_ATTACH弹出窗口中调用的)。与远程注射器一起使用时可以正常工作。
您可以将每个what()调用视为GetLastError()和assert(0)。保证变量PID将包含正确的进程ID(我测试了很多次)。此外,您在下面的代码中看到的函数调用都不会失败。有趣的是,它运行得很好,直到我将它从 C 重写为更像 C++ 的代码,如下所示。我编译了下面的代码和dll代码,没有任何警告。我想知道我哪里做错了。这是我的代码:
int main() {
const WCHAR dll_path[] = L"C:\\myDLL.dll";
const std::wstring process_name = L"target.exe";
const DWORD PID = get_PID(process_name);
if (!PID)
what();
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
if (!process)
what();
FARPROC lib = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
if (!lib)
what();
LPVOID base = (LPVOID)VirtualAllocEx(process, 0, wcslen(dll_path), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); …Run Code Online (Sandbox Code Playgroud) 我需要从Taskmanager的进程选项卡中隐藏我的C#应用程序
运用
this.ShowInTaskbar = false;
Run Code Online (Sandbox Code Playgroud)
我已将其隐藏在应用程序选项卡中.现在我需要将其隐藏在进程选项卡中.
这可能吗?.
我有几个DLL文件在我的硬盘上.我的服务器上的进程包含要通过在进程内分配虚拟内存来记录的重要文件数据.我没有该过程的源代码,所以我需要驻留更多的extreem措施.我希望它启动DLL主函数.外部的内存分配需要用C#编写,因为我想将它与WPF一起使用.
如何使用C#在另一个进程中执行自己的源代码?
我正在尝试使用CreateRemoteThread()函数来注入一个函数injectFunction()ans使其在远程进程内运行.
但是,似乎这段代码无法正常工作.一旦注入器程序运行CreateRemoteThread()函数,目标程序就会崩溃.什么出错了指针?
void injectedFunction()
{
MessageBoxA(NULL, "Injection OK", "Injection OK", NULL);
}
void injectionFunction()
{
HANDLE hTargetProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid);
CreateRemoteThread(hTargetProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)injectedFunction, NULL, NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud) 早上好.我正在尝试学习DLL注入,所以我写了一个小软件,它只获取一个String,与StrCmp()进行比较,如果输入等于"Winner",则该软件会给出一个好男孩消息,学习DLL注入的porpouse.所以我写了一个DLL,它在注入时加载一个Form,porpouse正在使用DLL注入,修改比较指令(JNZ(74)到JMP(EB)),然后制作软件,接受任何字符串.我的DLL代码是:
library Project2;
uses
SysUtils,
Windows,
Classes,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
var
Hproccess:THandle;
Hid:Cardinal;
b:Boolean=false;
Procedure Chamar;
begin
Form1:=TForm1.Create(nil);
Form1.ShowModal;
end;
begin
Hproccess:=OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID);
CreateRemoteThread(Hproccess,nil,0,@Chamar,@Chamar,0,Hid);
end.
Run Code Online (Sandbox Code Playgroud)
你怎么看,DLL只是创建一个新的线程来加载窗体(Form1).问题是,当我在Memory Addres中写入以覆盖JNZ指令时,Windows不允许我这样做,并在地址005B55A9返回访问冲突消息.我的表单代码也很简单.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
Memory:Dword;
begin
Memory:=$005B55A9;
PDWORD(Memory)^:=225; {EB=225}
Free();
end;
end.
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何在没有访问冲突错误的情况下将JNZ(74)的指令覆盖到JMP(EB)?对不起我的错误,我昨天开始阅读它,这是我的第一个例子.我已经有了Injector(极端注射器).我的疑问只是关于DLL编码.你能帮助我吗?
我忘了说,我使用的是Windows 10 ...
我试图找出一种方法(通过 loadlibrary 或最好手动)将 32 位图像(dll)从 64 位运行应用程序映射到 32 位进程。有任何想法吗?
目前,注入/映射一切看起来都在工作,但是在使用仅创建消息框的空 dll 进行测试时,它实际上并没有创建消息框。当来自 32 位应用程序时,注入工作正常。
这是我用 LoadLibrary 测试的方法
EnsureElevation( ); // ensures that we're run as admin and that we have debug privs
// messy code because it's test code
LPVOID LoadLib = ( LPVOID )GetProcAddress( GetModuleHandleA( "kernel32.dll" ), "LoadLibraryA" );
HANDLE Proc = OpenProcess( PROCESS_ALL_ACCESS, false, GetProcessID( L"target.exe" ) );
std::cout << Proc << '\n';
std::cout << "Proc Error: 0x" << std::hex << GetLastError( ) << '\n'; // 0x0
LPVOID …Run Code Online (Sandbox Code Playgroud)