在c#中重定向文件/路径访问到不同的文件夹

本文关键字:文件夹 访问 路径 重定向 文件 | 更新日期: 2023-09-27 18:14:03

我们有一些遗留代码(控制台可执行),由我们的web应用程序调用,它有硬编码的绝对路径到文件系统,以便在运行时访问某些文件。这将我们的web应用程序限制在每台服务器上只有一个实例。是否有任何方法将进程/应用程序的文件访问重定向到不同的文件夹(可能是强制它使用某些虚拟文件系统的方法)?

例如:可执行文件可能会在"C:'inetpub'wwwroot'webappname'schemas"中查找文件。我们可以强制指向该路径的所有引用指向"C:'inetpub'wwwroot'webapp2'schemas"吗?

在c#中重定向文件/路径访问到不同的文件夹

可能有两种方法。第一个肯定更容易。

修改可执行文件

如果应用程序是用。net编写的,请使用像9Rays那样的反编译器。Net,反编译代码,并进行修改。这可能也适用于Java。

如果它是一个本机应用程序,在十六进制编辑器中打开应用程序,找到字符串并更改它。它必须保持相同的长度,但是您可以使用空终端'0来"缩短"它。

使用c#

为应用程序创建一个启动器,它将被调用,并钩入读/写调用以修改路径。这可以在c#中完成,您可以在Internet上找到相关资源。

终于找到了答案。我让它在。net中工作,我不知道它对其他语言是否有帮助。灵感来自这个博客:http://blog.didierstevens.com/2006/07/07/viewing-strings-in-executables/

我下载了Mcaffee的BinText 3.03 (http://www.mcafee.com/us/downloads/free-tools/bintext.aspx),并在我的测试EXE上运行它。我搜索了整个列表,找到了我想要替换的字符串。这会给你一个文件位置偏移量。根据BinText,我的字符串位于0x73F。下面的代码将字符串的前两个字符替换为"AK"。只需稍加修改,您就可以执行实际的字符串删除,而不是简单的1:1字符替换。

{
  string file = "TrashV1.exe"; // Input EXE
  string fileout = "TrashV2.exe";
  File.Delete(fileout);
  byte[] barr = File.ReadAllBytes(file);
  int offset = 0x73e; // NOTE! This is one LESS than the offset that MCaffee reported!
  string replace = "AK";
  var enc = new System.Text.UnicodeEncoding();
  byte[] unicode = enc.GetBytes(replace);
  for (int i = 0; i < unicode.Length; i++)
  {
    barr[offset + i] = unicode[i];
  }
  File.WriteAllBytes(fileout, barr);
}

TrashV1.exe: STACK_OVERFLOW

TrashV2.exe: AKACK_OVERFLOW