- 博客(13)
- 收藏
- 关注
原创 SEH一异常处理
fun含4个参数,只说下1和3就行,其中第一参数是个异常结构体指针,第3叁数是个context结构体指针。可以通过改写context结构体中的EIP改变程序执行流程。第一叁数里记录了异常原因和导常地址等,第三叁数记录了寄存器数据。由于栈地址由高往低增长,所以fun先x栈,temp后入栈。前2行即构成一个异常结构,第3行定义了我们自己的异常。b:设置了相关api系统异常,正常运行会调用自己定义系统弄常,调试则。异常通过链表连接+和处理异常的函数,处理异常。调用系统的异常函数,其中系统会调用系统异常。
2023-12-20 16:48:48
296
1
原创 PEB一进程环境块
里面存的_PEB_LDR_DATA结构体指针。其中该结构中有_LIST_ENTRY结构(是个双向链表,连接process中所有加载dll)。即:GetModuleHandle传入NULL返回的地址。相关api:IsDebugPresent();进程通过该字段可查到加载到该进程中dll的信息。这个偏移里面存ImageBase(进程)该字段在调试进程时可能会出现特定信息。FS:【30】十2中存放该标志。检测是否调试,0假,1真。
2023-12-20 14:28:04
344
1
原创 TEB一线程环境块
TEB结构复杂,主介绍TID结构体和F标为30的成员,以及通过EFL寄存器访问TEB成员。TEB以一个TID结构体开始,其中存放的是导常表结构地址。即:FS:【0】=point to seh(指针)2.TEB【18】即TID.self。1.TEB【0】即TID.异常。
2023-12-20 13:51:31
359
1
原创 TLS-线程本地储存
在找出的rva内存地址中是包含6个dword的结构体,其中第4个是函数地址的指针(是个VA地址,以imagebase为基准),最后通过这个VA地址读出里面保存的函数址址(如:401000)。和DllMain类似,tls回调函数由系统调用。编写汇编的tls回调函数需return 0xc(3个参数要清栈)。DataDirectory[9]中第1个DWORD下图这结构的RVA ,2.调试器开始调试前须把调试事件设置于tls处。3.PE中查tls回调函数。TLS-线程本地储存。
2023-12-11 10:01:47
36
1
原创 调试器(DebugActiveProcess注意)
干完坏事后再Sleep(0),再次没置int3断点。(sleep会释放当前时间片,让被调试程度执行会,再还回当前函数,继续促发int3断点,从而又促发异常事件)(注意:ebp十8不是第1个叁数,因为push ebp 和move ebp,esp未执行,ebp还在上一函数)首先恢复0xcc为最初值。通过esp可访问堆栈中数据,如esp+8是第丨个叁数。1.调试器附加促发调试进程事件,随便hook个函数,设置0xcc断点。2.oxcc断点促发异常事件,
2023-11-15 09:28:11
102
原创 Dll注入3:代码注入debug版注意点
1.由于所有函数都由jmp跳转,导致通过函数名获取的不是代码首地址。(vs中查看函数名,其中显示符号地址才是首地址)2.关闭C运行库检测。
2023-11-15 09:12:44
37
原创 windows宏消息总结
在switch中写宏处理,实际处理过程放外面,并且switch中的宏处理要写得像c++重载函数。3.由1的宏转换导致各种不同宏,而各种不同转换结果导致不同的fn函数,从而导致2可编写许多。1.把HAND_MSG(message ,fn)转化为各类宏(编写一次)hand_msg(wm_paint.onpaint)转化为。HAND_MSG(WM_SIZE,onsize)转换为。由于hand_wm_size(fn)替代为fn(…1.统一宏函数HAND_MSG(
2023-11-02 17:50:46
27
原创 Dll注入2(CreateRemoteThread)
2.用VirtualAlloc ,WriteProcessMemory ,Virtual protect 写入数据(dll名字)到目标进程。原理:用此函数注入dll需将待注入函数过程和所需叁数注入到目标进程,再调用Createremotethread.注:由于LoadLibrary所有进程不变,故函数过程不需注入目标进程,只需数据注入。但如果待注入过程是自己编写,则过程和数据都要注入目标进程(即代码注入)。3.调用CreateRemoteThread。
2023-11-02 10:55:58
35
原创 Dll注入1(SetWindowsHookEx)
3.假设钩子代码在dll内,调用方调用dll中hook函数注入目标程序,会导致在dll中的回调函数注入到目标程序。由于hook函数和hook用的回调函数在dll中,从而导致dll注入到目标进程。2.既然应用程序要执行钩子,再继续执行,这就要求钩子必须在本程序内或dll内(dll类可共亨代码)。2.dll中编写hookA中SetWindowHookEx需要的回调。1:dll中编写hookA函数和hookB卸载函数。4.调用dll中hookA函数。3.dllmain中写功能。3.获取hookA函数。
2023-11-02 10:41:26
45
原创 window宏笔记
其中1个消息 执行 SetWindowLongPtr((hwnd), DWLP_MSGRESULT, (LPARAM)(LRESULT)(result)), TRUE) 直接设置函数的返回值为TRUE。(LRESULT)(DWORD)(UINT)(BOOL)(Dlg_OnInitDialog)((hwnd), (HWND)(wParam), lParam) //变成一个函数了。//msg==其中1个消息 执行 (BOOL)(result) 其中result是个函数指针。
2023-07-23 16:42:38
73
原创 c++同一个程序打开N个实例,共享同一变量
*//个人猜想:如果是dll中有共享变量,只要是调用了这个dll程序都共享这个变量;实际szTemp[100]这个变量被所有打开的共享,一个改变,其它的都改变。下面的代码放入vs中,程序打开个实例,
2023-07-21 20:25:39
109
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人