0

dll を .exe に挿入しようとしています。この単純なメインをコーディングしていますが、ファイルが作成されません。cppコードで注入しますが、インジェクターが問題だとは思いません。

DWORD WINAPI Main_thread( LPVOID lpParam)
{
  std::ofstream myfile;
  myfile.open ("C:\\Users\\root\\Desktop\\example.txt");
  myfile << "success" << std::endl;
  myfile.close();
  return S_OK;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD  _reason, LPVOID lpReserved)
{
  if (_reason == DLL_PROCESS_ATTACH)
     CreateThread(0, 0x1000, &Main_thread, 0, 0, NULL);
  return true;
}

インジェクターコード:

#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>

using namespace std;
bool InjectDLL(DWORD ProcessID);

char dllPath[250] = "C:\\Users\\root\\Desktop\\testdll\\bin\\Debug\\testdll.dll";
char ProcessName[] = "chrome.exe";
typedef HINSTANCE (*fpLoadLibrary)(char*);

int main()
{
DWORD processId = NULL;
PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)};
HANDLE hProcSnap;
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(Process32First(hProcSnap, &pe32))
{
    do{
         if(!strcmp(pe32.szExeFile, ProcessName))
        {
            processId = pe32.th32ProcessID;
            break;
        }
    }while(Process32Next(hProcSnap, &pe32));
}
if (!InjectDLL(processId))
        cout << "DLL failed to inject" << endl;
}

bool InjectDLL(DWORD ProcessID)
{
HANDLE hProc;
LPVOID paramAddr;
HINSTANCE hDll = LoadLibrary("KERNEL32");
fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
hProc = OpenProcess (PROCESS_ALL_ACCESS, false, ProcessID);
paramAddr = VirtualAllocEx(hProc, 0, strlen(dllPath)+1, MEM_COMMIT, PAGE_READWRITE);
bool memoryWritten = WriteProcessMemory(hProc, paramAddr, dllPath, strlen(dllPath)+1, NULL);
CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);
CloseHandle(hProc);
return memoryWritten;
}

dll がインジェクトされていないか、書き込みができないようです。ルートとしてインジェクターを起動していません。

4

1 に答える 1

2

タスク マネージャーから問題を診断し、PID 列を追加できます。または、SysInternals の Process Explorer を使用します。Chrome.exe がそれ自体の多くのインスタンスを起動することがわかります。主なものは UI を表示するだけで、Web ページの閲覧には関与しません。ブラウザで開いたタブごとに 1 つずつ、他のタブが表示されます。

これらの他のインスタンスは特別で、アドオンとスクリプト コードをサンドボックスで実行します。ブラウザをクラッシュまたはハングアップさせる可能性のある Web ページまたはスクリプトに対して Chrome が回復力を持つように設計されています。しかし特に、すべての権限を削除するランタイム環境でコードを実行すると、ユーザーのマシンが混乱することはありません。あなたが書こうとしているコードのようなものです。

したがって、Process32First/Next() イテレータは単純すぎるため、最初に見つかった Chrome.exe のインスタンスを選択します。サンドボックス化されている可能性が高く、いじることができない種類です。ユーザーが開始したインスタンス、つまり UI のみを表示するインスタンスのみを注入できます。通常、この種のハッキングの有用性はここで終わります。その場合、興味深いことは何もありません。

于 2013-02-24T18:07:34.010 に答える