WindowsAPI编程核心技术-自启动技术
WindowsAPI编程核心技术-自启动技术注册表RegOpenKeyEx打开注册表键。
123456789101112LONG WINAPI RegOpenKeyEx( _In_ HKEY hKey, //这些键:HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOVAL_MACHINE HKEY_USERS HEY_CURRENT_CONFIG _In_opt_ LPCTSTR lpSubKey, //要打开键的名称 NULL则打开新的句柄由hKey决定 _In_ DWORD ulOptions, //保留 必须0 _In_ REGSAM samDesired, //希望得到的访问权限 自己去查 _Out_ PHKEY phkResult //打开注册表键的句柄)//成功返回ERROR_SUCCESS=0 否则返回WINERROR.h中非零值
RegSetValueEx设置指定值的数据或类型。
12345678910111213LONG WINAPI RegSetValueEx( ...
WindowsAPI编程核心技术-启动技术
WindowsAPI编程核心技术-启动技术创建进程WinExec运行指定的应用程序。
123456UINT WINAPI WinExec( _In_ LPCTSTR lpCmdLine, //要执行的应用程序命令行 _In_ UINT uCmdShow //显示选项 SW_HIDE隐藏窗口 SW_SHOWNORMAL激活)//成功返回值大于31 失败返回0系统内存资源不足、ERROR_BAD_FORMAT文件无效 ERROR_FILE_NOT_FOUND找不到指定文件 ERROR_PATH_NOT_FOUND找不到指定路径
ShellExecute运行一个外部程序或打开一个已注册的文件/目录或打印一个文件。
1234567891011121314HINSTANCE ShellExecute( _In_opt_ HWND hwnd, //父窗口句柄 _In_opt_ LPCTSTR lpOperation, //要执行的操作,sz类型,有edit explore find open print _In_ LPCTSTR l ...
WindowsAPI编程核心技术-注入技术
WindowsAPI编程核心技术-注入技术全局钩子注入全局钩子作用于整个系统的基于消息的应用,需要使用DLL文件。
SetWindowsHookEx将程序定义的钩子函数安装到挂钩链中。
12345678910HHOOK WINAPI SetWindowsHookEx( _In_ int idHook, //钩子程序的类型 具体可选参数自己查 _In_ HOOKPROC lpfn, //指向钩子程序的指针,当dwThreadId为0或指定由不同进程创建线程标识符,则lpfn必须指向DLL中钩子过程 否则可指向与当前进程关联的代码中的钩子过程 _In_ HINSTANCE hMod, //lpfn指向的钩子过程的DLL句柄 当dwThreadId指定由当前进程创建线程且钩子过程位于与当前进程关联的代码中时hMod必须为NULL _In_ DWORD dwThreadId //与钩子程序关联的线程标识符 为0时钩子过程与系统中所有线程相关联)//成功返回钩子过程的句柄 失败返回NULL
例子为了使DLL注入到所有进程中,需要设置WH_GETM ...
Windows内存攻击概览
Windows内存攻击概览栈溢出例如普通栈溢出:
1234567891011121314151617181920212223int __cdecl verify_password(char* Str1) { char Destination[8]; // [esp+4Ch] [ebp-Ch] BYREF int v3; // [esp+54h] [ebp-4h] v3 = strcmp(Str1, "1234567"); strcpy(Destination, Str1); return v3;};int __cdecl main(int argc, const char** argv, const char** envp) { FILE* Stream; // [esp+4Ch] [ebp-408h] char Str1[1024]; // [esp+50h] [ebp-404h] BYREF int v6; // [esp+450h] [ebp-4h] v6 = 0; Stream = fopen(&q ...
Windows堆溢出浅讲
Windows堆溢出浅讲堆表堆表分为空表free和快表lookaside组成。
空表free数组共有$128$项,每一项是个双向列表的下一项地址。free[1]链接了所有大小为$8$字节的堆块,free[2]链接大小为$16$字节的,以此类推到free[127]链接大小为$1016$字节的堆块。free[0]从小到大链接剩余的大于$1016$字节大小的堆块。
快表这玩意儿跟空表差不多,但每一项最多链接$4$个堆块,且都被设置为占用态,不能被合并。
堆块分配快表分配时必须精确分配。普通空表最优大小查找失败时会查找次优堆块。零号空表free[0]从大到小倒着找合适大小。
堆块合并小块大小小于$1\mathrm{KB}$,大块大小在$[1,512)\mathrm{KB}$之间,巨块在$512\mathrm{KB}$及以上。
小块分配:快表、普通空表、堆缓存、零号空表、内存紧缩、NULL
小块释放:快表、空表
大块分配:堆缓存、零号空表
大块释放:堆缓存、零号空表
巨快分配:虚分配
巨快释放:直接释放
堆结构这里使用HeapCreate创建堆,创建堆底层都为RtlAllocateHeap。调试 ...
WindowsAPI编程核心技术-基础扫盲
WindowsAPI编程核心技术-基础扫盲预备知识常见参数说明符前缀:
123456789101112b BOOL 布尔值g_ Global 全局的h Handle 句柄hwnd HWND类型i Integer 整数l Long 长整数lp Long-pointer 长指针n Short-int 短整型p Pointer 指针sz Zero-terminated-String 以0结尾的字符串u Unsigned-int 无符号整数w WORD 无符号短整数
常用参数类型:
1234567891011HWND 窗口句柄HINSTANCE 实例句柄HANDLE 句柄INT_PTR 约等于intLPARAM 不好说,一般传地址LPSTR 字符串指针LPTSTR 定义了_T宏的同上LPCTSTR 常量,同上UINT 32位无符号整型VOID 等于voidWPARAM 不好说,一般传各种参数
常用宏定义:
1234WINAPI/APIENTRY/CALLBACK __stdcall_In_ 输入参数,不会改变其值_In_opt_ 可选的输入参数,不会改变其值_Out_ 不关心本身内容,写入 ...
高级加密在逆向中初探
高级加密在逆向中初探笔记get_s_box_aes.c
12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio.h> int main(){ unsigned char sbox[256] = { 0xE3, 0xFD, 0xF5, 0x30, 0x50, 0xBD, 0x51, 0x70, 0x3D, 0x40, 0x16, 0x04, 0x4D, 0xB5, 0xC0, 0xA2,0x6D, 0xE2, 0x56, 0xC4, 0xA9, 0x54, 0x7F, 0x27, 0x66, 0x82, 0xD6, 0x68, 0xFB, 0x57, 0xCA, 0xC3,0x6F, 0xA4, 0xF0, 0xD5, 0x2A, 0xE8, 0xC1, 0x0A, 0x5E, 0x19, 0x79, 0x4B, 0x69, 0x45, 0xF1, 0xA7,0x87, 0x00, 0xD8, 0xDC, 0x ...
数模竞赛-图论模型
数模竞赛-图论模型NetworkX基本操作:
123456789101112131415161718import networkx#创建空对象G=networkx.Graph()G=networkx.DiGraph()G=networkx.MultiGraph()G=networkx.MultiDiGraph()#由邻接矩阵W创建图G=networkx.Graph(W)G=networkx.DiGraph(W)networkx.draw(G,pos=None,ax=None,**kwds) #G为要绘制的网格图 pos为表示位置坐标的字典数据,参数如下: #circular_layout 顶点在圆环上均匀分布 #random_layout 顶点在一个单位正方形内随机分布 #shell_layout 顶点在多个同心圆上分布 #spring_layout 用Fruchterman-Reingold算法排列顶点 #spectral_layout 根据图的拉普拉斯特征向量排列顶点
示例:
123456789101112import networkx,pyl ...
数模竞赛-非线性规划
数模竞赛-非线性规划这篇文章的Markdown我实在是修不好了…凑合着看吧。
基础概念记$\overrightarrow x=[x_1,x_2,\cdots,x_n]^{\mathrm T}$是$n$维欧几里德空间$\mathbb{R}^n$中的一个点。$f\left(\overrightarrow x\right),g_i\left(\overrightarrow x\right),i=1,2,\cdots,p,h_j\left(\overrightarrow x\right),j=1,2,\cdots,q$是定义在$\mathbb{R}^n$上的实值函数。
若$f\left(\overrightarrow x\right),g_i\left(\overrightarrow x\right),i=1,2,\cdots,p,h_j\left(\overrightarrow x\right),j=1,2,\cdots,q$至少有一个是$\overrightarrow x$的非线性函数,则称如下形式的数学模型为非线性规划模型的一般形式:
$ ...
数模竞赛-常微分方程与差分方程
数模竞赛-常微分方程与差分方程常见模型略。
常微分方程求解-符号解例题1:
求解$y^{‘}=-2y+2x^2+2x,y(0)=1$:
1234567import sympysympy.var('x')y=sympy.Function('y')eq=y(x).diff(x)+2*y(x)-2*x**2-2*xs=sympy.dsolve(eq,ics={y(0):1})s=sympy.simplify(s)print(s)
得$y=x^2+e^{-2x}$。
例题2:
求解$y^{‘’}-2y^{‘}+y=e^x,y(0)=1,y^{‘}(0)=-1$:
1234567import sympysympy.var('x')y=sympy.Function('y')eq=y(x).diff(x,2)-2*y(x).diff(x)+y(x)-sympy.exp(x)con={y(0):1,y(x).diff(x).subs ...