Win32汇编学习笔记07.筛选器异常

news/2025/1/8 21:39:44/文章来源:https://www.cnblogs.com/weiyuanzhang/p/18660652

Win32汇编学习笔记07.筛选器异常-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net

钢琴

od调试老师给的多媒体钢琴

img

运行找到Piano的过程函数里去

img

找到处理WM_KEYDOWN消息的那

img

下个断点,然后按键断下来在这

img

  • 分析上图汇编代码:mov eax,dword ptr [ebp+10] 拿wParma
  • lea ecx,dword ptr [eax-41] ,41的ASSCII为A,这里应该是判断是哪个按键做准备
  • cmp ecx,19 19h->25,0~25为26个数,对应26个字母
  • ja imm 大于则不是字母按键,跳出
  • 发出声音功能的函数应该是下面的call <jnp.&oiano_dll.fun_lpayOneSound>
  • 然后我们观察该函数,分析其为C调用约定,传入一个参数,push eax
  • img
  • 该函数参数eax的来源是上面的wParma

我们去写一个win32程序去测试一下

RasAsm创建工程MyPiano

img

相应地方:;=============包起来的是后加入的代码

586
.model flat,stdcall
option casemap:noneinclude windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName db "MainWinClass",0AppName  db "Main Window",0g_szPianoDll db "piano_dll",0g_szPlayOneSound db "fun_playOneSound",0g_pfnPlayOneSound dd 0g_hPianoDll dd 0.data?hInstance HINSTANCE ?CommandLine LPSTR ?.code; ---------------------------------------------------------------------------start:;=============invoke LoadLibrary,offset g_szPianoDllmov g_hPianoDll,eaxinvoke GetProcAddress,g_hPianoDll,offset g_szPlayOneSoundmov g_pfnPlayOneSound,eax;=============invoke GetModuleHandle, NULLmov    hInstance,eaxinvoke GetCommandLinemov    CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov   wc.cbSize,SIZEOF WNDCLASSEXmov   wc.style, CS_HREDRAW or CS_VREDRAWmov   wc.lpfnWndProc, OFFSET WndProcmov   wc.cbClsExtra,NULLmov   wc.cbWndExtra,NULLpush  hInstancepop   wc.hInstancemov   wc.hbrBackground,COLOR_BTNFACE+1mov   wc.lpszMenuName,NULLmov   wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov   wc.hIcon,eaxmov   wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov   wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov   hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.WHILE TRUEinvoke GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.ENDWmov     eax,msg.wParamret
WinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM.IF uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.ELSEIF uMsg==WM_CREATE.elseif uMsg==WM_KEYDOWN;=============push wParamcall g_pfnPlayOneSoundadd esp,4 ;============= .ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParam	ret.ENDIFxor eax,eaxret
WndProc endpend start

但是我们发现无论是注入asm和刚刚的这个,都无法让钢琴发出声音,我们在换成 WM_KEYUP和 WM_KEYCHAR 结果跟 WM_KEYDOWN 一样 因此我们打开dll看看其导出函数(之前分析那个函数的所在dll)

img

猜想可能有所谓的播放环境,可能需要调用其它函数相辅相成

比如需要先调用fun_Create,可能调用时机比较早,我们直接用od调式去对应dll查看名称找该函数。

img

查看参考

img

发现只有一个地方式函数调用,我们直接去看看

img

发现WM_CREATE就调用了,果然如此

因此回到我们的MyPiano的工程中加入对应的,注意要将对应dll及其它可能用到文件都拷贝到工程目录下

值得注意的是fun_Create有一个参数,在上图看出来参数来自esi,可追溯其来源

然后修改为:

.586
.model flat,stdcall
option casemap:noneinclude windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName db "MainWinClass",0AppName  db "Main Window",0g_szPianoDll db "piano_dll",0g_szPlayOneSound db "fun_playOneSound",0g_szfun_Create db "fun_Create",0g_pfnPlayOneSound dd 0g_pnfun_Create dd 0g_hPianoDll dd 0.data?hInstance HINSTANCE ?CommandLine LPSTR ?.code; ---------------------------------------------------------------------------start:;=============invoke LoadLibrary,offset g_szPianoDllmov g_hPianoDll,eaxinvoke GetProcAddress,g_hPianoDll,offset g_szPlayOneSoundmov g_pfnPlayOneSound,eaxinvoke GetProcAddress,g_hPianoDll,offset g_szfun_Createmov g_pnfun_Create,eax;=============invoke GetModuleHandle, NULLmov    hInstance,eaxinvoke GetCommandLinemov    CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDmov   wc.cbSize,SIZEOF WNDCLASSEXmov   wc.style, CS_HREDRAW or CS_VREDRAWmov   wc.lpfnWndProc, OFFSET WndProcmov   wc.cbClsExtra,NULLmov   wc.cbWndExtra,NULLpush  hInstancepop   wc.hInstancemov   wc.hbrBackground,COLOR_BTNFACE+1mov   wc.lpszMenuName,NULLmov   wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov   wc.hIcon,eaxmov   wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov   wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov   hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.WHILE TRUEinvoke GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.ENDWmov     eax,msg.wParamret
WinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM.IF uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.ELSEIF uMsg==WM_CREATEpush hWndcall g_pnfun_Createadd esp,4.elseif uMsg==WM_KEYDOWN;=============push wParamcall g_pfnPlayOneSoundadd esp,4 ;============= .ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParam	ret.ENDIFxor eax,eaxret
WndProc endpend start
  • 接下来探究这个钢琴如何触发使用曲子,即那些文本文件所记录的曲子

去od找读文件相关操作

右键反汇编窗口,选择字符串查找,该软件需要用unicode查找才可

img

下面这个玩意非常可疑

img

选中回车到对应位置

img

插入od功介绍:选中 call 一行右击转到

可以看到调用这个函数的地方

img

  • img

思路回到打开文件对应函数上

img

点击其中一个转到对应调用处

img

再起上面那个push再来转到

img

转到的是下面这个jmp,然后再看sub又是哪里跳过来的呢?

img转到下面所示的jg 另外一个mov ecx,dword ptr [ebp+10]是commad消息!!!img

我们猜测这里应该有拿资源id的操作

利用vs:文件->打开->文件

img

选择该exe

img

情况如下

img

点开快捷键查看

img

32772->对应上面我们怀疑是拿资源id那个立即数的8004h,十分巧合?

再去回想之前的转到那

img

去8004h对应要走的地方去下断点,ctrl+K测试

img

断点果然下来了

但是并没有播放音乐,我们通过断点处往下走观察发现仅仅只是读了数据而已。

我们可以看它把读的东西放到哪里去了。

再去看文件读写那

img

有用到了全局变量,往它那些如东西,如果别的地方要用到,肯定也要访问全局变量。

如何看那些地方用到了对应的全局变量?选中,右键->查找参考->地址参考

img

那么只要用到了该全局变量的地方都列举出来了

img

我们一个个找对应的读操作里面的情况,找到此处有循环,值得注意一下了!!!

img

看看它从哪里来的

img

img

img

转到这个jnz,发现还是KeyDown消息触发。又有一个全局变量,去看看它

img

img

只有一个1,那么就进去看看

img

来自于8003,32771h ctrl+j

总结:

  • crtl+num 读文件
  • ctrl+j 开启 在右上角画一个点
  • ctrl+k 关闭 取消右上角画的点
  • 按任意键即可播放文件曲子
.586
.model flat,stdcall
option casemap:noneinclude windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName     db "MainWinClass",0AppName       db "Main Window",0g_szDll       db "piano_dll.dll",0        ;要加载的 dllg_szPlay      db "fun_playOneSound",0     ;要加在的dll中函数(播放音乐)g_szCreate    db "fun_Create", 0          ;要加在的dll中函数(初始化)g_pfnCreate   dd 0                        ;函数地址g_pfnPlay     dd 0                        ;函数地址.data?hInstance HINSTANCE ?                     ;CommandLine LPSTR   ?                     ;.code; ---------------------------------------------------------------------------start:invoke GetModuleHandle, NULLmov    hInstance,eaxinvoke GetCommandLinemov    CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDLOCAL hDll:HANDLE         ;dll句柄invoke LoadLibrary, offset g_szDll     ;动态加载dllmov hDll, eax                          ;保存dll句柄invoke GetProcAddress,eax, offset g_szPlay      ;获取函数地址mov g_pfnPlay, eax                              ;保存函数地址invoke GetProcAddress, hDll, offset g_szCreate  ;获取函数地址mov g_pfnCreate, eax                            ;保存函数地址mov   wc.cbSize,SIZEOF WNDCLASSEXmov   wc.style, CS_HREDRAW or CS_VREDRAWmov   wc.lpfnWndProc, OFFSET WndProcmov   wc.cbClsExtra,NULLmov   wc.cbWndExtra,NULLpush  hInstancepop   wc.hInstancemov   wc.hbrBackground,COLOR_BTNFACE+1mov   wc.lpszMenuName,NULLmov   wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov   wc.hIcon,eaxmov   wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov   wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov   hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.WHILE TRUEinvoke GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.ENDWmov     eax,msg.wParamret
WinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM.IF uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.ELSEIF uMsg==WM_CREATEpush hWnd          ;窗口句柄入栈call g_pfnCreate   ;调用播放初始化函数 (c调用约定)add esp, 4         ;自己平栈.elseif uMsg == WM_KEYDOWNpush wParam        ;按下的字符入栈 call g_pfnPlay     ;调用播放音乐函数 (c调用约定)add esp, 4         ;自己平栈.ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParam	ret.ENDIFxor eax,eaxret
WndProc endpend start

筛选器异常

操作系统有个机制,他会把异常通告给我们应用程序,让我们应用程序来处理,异常机制 windows 系统提供了3种,筛选器异常,SEH 结构化异常,veh 向量异常

筛选器异常是一种最终的异常处理方式,当异常发生时,我们可以在程序启动时,我们可以给程序注册一个异常回调函数当异常发生时,系统就会调这个异常函数,让我们有一次处理的机会.

如果我们要处理筛选器异常哦们需要自己写一个处理的函数,然后把这个函数注册到给操作系统,这样操作系统就知道你要处理筛选器,如果没有注册,那么系统默认不处理筛选器异常

异常派发流程

处于调试状态的派发流程

异常出现时,系统首先给 调试器,调试器不处理的话给 应用程序,,应用程序给 SEH, SEH不处理,会再给调试器,调试器不处理优惠给应用程序,应用程序此时会给筛选器,  筛选器也不处理就直接给操作系统了,操作系统此时必须处理,操作系统处理方式就是关闭程序 ,

处于非调试状态的派发流程

异常出现时,系统首先给  SEH, SEH不处理,就会给筛选器,筛选器也不处理就直接给操作系统了,操作系统此时必须处理,操作系统处理方式就是关闭程序

筛选器是最后一次应用程序处理异常的机会,因此被称为最终异常

注册筛选器 SetUnhandledExceptionFilter

LPTOP LEVEL EXCEPTION FILTER SETUNHANDLEDEXCEPTIONFILTER(

LPTOPLEVELEXCEPTIONFILTER

LPTOP LEVEL EXCEPTION FILTER

image.png

参数 : 函数指针 : 自己注册的函数函数指针 返回值 函数指针: 之前注册的函数指针

声明

LONG SetUnhandledExceptionFilter( STRUCT _EXCEPTION_POINTERS *ExceptionInfo );

结构体 EXCEPTION_POINTERS

image.png

第一个成员: 异常记录 (异常信息)

第二个成员: 环境记录 (寄存器环境)

异常记录: EXCEPTION_RECORD

image.png

成员: 异常码 (异常种类)

标志(不用管)
异常嵌套 (处理异常过程中出现了异常)
异常产生的地址 (EIP)
产生异常的: 参数数量
异常发生时的操作, 0 是 读  1是写 ,第二个是访问异常的地址(意思是你读或写哪个地址时发生了异常)
.586
.model flat,stdcall
option casemap:noneinclude windows.incinclude user32.incinclude kernel32.incincludelib user32.libincludelib kernel32.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.datag_szTitle db "提示",0g_szText  db "异常来了",0.data?hInstance HINSTANCE ?CommandLine LPSTR ?.code;异常回调函数     参数:结构体指针
MyUnhandledExceptionFilter proc pExceptPointer:ptr EXCEPTION_POINTERSinvoke MessageBox, NULL, offset g_szText, offset g_szTitle, MB_OK;--------搭配  EXCEPTION_CONTINUE_EXECUTION,不然无法退出程序---------------;---继续执行,即从56行继续执行,又报异常继续回到56行异常处,导致死循环,因此需要跳过56行代码   mov esi, pExceptPointer              ;获取出现异常的地址assume esi:ptr EXCEPTION_POINTERS    ;地址类型类型强转mov esi, [esi].ContextRecord  ;获取出现异常环境记录assume esi:ptr CONTEXT        ;地址类型类型强转add [esi].regEip, 2           ;跳过出现异常的代码,异常代码地址+2assume esi:nothing            ;还原类型;-----------------------------;mov eax, EXCEPTION_EXECUTE_HANDLER;    - 异常已处理,结束进程;mov eax, EXCEPTION_CONTINUE_EXECUTION; -异常已经处理,可以继续执行代码mov eax, EXCEPTION_CONTINUE_SEARCH;     - 异常我不处理,交给系统处理,跟第一种区别不大ret
MyUnhandledExceptionFilter endpstart:;注册异常回调函数invoke SetUnhandledExceptionFilter,offset MyUnhandledExceptionFiltermov eax, 1212hmov [eax], eax    ;因为1212属于不可访问地址,因此会出现异常 invoke MessageBox, NULL, offset g_szText, offset g_szTitle, MB_OKinvoke ExitProcess,0
end start

img

作业

1. 带作弊功能的钢琴

大键盘1是开启

大键盘2是关闭

大键盘3是读取文件

先读取文件 然后再开启。

.586
.model flat,stdcall
option casemap:noneinclude windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
include msvcrt.inc
include shlwapi.incincludelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib
includelib msvcrt.lib
includelib shlwapi.libWinMain proto :DWORD,:DWORD,:DWORD,:DWORD.dataClassName db "MainWinClass",0AppName  db "Main Window",0g_szDll db "piano_dll.dll",0g_szPlay db "fun_playOneSound",0g_szCreate db "fun_Create", 0g_pfnCreate dd 0g_pfnPlay dd 0g_TestCut dd 0g_TestOpenWin  db "打开成功", 0g_TestCloseWin  db "关闭成功", 0g_TestFmt db"1.txt",0g_wFileCode        dd  0  g_szFileMode       db  "r", 0g_FileTest         db 255 dup(0),0g_TestChar db 0g_TestBuf  db 0g_TestFlag  db 0.data?hInstance HINSTANCE ?CommandLine LPSTR ?.codestart:invoke GetModuleHandle, NULLmov    hInstance,eaxinvoke GetCommandLinemov    CommandLine,eaxinvoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULTinvoke ExitProcess,eaxWinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORDLOCAL wc:WNDCLASSEXLOCAL msg:MSGLOCAL hwnd:HWNDLOCAL hDll:HANDLEinvoke LoadLibrary, offset g_szDllmov hDll, eaxinvoke GetProcAddress,eax, offset g_szPlaymov g_pfnPlay, eaxinvoke GetProcAddress, hDll, offset g_szCreatemov g_pfnCreate, eaxmov   wc.cbSize,SIZEOF WNDCLASSEXmov   wc.style, CS_HREDRAW or CS_VREDRAWmov   wc.lpfnWndProc, OFFSET WndProcmov   wc.cbClsExtra,NULLmov   wc.cbWndExtra,NULLpush  hInstancepop   wc.hInstancemov   wc.hbrBackground,COLOR_BTNFACE+1mov   wc.lpszMenuName,NULLmov   wc.lpszClassName,OFFSET ClassNameinvoke LoadIcon,NULL,IDI_APPLICATIONmov   wc.hIcon,eaxmov   wc.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmov   wc.hCursor,eaxinvoke RegisterClassEx, addr wcINVOKE CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\hInst,NULLmov   hwnd,eaxinvoke ShowWindow, hwnd,SW_SHOWNORMALinvoke UpdateWindow, hwnd.WHILE TRUEinvoke GetMessage, ADDR msg,NULL,0,0.BREAK .IF (!eax)invoke TranslateMessage, ADDR msginvoke DispatchMessage, ADDR msg.ENDWmov     eax,msg.wParamret
WinMain endpWndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM.IF uMsg==WM_DESTROYinvoke PostQuitMessage,NULL.ELSEIF uMsg==WM_CREATEpush hWndcall g_pfnCreateadd esp, 4.elseif uMsg == WM_KEYDOWNlea eax,g_TestFlag.if word ptr[eax] == 0.if wParam =="1"invoke MessageBox,NULL,NULL,offset g_TestOpenWin,MB_OK  lea eax,g_TestFlagmov word ptr[eax],1  .elseif wParam == "2"invoke MessageBox,NULL,NULL,offset g_TestCloseWin,MB_OKlea eax,g_TestFlagmov word ptr[eax],0.elseif wParam == "3";载入文件 ;打开文件invoke crt_fopen,offset g_TestFmt,offset g_szFileModemov g_wFileCode,eax;读文件invoke crt_fgets,offset g_FileTest,255, g_wFileCode.else   push wParamcall g_pfnPlayadd esp, 4 .endif .else.if wParam != "2" lea ebx,  g_FileTestmov wParam, ebx push wParamcall g_pfnPlayadd esp, 4 .elseinvoke MessageBox,NULL,NULL,offset g_TestCloseWin,MB_OKlea eax,g_TestFlagmov word ptr[eax],0.endif .endif  .ELSEinvoke DefWindowProc,hWnd,uMsg,wParam,lParam	ret.ENDIFxor eax,eaxret
WndProc endpend start
  1. 在筛选器异常处理中dump程序 MiniDumpWrite

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/866097.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure RP 10 for Mac v10.0.0.3924原型设计软件 中文

Axure RP 10 for Mac v10.0.0.3924原型设计软件 中文 Axure RP 10 for Mac,是一个专业的原型设计和线框图工具,广泛应用于用户体验设计(UX)和用户界面设计(UI)领域,为设计师、产品经理、开发人员提供了强大的功能,帮助其在项目早期阶段快速创建互动原型和详细的设计文档…

EndNote 21 for Mac v21.5 文献管理软件安装

EndNote 21 for Mac v21.5 文献管理软件安装 EndNote for mac,是一款文献管理软件,支持国际期刊的参考文献格式有3776种,写作模板几百种,涵盖各个领域的杂志。EndNote mac不仅仅局限于投稿论文的写作,对于研究生毕业论文的写作也会起到很好的助手作用。

BurpSuite实操之漏洞扫描

一、BurpSuite的常见功能仪表盘:仪表盘,扫描启动、暂停,用于显示任务、日志信息等目标:设置工作的目标范围(URL),以及报文过滤、报文展示等功能代理:拦截HTTP/S请求的代理服务器,作为web浏览器与服务器的中间人,允许拦截、修改数据流测试器:入侵功能,对web应用程序进…

Python在多个Excel文件中找出缺失数据行数多的文件

本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内、某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法~本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个…

【模拟电子技术】02-PN结的形成

【模拟电子技术】02-PN结的形成半导体就是导电能力介于导体和半导体之间的东西, 本征半导体即纯净的半导体。导电靠自由电子,可看到自由电子即使是本征激发也少,导电能力也不够。自由电子撞在空穴中,就是复合(与本征激发相反),两者发生的频率决定着载流子的浓度,其实是…

【字符串排序】C#和前端js排序问题

前言 前端请求时做了个参数验证,就是简单的计算md5,但是与后端计算的结果始终不一致 发现是前后端对字符串排序的默认规则有区别 测试代码 前端 1、示例代码,可以在浏览器的控制台中直接运行e=["","你","1","a","d",&quo…

C# 调用YoloSharp.Gpu,调用Microsoft.ML.OnnxRuntime.Gpu出错126

今天使用C#调用YoloSharp.Gpu,加载onnx模型,然后检测,代码很简单。 // Load the YOLO predictor predictor ??= new YoloPredictor(@"path to your.onnx");// Run model var result = predictor.Detect(@"path to your image");一运行就爆错ONNXRunti…

charls 安卓apk抓包证书配置

一:证书制作 将证书保存到本地:charles.pem OpenSSL签发证书制作: 安装openssl方法 打开网址,https://slproweb.com/products/Win32OpenSSL.html openssl x509 -subject_hash_old -in d:\CA\charles.pem修改文件 2bd25718.0(后缀名为0)二:证书导入 模拟器设置可写入 …

第十九次作业

1、安装fortify并以pikachu靶场为目标进行练习熟练使用fortify 安装安装后复制fortify-common-23.2.0.0023: 将fortify-common-23.2.0.0023.jar⽂件分别将下⾯路径的⽂件覆盖 C:\Program Files\Fortify\Fortify_Apps_and_Tools_23.2.0\Core\lib C:\Program Files\Fortify\Fort…

mongodb windows zip安装并服务自启动

1.下载并解压。2.新建文件/文件夹 data/db 目录 logs/mongod.log 文件 conf/mongod.conf 文件 3.编辑conf/mongod.conf文件 systemLog:destination: filelogAppend: truepath: F:/mongodb-win32-x86_64-windows-6.0.20-rc3/logs/mongod.logstorage:dbPath: F:/mongodb-win32-x…

Linux通过端口找到对应的服务

首先执行netstat -tulnp | grep <端口号>例如:netstat -tulnp | grep :80参数解释:-t: 显示 TCP 连接(只显示TCP协议的端口信息)。 -u: 显示 UDP 连接(只显示UDP协议的端口信息)。 -l: 显示正在监听(Listening)状态的端口(只显示处于监听状态的端口)。 -n: 以数…

2025新春源码免费送

我们常常在日常生活中感到时间过得异常缓慢,仿佛未来遥不可及。然而,当我们回过头去审视过去,才发现时间早已悄然溜走,许多曾经等待的日子已经过去。时间总是在不经意间流逝,让人意识到它的宝贵和不可逆转。 尽管如此,我们依然应对未来保持从容的态度。生活充满了无数的可…