所以凭借着我18岁那年的开发经验,脑子里想到了 Windows 的消息模型,使用 SendMessage 给对应的窗体控件句柄发送特定的事件不就搞定了么,异常自动重启使用 CreateProcess 不就行了吗...,所以基本处于手生的状态,而 golang 本身也支持使用 syscall 来调用 windows 的 DLL(动态链接库),所以果断使用 golang, 因为这个外挂大部分的WinAPI都在 user32...因为我们没办法通过SendMessage 发送 WM_GETTEXT 事件获取内容,但是我们可以通过 LVM_GETITEMTEXT 来获取 listview 的列表内容 BUT........,然后再使用SendMessage,ListView的数据会写到这个内存块,最后我们通过 ReadProcessMemory 来读取获取到列表的数据 这里就是为什么32位不能读64位程序的内容的原因了,...到此为止,关键的技术内容我们已经调研完了,下一篇内容我们会讲如何使用go语言实现一个真正可用的外挂。
对于那些以前没有使用过winapi的人来说,这只是表示函数期望的字符串类型。在这篇文章中,我们将使用 LoadLibraryA 函数,这仅仅是因为个人喜好以及我通常如何设置工具。...查找进程的句柄 上面我提到过需要一个进程的句柄,所以现在我将深入探讨句柄是什么以及如何为你的进程找到一个句柄。...为了获得进程的句柄,我们需要使用 winapi 函数OpenProcess。这个函数需要被告知我们想要什么访问权限,然后它需要处理id。...然后它返回进程 ID,然后我们可以使用它通过 OpenProcess 获取进程句柄。...winapi 函数GetProcAddress获取 LoadLibraryA 的地址。
WINHTTP_FLAG_REFRESH 当使用此标志时,一个“的Pragma:no-cache的”头加入�到请求句柄。...假设无法找到的下一个索引,则返回ERROR_WINHTTP_HEADER_NOT_FOUND。设置此參数WINHTTP_NO_HEADER_INDEX来指定应返回的头,仅仅有第一次出现。...參数: hInternet [in] HINTERNET句柄上查询信息。注意,这可能是一个会话句柄或请求句柄,这取决于正在查询的选项,选项标志主题,以确定该句柄是适当的使用中查询特定的选项。...ERROR_WINHTTP_HEADER_COUNT_EXCEEDED ERROR_WINHTTP_HEADER_SIZE_OVERFLOW 调用 WinHttpReceiveResponse...LPVOID lpvStatusInformation, _In_ DWORD dwStatusInformationLength ); dwNotificationFlags [in] 回调函数事件通知标识
在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目中依旧在使用ListView,本文将总结一下使用过程中遇到的一些问题,与大家共勉~~~...四、如何获取ListView中单击某个item后的信息,onItemClick函数如下: public void onItemClick(AdapterView<?...,android会默认将focus给了这些控件, 也就是说listview的item根本就获取不到focus,所以导致onitemclick事件不能触发。...();方法可以添加列表的头部和尾部,但是注意: 1、head和footer是listview的列表项,如果你有一个head的话,那么他的position就是0 2、在使用header和footer的过程中...九、获取ListView中某个Item中Button,并为其设置click事件 很多朋友喜欢继承BaseAdapter适合器进行处理,其实直接继承SimpleAdapter重写getView方法进行处理即可
返回值: 函数返回句柄,该句柄具有EVENT_ALL_ACCESS权限去访问新的事件对象,同时它可以在任何需要事件对象句柄的函数中使用。...多个进程可持有同一个事件对象的多个句柄,可以通过使用此对象来实现进程间的同步。...·一个进程可以在DuplicateHandle函数中指定事件对象句柄,从而获得一个复制的句柄,此句柄可以被其它进程使用。...(在调用OpenEvent或CreateEvent函数时,一个进程可以指定事件对象的名字。) 使用CloseHandle函数关闭句柄。当进程终止时,系统将自动关闭句柄。...事件对象会被销毁,当最后一个句柄被关闭。 二、C++CreateEvent函数在多线程中使用及实例 下面主要演示一下采用CreateEvent实现多线程。
MyOpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId) { //获取 要保护进程的标题 的窗口句柄...系统API函数前使用::为了和类扩展函数区别 // 为了代码的健壮性 使用TEXT宏、 HWND 窗口句柄、 HWND HProtect = ::FindWindow(NULL,TEXT("Windows...*************/ HANDLE pBegin = GetModuleHandle(NULL); PBYTE pBegin2 = (PBYTE)pBegin; PIMAGE_DOS_HEADER...DOS = PIMAGE_DOS_HEADER(pBegin2); PIMAGE_NT_HEADERS NT = PIMAGE_NT_HEADERS(pBegin2+DOS->e_lfanew);...pOriginalThunk->u1.AddressOfData + pBegin2 + 2); if (0 == strcmpi(FunName,OurFunName)) { //获取以
四、实战代码示例:从基础到进阶4.1 基础示例:等待线程结束#include #include // 线程函数DWORD WINAPI ThreadProc(LPVOID...,释放资源 return 0;}4.2 事件同步:生产者-消费者模型#include #include HANDLE g_hEvent; // 全局事件句柄...5.2 避免常见陷阱死锁预防始终以相同顺序获取多个互斥体设置合理的超时时间,避免无限等待使用TryEnterCriticalSection等非阻塞方式作为备选方案句柄管理等待结束后及时调用CloseHandle...释放资源不要在等待期间关闭正在等待的对象句柄使用RAII封装句柄,确保异常情况下的正确释放性能优化避免在UI线程中使用INFINITE等待,导致界面假死合理设置超时时间,平衡响应速度与CPU占用高频等待场景考虑使用信号量而非事件对象...⚠️ 重要提醒:所有内核对象句柄都必须通过CloseHandle释放,否则会导致资源泄漏。建议使用RAII模式封装句柄管理,确保异常安全。
目录 64位内核映射DLL获取Zw函数调用功能号 一丶 简介 1.1 如何映射DLL 1.2 如何获取Zw功能调用号 二丶 代码示例 2.1 内存中映射文件 (模拟 Ring3 LoadLibrary)...2.2 Ring0下解析导出表 获取SystemCall功能号. 2.3 其它博客参考资料 64位内核映射DLL获取Zw函数调用功能号 一丶 简介 1.1 如何映射DLL 映射DLL其实很简单 在内核中使用...); 关闭 文件句柄 关闭创建映射后的句柄 其实API很简单.只需要查下文档即可使用 而且在Ring3下也有与之对应的API....只不过 这是换到Ring0中使用了. 1.2 如何获取Zw功能调用号 上面是映射了DLL. 那么映射的DLL相当于内存中已经有了DLL数据了. 我们只需要解析导出表即可....原理就是加载ntdll.dll 直接解析它的导出表 从导出表中获取Zw功能函数. 至于如何获取调用号我们打开X64Dbg 随便调试一个64位程序.
全局 Hook 不一定需要用到 Dll ,比如全局的鼠标钩子、键盘钩子都是不需要 Dll 的,但是要钩住 API,就需要 Dll 的协助了,下面直接放上 Dll 的代码,注意这里使用的是 MFC DLL...dll 自身实例句柄 hInst = AfxGetInstanceHandle(); // 获取调用 dll 的进程 ID DWORD dwPid = ::GetCurrentProcessId...(); // 获取调用 dll 的进程句柄 hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,0,dwPid); // 开始注入 Inject();...,此处为鼠标钩子 nCode, wParam, lParam ); } // 安装钩子 BOOL WINAPI StartHook(HWND hWnd) { // 获取鼠标所在的主窗口句柄...g_hWnd = hWnd; // 获取鼠标钩子句柄 hhk = ::SetWindowsHookEx( WH_MOUSE, // 钩子类型 MouseProc, // 指向回调函数的指针
要执行用户代码,在Windows中最常见的就是使用回调的方式,Windows采用的是事件驱动的方式,只要发生了某些事件就会调用回调,在众多使用回调的场景中,线程的回调是最简单的,它不会干扰到目标进程的正常执行...DLL注入中一般的思路是:使用CreateRemoteThread来在目标进程中创建一个远程的线程,这个线程主要是加载DLL到目标进程中,由于DLL在入口函数(DLLMain)中会处理进程加载Dll的事件...那么如何在远程进程中执行DLL的加载操作呢?...卸载的思路与注入的类似,只是函数变为了FreeLibrary,传入的参数变成了对应的dll的句柄了。 如何获取这个模块的句柄呢?我们可以枚举进程中的模块,根据模块的名称来找到对应的模块并获取它的句柄。...,并将结构体对应的数据写入到目标进程的内存中,特别要注意的是,里面不要使用指针或者句柄这种与地址有关的东西。
传入0表示使用默认大小(1MB)。 · 第三个参数 lpStartAddress 表示新线程所执行的线程函数地址,多个线程可以使用同一个函数地址。...调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的对象。它可以由进程的任何线程使用。...该数组可以包含不同类型对象的句柄。它可能不包含同一句柄的多个副本。 如果这些句柄之一在等待仍然挂起时关闭,则函数的行为是未定义的。 句柄必须具有SYNCHRONIZE访问权限。...事件对象 事件对象也属于内核对象,它包含以下三个成员: ● 使用计数; ● 用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值; ● 用于指明该事件处于已通知状态还是未通知状态的布尔值...退出关键代码段 VOID WINAPI LeaveCriticalSection( _Inout_ LPCRITICAL_SECTION lpCriticalSection); 线程使用完临界区所保护的资源之后
+ BUF_SIZE];//名字+消息 //循环接收来自于控制台的消息 while (1) { fgets(szMsg,BUF_SIZE,stdin);//从控制台中获取消息...成功调用一个创建内核对象的函数后,会返回一个句柄,它表示了所创建的内核对象,可由进程中的任何线程使用。在32位进程中,句柄是一个32位值,在64位进程中句柄是一个64位的值。...我们可使用唯一标识内核对象的句柄,调用内核操作函数对内核对象进行操作。...//访问上面已经调用close的线程1的内核对象,线程ID从创建线程1时获取。...**这个限制的条件(例如:几个人能同时从参观。)是由程序员来决定的。信号量限制可活动的线程数。 信号量类似于事件对象,同样有两个状态: 触发状态(有信号状态),表示有可用资源。
实现代码 0x00 IAT表的填写 在上一篇文章中,我们构造导入表的时候,将 IAT 表和 INT 表都指向的是函数名称所在的位置,然后在运行的时候,IAT 表中的内容会被替换成对应函数的地址,在调用的时候使用间接...首先操作系统会通过 Name 字段找到当前导入表的名字,然后调用 LoadLibrary 得到句柄,如果没有找到的话会提示找不到 dll 文件,报错情况如下 ?...我们使用MessageBox函数来举例,为了保证原来的函数不受影响,我们先将函数的地址保存下来,获得函数地址的方法就是前面所描述的过程 OldAddr = (int)GetProcAddress(LoadLibrary...; pImportDirectory = (PIMAGE_IMPORT_DESCRIPTOR)(ImageBase + (pDataDirectory + 1)->VirtualAddress); 在获取模块句柄以后...,把它赋值给了ImageBase变量,是因为所谓的模块句柄,实际上就是当前进程的起始位置,也就是在不考虑没有抢占到建议装载地址时候的基址。
从 LSASS 转储凭证并非新鲜事,多年来一直是攻击性和犯罪分子手法的一部分。...函数获取现有的 LSASS 打开句柄的副本。...有了 LSASS 打开的句柄,LetMeowIn 就可以转储 LSASS 的内容,从而从转储文件中提取凭据。...获取所有打开的句柄及其关联 PID 的列表。...通过在安全事件日志中搜索事件 ID 4608 来获取“lsass.exe”的进程 ID。 循环遍历列表中的每个句柄,搜索具有现有的 LSASS 打开句柄的进程。
多线程中的线程同步可以使用,CreateThread,CreateMutex 互斥锁实现线程同步,通过临界区实现线程同步,Semaphore 基于信号实现线程同步,CreateEvent 事件对象的同步...: 事件对象实现线程同步,与前面的临界区和互斥体有很大的不同,该方法下创建对象时,可以在自动non-signaled状态运行的auto-reset模式,当我们设置好我们需要的参数时,可以直接使用SetEvent...stdio.h> #include #define STR_LEN 100 // 存储全局字符串 static char str[STR_LEN]; // 设置事件句柄...NumberOfOthers, NULL, 0, NULL); fputs("Input string: ", stdout); fgets(str, STR_LEN, stdin); // 字符串读入完毕后,将事件句柄改为...其主要是线程函数中调用的参数会与下一个线程函数结构相冲突,解决的办法时在每次进入线程函数时,自己拷贝一份,每个人使用自己的那一份,才可以避免此类事件的发生,同时最好配合线程同步一起使用,如下时线程扫描器的部分代码片段
Section)(临界 资源是一次仅允许一个进程使用的共享资源)。...】 事件的主要用途是标志事件的发生,并以此协调线程的执行顺序。...用来通知线程有一些事件已发生,从而启动后继续任务的开始。 事件对象也可以通过通知操作方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。..., evFinish; DWORD WINAPI ReadThread(PVOID pParam) { // 当等待仍在挂起状态的时候,句柄被关闭 WaitForSingleObject...ReleaseSemaphore函数; SYNCHRONIZE 允许使用信号量同步。
关于AndroidQF AndroidQF,全称为Android快速取证(Android Quick Forensics)工具,这是一款便携式工具,可以帮助广大研究人员快速从目标Android设备中获取相关的信息安全取证数据...该工具基于Snoopdroid项目实现其功能,利用的是官方ADB源码,并且使用了Go语言进行重构。...AndroidQF旨在给广大研究人员提供一个简单且可移植的跨平台实用程序,以快速从Android设备获取信息安全取证数据。...工具下载 广大研究人员可以直接访问该项目的【Releases页面】下载获取最新版本的AndroidQF。...获取到加密的取证文件之后,我们可以使用下列方式进行解密: $ age --decrypt -i ~/path/to/privatekey.txt -o .zip .zip.age
WndProc 处理应用程序在发生事件时从 Windows 接收的消息,以下将会讲解 WndProc cbClsExtra 窗口类结构后的附加字节数,一般为0 cbWndExtra 窗口事例后的附加字数...光标的句柄:使用 LoadCursor 加载光标,以下讲解语法 lpszClassName: 类别名称的指针赋值为static TCHAR szWindowClass[] = _T("CSDN @1_...—————————————————————————————————— lpfnWndProc lpfnWndProc 为接收窗口处理的指针,使用 WndProc 处理应用程序在发生事件时从 Windows...这称为处理事件。 您只处理与应用程序相关的事件。WndProc 具有以下语法”;如下:。...hWnd:获取消息的的窗口句柄,文档中解释到:“如果hWnd为NULL,则GetMessage检索属于当前线程的任何窗口的消息,以及当前线程的消息队列中hwnd值为NULL的消息(请参阅MSG结构)。
hProcess是被注入进程的句柄。我们使用VirtualAllocEx在被注入进程中申请一块内存,注意这块内存是PAGE_READWRITE,因为我们要读写(不用执行)这块内存。...// 获取加载模块的句柄 HMODULE hLibModule = 0; // LoadLibrary的返回值就是这个句柄,所以GetExitCodeThread...于是我探索了下后一种方案,后一种方案引入一个问题:事件是什么样的?全局命名的事件?如果是全局命名的也太简单了,不讨论。没有名字的?是的,就是使用没有名字的非全局事件。...于是这儿又遇到一个问题:如何将这个句柄给远线程呢?现在抛出这个问题,下节我们会讲到使用ShellCode加载我们的DLL,调用DLL中的导出函数并传入参数。...bRun = FALSE; break; } // 获取加载模块的句柄
API函数 1.修改和获取标题 使用函数:SetConsoleTitleA,GetConsoleTitleA 原型: BOOL WINAPI SetConsoleTitleA( _In_ LPCTSTR...: SetConsoleWindowInfo,SetConsoleScreenBufferSize,还有一个常用函数GetStdHandle 关系: GetStdHandle:获取控制台的句柄(句柄可以理解为控制台的标志...,具体要哪种句柄,看实际需要 ); BOOL WINAPI SetConsoleWindowInfo( HANDLE hConsoleOutput, //标准输出句柄 BOOL bAbsolute...//包含光标信息的结构体 ); BOOL WINAPI SetConsoleCursorInfo( HANDLE hConsoleOutput, //标准输出句柄 CONSOLE_CURSOR_INFO...:SetConsoleTextAttribute 函数原型: BOOL WINAPI SetConsoleTextAttribute( HANDLE hConsoleOutput, //标准输出句柄 WORD