Fed*_*gui 11 c# assemblies .net-4.0 code-injection
我正在使用以下代码:
AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
{
var token = args.LoadedAssembly.GetName().GetPublicKeyToken();
if (!IsValidToken(token))
{
Process.GetCurrentProcess().Kill();
}
};
Run Code Online (Sandbox Code Playgroud)
凡IsValidToken()进行比较加载反对我作为字节数组应用硬编码授权的公钥标记列表组件的公钥标记.
这是防止代码注入攻击的良好安全措施吗?此外,鉴于我稍后将使用NetReactor混淆我的应用程序,这是否必要?我试图阻止任何"窥探"我的应用程序,不仅来自Snoop工具,而且来自任何外部不受欢迎的来源.
乍一看,我会说“不,这还不够”。
理由:
CreateRemoteThread攻击是直接的 win32 调用,没有托管代码跟踪会触发这样的检测器
我认为可以AppDomain在注入的 dll 中创建另一个,从而完全绕过此检查。然后,人们可以执行其中的代码AppDomain,可能(我必须认为)通过回调回“主AppDomain”AppDomain.DoCallback
Process.Kill是一种删除应用程序的可怕方法,尽管这是一种不可捕获的方法 - 也就是说,任何附加的人都无法阻止它(它TerminateProcess在幕后使用 Win32)
我必须拿出我的“注入器”工具来测试这些语句,不过——如果我还记得我把代码放在哪里的话……
不管其中任何一个 - 你绝对会想要混淆这个程序集,特别是如果你计划在里面存储敏感位(事实上,如果你可以帮助的话,我反对在程序集中存储任何敏感信息) - 你的预防方法绝对不会阻止任何反汇编程序,如 Reflector、ILSpy、dotPeek 等。
| 归档时间: |
|
| 查看次数: |
1062 次 |
| 最近记录: |