3D少女カスタムエボリューションでDLLインジェクション

アバター
T-ARCs
記事: 4
登録日時: 5年前

3D少女カスタムエボリューションでDLLインジェクション

投稿記事 by T-ARCs » 5年前

強制的におしっこをお漏らしさせる。
右CTRL+P (Pee=おしっこ)でお漏らし

後は撮影し放題です(変態ではない)

DLLインジェクションクラス:DLLInjection.h
[code]
// DLLインジェクションクラス:DLLInjection.h
#pragma once
#include <windows.h>
#include <stdio.h>
#include <TlHelp32.h>

class CDLLInjection;
class CDLLInjection
{
private:
HANDLE m_hTargetProcess;
LPVOID m_pMem;
HANDLE m_hProcess;
HANDLE m_hThread;
public:
CDLLInjection()
{
}

CDLLInjection(LPWSTR dllName , LPCWSTR targetprocess)
{
if(this->InjectionDLL(dllName , targetprocess) == FALSE)
{
MessageBoxW(NULL,L"DLLインジェクションエラー",L"ERROR",MB_OK);
return;
}
}
~CDLLInjection()
{
if(m_hThread)CloseHandle(m_hThread);
if(m_pMem)VirtualFreeEx(m_hProcess, m_pMem, 0, MEM_RELEASE); //確保したメモリの開放
}

HANDLE FindProcess(LPCWSTR lpExename)
{
HANDLE hSnapshot;
HANDLE hSourceProcessHandle = NULL;
HANDLE hProcess = NULL;
PROCESSENTRY32 pe;
int i;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return FALSE;
pe.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hSnapshot, &pe)==FALSE)
{
return FALSE;
}
for(i=0;;++i)
{
if(Process32Next(hSnapshot, &pe))
{
if(wcscmp(pe.szExeFile , lpExename)==0) {
hProcess = OpenProcess(
PROCESS_ALL_ACCESS, // アクセスフラグ
TRUE, // ハンドルの継承オプション
pe.th32ProcessID // プロセス識別子
);
break;
}
} else {
break;
}
}

CloseHandle(hSnapshot);
return hProcess;
}

BOOL StartProcess(LPCSTR Name , LPSTR cmdline , LPCSTR cur_dir , DWORD wait)
{
DWORD dwCreationFlags = NORMAL_PRIORITY_CLASS;
STARTUPINFOA StartupInfo; // スタートアップ情報
PROCESS_INFORMATION ProcessInformation; // プロセス情報
ZeroMemory(&StartupInfo , sizeof(STARTUPINFO));
BOOL bf = CreateProcessA(
Name,
cmdline,
NULL, // セキュリティ記述子
NULL, // セキュリティ記述子
TRUE,
dwCreationFlags, // 作成のフラグ
NULL,
cur_dir,
&StartupInfo,
&ProcessInformation
);
Sleep(wait);
return bf;
}

BOOL InjectionDLL(LPWSTR dllName , LPCWSTR targetprocess)
{
DWORD len = (sizeof(wchar_t) * wcslen(dllName));
LPTHREAD_START_ROUTINE pAddr;
m_pMem = NULL;

m_hProcess = FindProcess(targetprocess);
if(m_hProcess == NULL)
{
MessageBoxW(NULL,L"プロセスが見つかりません",L"ERROR",MB_OK);
return FALSE;
}

m_pMem = (LPVOID)VirtualAllocEx(
m_hProcess,
NULL,
(UINT)len,
MEM_COMMIT,
PAGE_EXECUTE_READWRITE);

//LoadLibrary()のアドレス取得(他プロセス上でも同一のアドレスとなる)
pAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "LoadLibraryW");
if(!pAddr)
{
MessageBoxW(NULL,L"LoadLibraryW関数のアドレス取得エラー",L"ERROR",MB_OK);
return FALSE;
}
//挿入先でLoadLibraryを呼び出す m_pMemはパラメータのアドレス(後述)
if (m_pMem)
{
// 確保した挿入先の領域にDLL名を書き込む
if(WriteProcessMemory(m_hProcess, m_pMem, (LPVOID)dllName,len, NULL)==0) {
MessageBoxW(NULL,L"メモリ書き込みエラー",L"ERROR",MB_OK);
return FALSE;
}
// 確保したメモリをここで使用する(挿入先でLoadLibraryWを呼び出す)
m_hThread = CreateRemoteThread(m_hProcess, NULL , NULL, (LPTHREAD_START_ROUTINE)pAddr, m_pMem, NULL, NULL);
if (m_hThread)
{
//挿入したスレッドが終了するまで待機(DllMailから返るまで待つ)
Sleep(2000);
//スレッドハンドルのクローズ
CloseHandle(m_hThread);
} else {
MessageBoxW(NULL,L"LoadLibraryWスレッド作成エラー",L"ERROR",MB_OK);
return FALSE;
}
} else {
MessageBoxW(NULL,L"メモリアロケーションエラー",L"ERROR",MB_OK);
return FALSE;
}
return TRUE;
}

};
[/code]

DLL
[code]
// 3D少女カスタムエボリューション1.20専用 お漏らしDLL
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
//#include "SerialCommunication.h"

// グローバル変数
HINSTANCE g_hInst = NULL;

// 特定の条件を元にベースアドレスを検索する

DWORD SearchBaseAddress(DWORD start_adr , DWORD max_adr , SIZE_T RegionSize , DWORD Protect , MEMORY_BASIC_INFORMATION * pInfo);

// お漏らしアドレスを取得!

DWORD GetPeeAdr();

//リージョンサイズ fa000の読み書き可能なベースアドレスからEE9BCバイトに位置する
DWORD GetPeeAdr()
{
DWORD adr = NULL;
adr = (DWORD)SearchBaseAddress(0x00010000 , 0x20000000 , 0xEB000 , PAGE_READWRITE , NULL);
if(adr != NULL)
{
adr = ((DWORD)(adr + 0xe25ac));
} else {
MessageBoxW(NULL,L"ベースアドレスが見つかりませんでした",L"検索失敗",MB_OK);
}
return adr;
}


///////////////////////////////////////////////////////////////////////////////////////////////////
// DLLスレッド

DWORD WINAPI DLLThread()
{
DWORD pee_adr = GetPeeAdr();
for(;;)
{
// 右CTRL + P でお漏らしさせる

if((((1<<15)|1) & GetAsyncKeyState('P')) &&
(((1<<15)|1) & GetAsyncKeyState(VK_RCONTROL))) {
(*(DWORD *)pee_adr) = 0x00000005;
}
}
return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////////////

DWORD SearchBaseAddress(DWORD start_adr , DWORD max_adr , SIZE_T RegionSize , DWORD Protect , MEMORY_BASIC_INFORMATION * pInfo)
{
MEMORY_BASIC_INFORMATION Buffer;
DWORD lpAddress = start_adr , get_adr = NULL;

for(;;){

VirtualQuery(
(LPCVOID)lpAddress,
&Buffer,
sizeof(Buffer)
);

if((Buffer.RegionSize == RegionSize) && (Buffer.Protect == Protect))
{
get_adr = (DWORD)Buffer.BaseAddress;
if(pInfo!=NULL)
{
(*pInfo) = Buffer;
}
break;
}

lpAddress = (DWORD)Buffer.BaseAddress + (DWORD)Buffer.RegionSize;
if(lpAddress >= ((DWORD)max_adr))break;
}

return get_adr;
}

// DllMain(エントリーポイント)
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {

static HANDLE hThread = NULL;
static DWORD dwThreadId = 0;
g_hInst = hModule;

switch (ul_reason_for_call){

case DLL_PROCESS_ATTACH:

//スレッド起動
hThread = CreateThread(
NULL, // セキュリティ属性
0, // スタックサイズ
(LPTHREAD_START_ROUTINE)DLLThread, // スレッド関数
NULL, // スレッド関数に渡す引数
0, // 作成オプション(0またはCREATE_SUSPENDED)
&dwThreadId); // スレッドID

break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;

case DLL_PROCESS_DETACH:
CloseHandle(hThread);
hThread = NULL;
break;
}
return TRUE;
}
[/code]
添付ファイル
2018_0908_1143_001.png
2017_0624_1343_004.png
2017_0624_1342_005.png
最後に編集したユーザー T-ARCs on 2018年9月09日(日) 19:19 [ 編集 5 回目 ]

アバター
T-ARCs
記事: 4
登録日時: 5年前

Re: 3D少女カスタムエボリューションでDLLインジェクション

投稿記事 by T-ARCs » 5年前

女の子におしっこをお漏らしさせるという、
"良いこと"しかしていないのにも関わらず、
ウィルス対策ソフトにウィルスと認識されてしまうので注意が必要。
その場合、例外設定が必要。


アバター
T-ARCs
記事: 4
登録日時: 5年前

Re: 3D少女カスタムエボリューションでDLLインジェクション

投稿記事 by T-ARCs » 5年前

そうです
ですが、光よりも速いのは、"心"です