if ( (unsigned int)sub_140002990(argc, argv, envp) )
__int64 sub_140002990()
{
__int64 v1; // rax
__int64 v2; // rdx
__int64 v3; // rbx
unsigned __int8 v4; // al
WCHAR Filename[264]; // [rsp+20h] [rbp-228h] BYREF
memset(Filename, 0, 0x208ui64);
GetModuleFileNameW(hModule, Filename, 0x104u);
PathAppendW(Filename, L"..\\AISafeSDK64.dll");
if ( (unsigned int)sub_14000B2E0(&unk_140055240, Filename) && (unsigned int)sub_14000B490(&unk_140055660, Filename) )
return 1i64;
v1 = sub_140008BE0(&qword_1400536A0, " 未成功初始化所有功能模块!");
LOBYTE(v2) = 10;
v3 = v1;
v4 = sub_140009C90(v1 + *(int *)(*(_QWORD *)v1 + 4i64), v2);
sub_1400099D0(v3, v4);
sub_140007DE0(v3);
return 0i64;
}
__int64 __fastcall sub_14000B2E0(__int64 a1, const WCHAR *a2)
{
HMODULE LibraryW; // rax
FARPROC AIGetFrameObject; // rsi
__int64 result; // rax
LibraryW = LoadLibraryW(a2);
*(_QWORD *)(a1 + 16) = LibraryW;
if ( !LibraryW )
return 0i64;
AIGetFrameObject = GetProcAddress(LibraryW, "AIGetFrameObject");
if ( !AIGetFrameObject )
return 0i64;
memset((void *)(a1 + 28), 0, 0x404ui64);
*(_DWORD *)(a1 + 24) = 1032;
result = ((__int64 (__fastcall *)(__int64))AIGetFrameObject)(a1 + 24);
*(_DWORD *)(a1 + 8) = result;
return result;
}
我也是服了,在入口点直接加载当前目录下的AISafeSDK64.dll,然后调用里面的函数,现在360都成这样了,记得当年我们都要求,所有DLL禁止使用导入方式,动态加载,同时加载DLL都会调用360内部的加载验证函数验证360签名后,才能加载,不应该被利用的,我还在360的时候,都好几次发现类似的问题,督促他们去修正,现在走了后,估计也没人管了,木马都嗨起来了。 |