繁体   English   中英

printf hacking的格式字符串

[英]Format string for printf hacking

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

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

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

API挂钩可以满足您的需求

API挂钩包括拦截程序中的函数调用并将其重定向到另一个函数。 通过执行此操作,可以修改参数,如果您选择在确实应该成功时返回错误代码,则可以欺骗原始程序,依此类推。 所有这一切都是在调用实函数之前完成的,最后,在修改/存储/扩展原始函数/参数之后,控制权被交还给原始函数,直到再次调用它为止。

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

有关详细信息,请访问Detours - Microsoft Research

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM