30.使用C语言在windows中用数组执行机器指令
[toc]
一、在C语言中直接使用数组执行机器指令1.写一个C语言程序,内容为调用MessageBoxA弹出一个消息框12345678910111213141516#include <stdio.h>#include <string.h>#include <windows.h>void MessageC(){ MessageBoxA(0,"MessageC", 0, 0); return;}int main() { MessageC(); return 0;}
2.写一个C语言程序,内容为使用x86内联汇编调用MessageBoxA弹出一个消息框12345678910111213141516171819202122232425#include <stdio.h>#include <string.h>#include <windows.h>void MessageA(){ char *message = &quo ...
29. 利用系统进程加载Dll到其他进程中(系统进程可能会出现bug)
[toc]
一、将Dll注入到系统进程后加载Dll到其他进程中1.编写Dll1.dll文件,注入到winlogon.exe中
dllmain1.c
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950//dllmain1.c#include <Windows.h>#include "Load1.h"HMODULE g_hDll = NULL;DWORD WINAPI UnloadThreadCallBack(PVOID param);DWORD WINAPI UnloadThread();// DLL 主函数BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH ...
28.C语言在Windows中获得system权限的方法
[toc]
利用系统进程来创建新的进程lsass.exe系统中没有加载kernel32.dll,只有ntdll.dll,需要先将kernel32.dll注入到lsass.exe进程中
1.使用CreateProcessWithTokenW获取其他进程令牌来创建新的进程之前的文章写过: 6.使用C语言在windows中创建线程与进程并且创建具有system权限进程
C:\Windows\System32\kernel32.dll
2. 将Dll注入到系统进程中弹出cmd程序
编写x86_64位dll程序并编译
将Dll注入到拥有系统权限进程winlogn.exe的程序中,系统如果有两个winlogn.exe会有一个没效果,注入器需要有管理员与Debug权限
完整代码,功能为创建一个cmd.exe
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960//dllmain.c#include <Windows ...
1.使用C语言在Windows程序中播放音频
[toc]
使用c语言中的媒体库播放声音1.c语言使用Winapi播放声音
准备一个WAV格式的音乐,PlaySound函数只能播放WAV格式的音乐
123456789101112#include <windows.h>#include <mmsystem.h>#include <stdio.h>#pragma comment(lib,"winmm.lib")int main() { BOOL flag=PlaySoundA("D:\\Users\\3\\Videos\\落叶的位置.wav", NULL, SND_SYNC); if(!flag)printf("%d\n",GetLastError()); return 0;}
准备一个mp3格式的音乐,使用mciSendString播放
123456789101112131415161718192021222324#include <windows.h>#include < ...
C语言中使用MySql下:使用服务器中的MySql
[toc]
一 、配置服务端1. 安装kali2. 在kali中开启MySql
打开MySql服务
12systemctl start mysql#service mysql restart
查看MySql状态
12systemctl status mysql#service mysql status
MySQL初始化
1mysql_secure_installation
初始化之后再重启服务
1systemctl restart mysql
运行MySQL测试一下,exit退出
1mysql
3. 开启服务器中MySql的访问权限,使其他主机可以连接服务器的MySql数据库
在服务器中启动MySql
1mysql
列出所有MySql用户
1SELECT user FROM mysql.user;
选择数据库mysql
1use mysql
显示数据库mysql,里面保存了所有用户
1SELECT user,host FROM user;
创建新用户命名为new
1CREATE USER 'new'@'%' IDEN ...
C语言使用MySql上:使用本地中的MySql
[toc]
一、准备工作1.安装MySql2.使用MySql数据库新建一个表
使用cmd开启服务,以管理员身份运行cmd
1net start MySQL80
切换到mysql中bin命令
1cd C:\Program Files\MySQL\MySQL Server 8.0\bin
命令行连接数据库
1mysql -h localhost -u root -p123456
使用sql语句新建一个数据库
1CREATE DATABASE test DEFAULT CHARSET utf8;
选择数据库
1use test
使用sql语句新建一个表格
1234567CREATE TABLE book ( book_id int PRIMARY KEY AUTO_INCREMENT, book_name varchar(60) NOT NULL, book_author varchar(60) NOT NULL, book_shelf int DEFAULT 0, book_addtime datetime NOT NULL);
给表格插入一条数据
...
27.通过调试程序读取内存地址数据
[toc]
读取数据1.准备一个被调试程序,编译前关闭随机基址1234567891011121314#include <Windows.h>#include <stdio.h>int main(){ SetConsoleTitleA("Message"); printf("Message.exe 0x%X\n",GetModuleHandle(TEXT("Message.exe"))); SIZE* addr = 0x140000000; printf("0x140000000 value 0x%x",*addr); getchar(); return TRUE;}
2.用C语言调试已经打开的Message.exe并读取0x14000000地址处的数据123456789101112131415161718192021222324252627282930313233343536 ...
26.C语言隐藏函数调用
[toc]
C语言通过内联汇编隐藏函数调用1. 通过C语言内联汇编隐藏调用函数,将需要调用的地址放到[ebp+4]的位置(此程序执行成功,但会堆栈不平衡造成程序崩溃)12345678910111213141516171819202122#include <windows.h>#include <stdio.h>#pragma optimize("",off)void empty(){ printf("1:empty\n");}int main(){ _asm { mov eax, empty mov [ebp + 4], eax } printf("2:stack\n");}#pragma optimize("",on)
2.通过C语言裸函数内联汇编隐藏调用函数,将需要调用的地址放到[ebp+4]的位置,使用[ebp+4]的值前将[ebp+4]的值赋予[ebp+8]1234567891011121314151617 ...
25.通过Hook注入Dll
Hook注入dll文件到所有带窗口的32位程序中1.在Dll中编写Hook代码,编译为32位
dllmain.c
1234567891011121314151617181920212223// dllmain.c : Defines the entry point for the DLL application.#include <windows.h>#include "Hook.H"BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: MessageBoxA(0, "success load", "title", 1); break; case DLL_THREAD_ATTACH: brea ...
24.通过Hook捕获程序键盘消息与鼠标消息
[toc]
设置全局Hook用C语言写一个程序捕获键盘消息来判断A是否被按下1234567891011121314151617181920212223242526272829303132333435363738#include <windows.h>#include <stdio.h>HHOOK hKeyboardHook;// 钩子过程LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { KBDLLHOOKSTRUCT* pKeyboard = (KBDLLHOOKSTRUCT*)lParam; if (wParam == WM_KEYDOWN) { if (pKeyboard->vkCode == 'A') { // 检查是否按下 "A" 键 ...
