• Stars
    star
    115
  • Rank 305,916 (Top 7 %)
  • Language
    C
  • Created about 6 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

dll文件加解密和内存加载
工程说明

By lizhirui https://www.52pojie.cn/thread-808473-1-1.html

DllProtect

加密程序。加密dll文件。加密原理:dll内容使用AES和OR加密,增加CRC校验,写入到shell程序的尾部,生成文件XXXX_Encrypted.exe

加密程序会将以下结构体写入到加壳程序。

typedef struct DATA_INFO
{
	DWORD FileSize;
	DWORD FileOriginSize;
	char *FileAESPassword;
	char *FileXORPassword;
	char *DLLVirtualName;
	bool VerifyMachineCode;
	uint64 MachineCode;
	char XORDataVerifyCode;
	DWORD CRC32DataVerifyCode;
}DATA_INFO;

加密程序

Shell

脱壳程序。执行XXXX_Encrypted.exe,将dll解密出来,包括了虚拟机检测,调试检测,内存加载dll。

Shell程序无法单独调试。

shell_unpack

虚拟机检测
inline bool IsInsideVMWare()
{
	bool rc = true;

	__try
	{
		__asm
		{
			push   edx
				push   ecx
				push   ebx

				mov    eax, 'VMXh'
				mov    ebx, 0  // 将ebx设置为非幻数’VMXH’的其它值
				mov    ecx, 10 // 指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小
				mov    edx, 'VX' // 端口号
				in     eax, dx // 从端口dx读取VMware版本到eax
				//若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中
				cmp    ebx, 'VMXh' // 判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中
				setz[rc] // 设置返回值

				pop    ebx
				pop    ecx
				pop    edx
		}
	}
	__except (EXCEPTION_EXECUTE_HANDLER)  //如果未处于VMware中,则触发此异常
	{
		rc = false;
	}

	return rc;
}

inline bool IsVirtualPC_LDTCheck()
{
	unsigned short ldt_addr = 0;
	unsigned char ldtr[2];

	_asm sldt ldtr
	ldt_addr = *((unsigned short *)&ldtr);
	return ldt_addr != 0x00000000;
}

inline bool IsVirtualPC_GDTCheck()
{
	unsigned int gdt_addr = 0;
	unsigned char gdtr[6];

	_asm sgdt gdtr
	gdt_addr = *((unsigned int *)&gdtr[2]);
	return (gdt_addr >> 24) == 0xff;
}

inline bool IsVirtualPC_TSSCheck()
{
	unsigned char mem[4] = { 0 };

	__asm str mem;
	return (mem[0] == 0x00) && (mem[1] == 0x40);
}

inline bool DetectVM()
{
	HKEY hKey;

	char szBuffer[64];

	unsigned long hSize = sizeof(szBuffer)-1;

	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\BIOS\\", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
	{

		RegQueryValueEx(hKey, "SystemManufacturer", NULL, NULL, (unsigned char *)szBuffer, &hSize);

		if (strstr(szBuffer, "VMWARE"))
		{
			RegCloseKey(hKey);
			return true;
		}

		RegCloseKey(hKey);
	}

	return false;
}
调试检查
inline void BeginCheckTimingDebug()
{
#ifdef DEBUGCHECK
	__asm
	{
		PUSHAD
			CPUID
			RDTSC
			MOV tEAX,EAX
			MOV tEDX,EDX
			POPAD
	}

#endif
}

inline void EndCheckTimingDebug(DWORD TimeDelta)
{
#ifdef DEBUGCHECK
	__asm
	{
		PUSHAD
			CPUID
			MOV ECX,tEAX
			MOV EBX,tEDX
			RDTSC
			CMP EDX,EBX
			JA Debugger_Found
			SUB EAX,ECX
			CMP EAX,TimeDelta
			JA Debugger_Found
			JMP safe

		Debugger_Found:

		POPAD
			MOV ESP,MainESP
			JMP ExitAddress

		safe:
		POPAD
	}
#endif
}

inline void CheckDebug()
{

#ifdef DEBUGCHECK
	int debuged;
	DWORD DebugPort;
	DWORD ReturnLen;

	//虚拟机检测
	(IsInsideVMWare() || IsVirtualPC_LDTCheck() || IsVirtualPC_GDTCheck() || IsVirtualPC_TSSCheck() || DetectVM()) ? ShellExit() : 0;

	__asm
	{
		PUSHAD

			;check PEB.BeingDebugged directly

			MOV EAX,DWORD PTR FS:[0x30]
			MOVZX EAX,BYTE PTR [EAX+2]
			TEST EAX,EAX
			JNZ Debugger_Found
			JMP safe

		Debugger_Found:

		POPAD
			MOV ESP,MainESP
			MOV EBP,MainEBP
			JMP ExitAddress

		safe:

		;(PEB.ProcessHeap)
			MOV EBX,DWORD PTR FS:[030H]

			;Check if PEB.NtGlobalFlag != 0
			CMP DWORD PTR [EBX+068H],0
			JNE Debugger_Found
			;query for the PID of CSRSS.EXE
			CALL [CsrGetProcessId]

			;try to open the CSRSS.EXE process
			PUSH EAX
			PUSH FALSE
			PUSH PROCESS_QUERY_INFORMATION
			CALL [OpenProcess]

			;if OpenProcess() was successful
			;process is probably being debugged
			TEST EAX,EAX
			JNZ Debugger_Found

		EXIT:
		POPAD
	}

	(CheckRemoteDebuggerPresent(GetCurrentProcess(),&debuged) == FALSE) ? ShellExit() : 0;	
	(debuged == TRUE) ? ShellExit() : 0;
	NtQueryInformationProcess(GetCurrentProcess(),ProcessDebugPort,&DebugPort,4,&ReturnLen);
	(DebugPort != 0) ? ShellExit() : 0;

#endif
}
应用

将应用程序的核心算法写在dll里面,每次主程序启动的时候需要重新解密和解压dll。增加破解难度。

More Repositories

1

AntiDebuggers

30种方法检测程序是否被调试
C++
291
star
2

Screenshot

仿QQ截图,C++实现的截图软件Demo
C++
264
star
3

FuckCertVerifyTime

一些使用过期或者注销证书的技术
C++
185
star
4

Win_Driver_Mouse_And_Key

驱动模拟键鼠,支持64位,附代码
C++
125
star
5

IDASignMaker

IDA高级技巧 API符号自动识别库 IDASignMaker
C++
122
star
6

x64_AOB_Search

快速内存搜索算法,商用级别
C++
121
star
7

AntiVirtualMachine

8种检测虚拟机方法
C++
94
star
8

Win64DriverStudy_Src

WIN64驱动编程基础教程-源码 作者:胡文亮
C
70
star
9

SunDaySearchSignCode

基于sunday算法的内存快速搜索,搜索2GB内存只需1秒
C++
59
star
10

KProtect

Driver protect 驱动保护
C++
46
star
11

Study_udt4

企业级开源的文件传输库,支持UDP和TCP
C++
41
star
12

UIDesigner

踏雪流云写的UIDesigner,非常好的MFC多文档学习资料
C++
37
star
13

libcoro

C++11实现的协程库,支持Win,Linux,Mac。
C++
35
star
14

Duilib_Extension

Duilib扩展控件收集
C++
34
star
15

bilibili_depends

据说是bilibili泄露的后端源码中使用的开源组件。
Go
33
star
16

dwg2dxf

dwg2dxf - Program to convert dwg/dxf to dxf(ascii & binary)
C++
31
star
17

vmp3.2crack

vmp3.2授权分析
C++
30
star
18

BitBltScreenshotCleaner

HOOK BitBlt 简单的BitBlt钩子和屏幕快照清理器和记录器
C++
29
star
19

wmifilter

驱动层拦截web访问源码
C
28
star
20

Study_IWebBrowser2

C++操作HTML,调用JS,实现IE内核浏览器
C++
28
star
21

CorelDRAW_OfficiaLink

CorelDRAW 官方下载地址,防思杰马打包
28
star
22

LittleCCompiler

Little C编译器
C
26
star
23

Study_FindPicAlgorithm

学习查图算法,某些识图外挂的原理
C++
23
star
24

Cpp11ThreadPool

线程池,使用了很多C++ 11的新特性, 流程和传统的差不多,但是代码简洁了很多。
C++
22
star
25

Tinyhttpd

C语言写的Http Server,J. David Blackstone在1999年写的一个不到 500 行的超轻量型HTTP服务器Http Server。
C++
21
star
26

WinFastIPC

管道实现的进程间通信库,多线程支持
C++
21
star
27

IDAStealth-v1.3.3

IDA反-反调试插件 IDAStealth v1.3.3, created 06/28/2011, Jan Newger
C
20
star
28

BypaPH

BypaPH - Process Hacker's bypass (read/write any process virtual memory & kernel mem) 带签名驱动,驱动级内存读取
19
star
29

ThreadPool

一款设计不错的线程池
C++
17
star
30

PELearningMaterials

PE文件格式学习资料
C++
16
star
31

360SceenCapture

360官方出品的截图软件,套个马甲可以单独使用
C++
16
star
32

High-speed-Charting-Control

基于MFC的高速图表控件,A flexible charting control to display 2D data
C++
15
star
33

bkuilib

bkuilib - 金山开源界面库KUI的精简版本
C++
14
star
34

KillPCHunter_NtTerminateProcess

模拟NtTerminateProcess的实现关闭PCHunter
C
13
star
35

snappy

谷歌2011年开始开发的一款专注于速度的压缩,解压库,速度完胜zlib。
C++
12
star
36

DuiEngine

Fork form http://code.taobao.org/svn/duiengine/trunk
C++
12
star
37

DXF-Viewer

DXF Viewer
C++
12
star
38

GetPcWeChatQrCode

Hook获取电脑版微信二维码
C++
12
star
39

Study_Garbage_Collector

C语言,基于mark-sweep算法实现的垃圾回收机制
C
11
star
40

Dongle

加密狗,USB设备枚举
C
11
star
41

AesFileProtection

文件加密保存系统,使用了AES算法,是矛也是盾。臭名昭著的勒索病毒也是使用了AES。
C
11
star
42

Study_threadpool

线程池经典模型
C++
11
star
43

disAsmMini

OD反汇编引擎精简版,只适合x86系统,可嵌入驱动程序。
C
10
star
44

MyProtocol

手把手教你实现自定义的应用层协议
C++
10
star
45

Detours_4.0.1

MircoSoft Detours 4.0.1,MIT License,Support X86,X64,ARM,IA64
C++
10
star
46

GetPeInfo

v1版完成对PE头,区段,输入表的解析
C++
9
star
47

LinkHelper

硬链接制作工具
C++
8
star
48

VmpHandle

VmpHandle
C++
8
star
49

Study_socket_wrapper

封装socket,支持HTTP POST GET,Support Linux .Win,MacOS
C++
8
star
50

beanstalkd-win

beanstalkd for windows, 高性能、轻量级的分布式内存队列系统
C
8
star
51

DaemonApp

Windows下进程守护工具,可配置
C++
8
star
52

Window_KeyAndMouseHook

Window Key And Mouse Hook
C++
8
star
53

XSkin1.0

一款仿Duilib的DirectUI皮肤库
C
7
star
54

MFCSocket

Socket聊天室
C++
7
star
55

hooklib

inlinehook lib for x86/64 Edit
C
7
star
56

Base64ToFile

将base64算法加解密的内容直接保存为文件。
C++
7
star
57

ADE32_InlineHook

基于ADE32的inlineHook
C++
7
star
58

sod

An Embedded Computer Vision & Machine Learning Library
C
7
star
59

Study_easing_animation

缓帧动画,缓动函数,windows动画,窗体动画,ease function
C++
6
star
60

SetBreakPoint

SetBreakPoint,ReadProcessMemory,WriteProcessMemory,设置断点的代码实现
C++
6
star
61

Study_ProcessHacker

Study ProcessHacker. Good Job!
C
6
star
62

iQIYI_Web_Video_Upload

C++模拟爱奇艺web视频上传
C++
6
star
63

GdiPlusTextEffect

Gdi+ 艺术字和圆角矩形
C++
6
star
64

levels-adjustment

完美移植PhotoShop的色阶算法
C++
6
star
65

GetMacAddress

获取windows网卡地址
C++
6
star
66

WindowFinder

WindowFinder
C++
6
star
67

Study_Websocket

学习Websocket的资料
C++
6
star
68

Study_shellcode

windows平台下功能性shellcode的编写
C
6
star
69

HtmlViewer

HtmlViewer
C++
5
star
70

IeProxy

IE代理设置修改。最终都是修改注册表,支持xp~win10
C++
5
star
71

mhook

A Windows API hooking library,Support x86 And X64
C
5
star
72

Window_GlassIntro_demo

window毛玻璃界面
C++
5
star
73

windows-effect

Windows界面编程 位图显示特效合集
C++
5
star
74

Ring3GetProcessInfo

PSAPI和tool help获取进程详细信息
C++
5
star
75

SoftWareManager

SoftWareManager(软件管理器)
C++
4
star
76

AlphaEditor

GdiPlus + STL 做的一款图形输入的demo
C++
4
star
77

mousehook

SetWindowsHookEx的使用例子
C++
4
star
78

ProcessManager_Ring0

基于驱动的进程管理器,目前仅开发了进程枚举功能
C
4
star
79

doublebufferedqueue

双端队列
C++
4
star
80

notepad

windows notepad仿真版
C
3
star
81

GdiPlusString

GdiPlus 下字体信息和文字的显示
C++
3
star
82

Study_Diffie_Hellman_Key_Exchange

迪菲-赫尔曼密钥交换
C
3
star
83

stl_util

对stl的补充,封装
C++
3
star
84

GeneralHashFunctions

跨平台的通用Hash算法
C
3
star
85

skinsb

skinsb win32 MFC的彩色滚动条
C++
3
star
86

Study_XiaoMi_Login

C++登录小米账号(C++实现HTTPS通信)
C
3
star
87

XmlConfigDemo

Use xml to save and read app setting
C++
3
star
88

ScopeGuard

ScopeGuard 用于资源的安全删除。
C++
3
star
89

DLib-Attacher

给PE添加dll,只支持32位程序。
C++
3
star
90

AltServer

AtlServe
C++
3
star
91

ymagine

yahoo 开源图形库ymagine移植版
C
3
star
92

CarouselMap

C++ 实现的轮播图
C++
3
star
93

Study_mujs

Embedded JavaScript engine for C/C++
C
3
star
94

avif2jpg

avif2jpg for windows avif图片转jpg
Python
2
star
95

InlineHookDemo

InlineHookDemo -- Hook CreateProcessW as example.
C++
2
star
96

ElipsePic

GDI+ 圆形头像
C++
2
star
97

Study_algorithm

算法学习,算法重温
C
2
star
98

Study-macOS-Development

学习macOS时的一些教程和项目资源
Swift
2
star
99

baidu-sofa-pbrpc-win

百度sofa-pbrpc移植版本
C++
2
star
100

Chrome-base-cpu

获取CPU信息和指令支持情况
C++
2
star