0

这是出于有用(非恶意)目的而进行的黑客攻击,我不确定我想要做什么,但我想尝试一下。我正在运行封闭源代码的软件,因此我无法修改原始函数调用。电话是:

sprintf(string, this->LabelFormat, value)

并且this->LabelFormat%-#6.3g默认的。目的是为双打图例格式化标签,value数字也是如此。

我可以设置this->LabelFormat任何我想要的。我想执行从数字到字符串的映射,例如:

value | string
--------------
  0.0 | None
  1.0 | I
  2.0 | J
  3.0 | K

等等。由于我无法修改原始代码,是否可以操纵格式字符串为我执行指定的映射?

4

3 回答 3

3

API Hooking 可以满足您的需求

API 挂钩包括拦截程序中的函数调用并将其重定向到另一个函数。通过这样做,可以修改参数,如果您选择在真正应该成功的情况下返回错误代码,则可以欺骗原始程序,等等。所有这些都是在调用真正的函数之前完成的,最后在修改/存储/扩展原始函数/参数之后,将控制权交还给原始函数,直到再次调用它。

在将控制权交给函数之前,您必须使用 sprintf拦截对函数的原始调用并用所需的值覆盖 。this->LabelFormat

更多信息,请访问Detours - Microsoft Research

于 2012-12-28T18:25:45.807 回答
0

value如果您在设置之前可以访问,LabelFormat那么您所要做的就是设置LabelFormat您想要显示的字符串(根本没有任何%代码)。然后该函数将忽略额外的参数,但它会打印您想要的内容。如果您也没有访问权限,value那么我看不到任何仅使用格式代码进行映射的方法。

于 2012-12-28T18:45:24.057 回答
0

我认为仅使用格式字符串是不可能的。您应该在某处添加额外的机器指令。例如,您可以sprintf用自己的函数替换函数。

于 2012-12-28T18:12:42.527 回答