在c#中重定向文件/路径访问到不同的文件夹
本文关键字:文件夹 访问 路径 重定向 文件 | 更新日期: 2023-09-27 18:14:03
我们有一些遗留代码(控制台可执行),由我们的web应用程序调用,它有硬编码的绝对路径到文件系统,以便在运行时访问某些文件。这将我们的web应用程序限制在每台服务器上只有一个实例。是否有任何方法将进程/应用程序的文件访问重定向到不同的文件夹(可能是强制它使用某些虚拟文件系统的方法)?
例如:可执行文件可能会在"C:'inetpub'wwwroot'webappname'schemas"中查找文件。我们可以强制指向该路径的所有引用指向"C:'inetpub'wwwroot'webapp2'schemas"吗?
可能有两种方法。第一个肯定更容易。
修改可执行文件
如果应用程序是用。net编写的,请使用像9Rays那样的反编译器。Net,反编译代码,并进行修改。这可能也适用于Java。
如果它是一个本机应用程序,在十六进制编辑器中打开应用程序,找到字符串并更改它。它必须保持相同的长度,但是您可以使用空终端'0
来"缩短"它。
为应用程序创建一个启动器,它将被调用,并钩入读/写调用以修改路径。这可以在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