将文件/路径访问重定向到C#中的其他文件夹

时间:2014-07-22 15:50:00

标签: c#

我们的Web应用程序调用了一些遗留代码(控制台可执行文件),它具有到文件系统的硬编码绝对路径,用于在运行时访问某些文件。这限制了我们的Web应用程序到每个服务器的单个实例。有没有办法将进程/应用程序的文件访问权限重定向到另一个文件夹(也许是强制它使用某个虚拟文件系统的方法)?

例如:可执行文件可以在" C:\ inetpub \ wwwroot \ webappname \ schemas"中查找文件。我们是否可以强制对该路径的所有引用指向" C:\ inetpub \ wwwroot \ webapp2 \ schemas"代替?

2 个答案:

答案 0 :(得分:0)

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

修改可执行文件

如果应用程序是用.Net编写的,请使用one from 9Rays.Net之类的反编译器,反编译代码并进行修改。这可能也适用于Java。

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

使用C#

为应用程序创建一个启动程序,然后调用它,并挂钩到read/write调用以修改路径。这可以在C#中完成,您可以找到resources on the Internet

答案 1 :(得分:0)

终于找到了答案。我得到它在.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