【发布时间】:2015-09-06 09:21:57
【问题描述】:
基本上,我的程序与另一个 jar 文件一起运行。下面是下载功能的代码:
public void saveUrl(final String filename, final String urlString) throws MalformedURLException, IOException {
BufferedInputStream in = null;
FileOutputStream fout = null;
try {
in = new BufferedInputStream(new URL(urlString).openStream());
fout = new FileOutputStream(filename);
final byte data[] = new byte[1024];
int count;
while ((count = in.read(data, 0, 1024)) != -1) {
fout.write(data, 0, count);
}
} catch (Exception e) {
return;
} finally {
if (in != null) {
in.close();
}
if (fout != null) {
fout.close();
}
}
}
然后开始新进程
public void runUpdate() throws IOException{
String folder = fileLocation;
ProcessBuilder p = new ProcessBuilder();
p.command(folder);
p.start();
}
但是,即使有用户提示并且必须批准下载,当我在 eclipse 环境之外对其进行测试时,我的防病毒软件也会立即将其拾取。
它被检测为“trojan.downloader”。我在想它与下载功能有关吗?我并不是真的想打败一个反病毒程序。我没有试图做任何非法的事情。
也许一些混淆可以解决问题?
【问题讨论】:
-
我认为你已经实现了一个基本的病毒:一个应用程序,它将加载一个可执行文件并执行它。有没有试过其他环境或者杀毒软件?也许这只是一个防病毒工具的问题。
-
您的代码的问题在于,在同一台计算机上运行的任何程序都可能在运行时轻松劫持您的“已批准”代码并更改例如 url 以下载另一个可执行文件。必须不惜一切代价避免这种情况。通常您必须提供单独的更新程序,例如用于 Windows 的 .msi,可以在运行时进行认证等和内存保护(因为您可能会以管理员权限运行它)
-
@BeyelerStudios 嗯,那么所有其他程序如何检测和安装升级,如 Firefox、Skype 等?
-
您需要安装它们,它们在后台运行单独的更新服务 - 或者它们需要您以管理员模式(admin-pw 弹出窗口)执行更新命令来运行它们的安装 - 大多数重要:它们不是在 java 中运行,也不是下载代码并执行它
-
或者在 Skype M$ 的情况下,每次您的操作系统自动更新时都会强制升级到您的系统
标签: java obfuscation antivirus