我们的Web应用程序调用了一些遗留代码(控制台可执行文件),它具有到文件系统的硬编码绝对路径,用于在运行时访问某些文件。这限制了我们的Web应用程序到每个服务器的单个实例。有没有办法将进程/应用程序的文件访问权限重定向到另一个文件夹(也许是强制它使用某个虚拟文件系统的方法)?
例如:可执行文件可以在" C:\ inetpub \ wwwroot \ webappname \ schemas"中查找文件。我们是否可以强制对该路径的所有引用指向" C:\ inetpub \ wwwroot \ webapp2 \ schemas"代替?
答案 0 :(得分:0)
可能有两种方法。第一个肯定更容易。
修改可执行文件
如果应用程序是用.Net编写的,请使用one from 9Rays.Net之类的反编译器,反编译代码并进行修改。这可能也适用于Java。
如果是本机应用程序,请在十六进制编辑器中打开该应用程序,找到该字符串并进行更改。它必须保持相同的长度,但是您可以使用空终端\0
来“缩短”它。
使用C#
为应用程序创建一个启动程序,然后调用它,并挂钩到read/write调用以修改路径。这可以在C#中完成,您可以找到resources on the Internet。
答案 1 :(得分:0)
我下载了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