dll注入(汇编代码)

逆向工程 拆卸 部件 dll注入
2021-07-02 02:23:59

我需要一些技巧来理解从 DLL 或命令行执行外部代码的最佳方式是什么。

我喜欢为不支持它的不同游戏添加力反馈支持。

我可以编写一个 DLL 或一个命令行 exe 来执行 FFB。问题是我如何从游戏中调用这些函数。

目前,我已经与 IDA 取消了一场比赛,并找到了发出呼叫的要点。

我没有任何组装经验。所以我不确定我是否走对了路。

有一些工具,例如:wininject 所以我想用它来将 dll 依赖项添加到我的 exe 游戏中。

在我需要在程序集的 DLL 中调用我的函数之后(例如 execute_ffb(par1) ),但我不知道执行调用的代码。

这是有关通话的屏幕截图。

在此处输入图片说明

在此处输入图片说明

int __cdecl sub_43AC70(char *a1, int a2)
{
  call my_function(a1) from mylibrary.dll

  int i; // [esp+0h] [ebp-4h]

  for ( i = sub_43BC50(); i; i = *(_DWORD *)i )
  {
    if ( *(_DWORD *)(i + 88) == a2 && (!a1 || !stricmp((const char *)(i + 4), a1)) )
      return i;
  }
  return 0;

你能帮我吗 ?

1个回答

这确实是可能的,而且并不难——前提是游戏没有任何反作弊或完整性检查。

您正在寻找的东西称为function hooking如果您不想弄乱汇编,那么很少有好的库可以为您完成最重要和最乏味的工作。

查看示例,例如 PolyHook 存储库中的示例。在这里他们钩住(拦截)printf 函数,但是拦截游戏函数在43AC70调用你的函数是没有问题的mylibrary.dll

如果你想写你自己的绕道,你可以看看我在那个网站上的另一个回复:这里