通过代理对应用程序的所有连接进行隧道化
Tunneling all connections of an application through a proxy
与freecap类似。
我希望开发一种解决方案,只在某些软件上工作,对最终用户不可见。我想将隧道器与软件包捆绑在一起(我无法访问其源代码)。
我听说这样做的唯一方法与freecap类似。使用DLL注入,然后挂钩到WinSock API。我只是想知道是否有一个更简单的方法除了通过。net或c++注入DLL。我可以把大多数c++转换成c#,所以这就是为什么我对这个集合开放。
如果没有,我将感谢您提供的有关DLL注入和挂钩到WinSock API的任何建议或链接。也许是一个类似于freecap的开源项目。
或者,如果你知道一个可以通过命令行启动的应用程序,比如freecap.exe --start myprogram.exe
,这样freecap就会对最终用户不可见地运行。
API挂钩基本上是实现此目的的唯一方法。有多种方法可以用来钩入WinSock并使代码运行,DLL注入(通过替换进程"导入地址表"中的项)是其中最直接的方法。
动态链接进程的IAT存储了包含进程执行过程中所需函数的库的内存位置。该技术的工作原理是修改该表中的条目,使其指向另一个库(包含您的代码的库)。还有其他方法可以将代码插入到另一个进程中,但如果你只想影响系统中单个进程的行为,这是最稳定的方法。
如果你想避免自己做大部分的实现工作,只专注于让一些东西运行,我建议使用EasyHook。
EasyHook根据GNU宽松通用公共许可证或LGPL进行许可。
来自网站:
EasyHook从Microsoft Detours结束的地方开始。
这个项目支持扩展(挂钩)非托管代码(api)与纯托管代码,从内部一个完全托管的环境,比如c#,使用Windows 2000 SP4及更高版本,包括Windows XP x64,Windows Vista x64和Windows Server 2008 x64。还支持32位和64位内核模式的钩子以及一个非托管的用户模式API,它允许您在不需要。NET的情况下挂钩目标客户PC上的框架。一个实验性的隐形注入隐藏钩从大多数当前AV软件
正如上面所说的,这个项目应该允许你极大地简化钩子过程,并且允许你在c#中工作。
从文档中,这里是作者将一个简单的Filemon(现在是Process Monitor)类型的实用程序注入目标进程的示例:
// Copyright © 2008 Christoph Husse
using System;
using System.Collections.Generic;
using System.Runtime.Remoting;
using System.Text;
using EasyHook;
namespace FileMon
{
public class FileMonInterface : MarshalByRefObject
{
public void IsInstalled(Int32 InClientPID)
{
Console.WriteLine("FileMon has been installed in target {0}.rn", InClientPID);
}
public void OnCreateFile(Int32 InClientPID, String[] InFileNames)
{
for (int i = 0; i < InFileNames.Length; i++)
{
Console.WriteLine(InFileNames[i]);
}
}
public void ReportException(Exception InInfo)
{
Console.WriteLine("The target process has reported an error:rn"+ InInfo.ToString());
}
}
class Program
{
static String ChannelName = null;
static void Main(string[] args)
{
try
{
Config.Register(
"A FileMon like demo application.",
"FileMon.exe",
"FileMonInject.dll");
RemoteHooking.IpcCreateServer<FileMonInterface>(ref ChannelName, WellKnownObjectMode.SingleCall);
RemoteHooking.Inject(
Int32.Parse(args[0]),
"FileMonInject.dll",
"FileMonInject.dll",
ChannelName);
Console.ReadLine();
}
catch (Exception ExtInfo)
{
Console.WriteLine("There was an error while connecting to target:rn{0}", ExtInfo.ToString());
}
}
}
}
我希望这是有帮助的。好运! - 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 使用Hooking wsocks32.dll通过代理对应用程序的所有连接进行隧道传输
- 创建USB隧道连接加密狗
- 通过代理对应用程序的所有连接进行隧道化