fasm x64汇编 hook createwindowexw改NoteCase Pro 的窗口辩题的汇编代码
本帖最后由 slzslz 于 2025-7-17 16:38 编辑方法生成DLL放入安装好的NoteCase Pro 的目录( 官网下载地址https://www.notecasepro.com/),点添加书签 ,可以看到窗口的标题改变名称了
无意搞涉及版权的事情,只是做本代码的功能性演示,需要加入破解什么程序的代码,可以加在hooked_CreateWindowExW:里面
format PE64 GUI DLL
entry DllMain;
use64;
include 'win64a.inc';
section '.text' code readable executable;'
macro apifix hMod,sz,fn;'
{
mov rdx, sz ; proc name
mov rcx, hMod ; hLib
call
mov qword, rax
};
; 修复导出的 API 地址
proc FixImport
local hModule:QWORD
local lpBuffer:QWORD
frame
invoke LocalAlloc, LPTR, MAX_PATH + 1
mov , rax
invoke GetSystemDirectory, rax, MAX_PATH
invoke strncat, , szTargetLibrary, MAX_PATH
invoke LoadLibrary,
mov , rax
invoke LocalFree,
apifix , szvSetDdrawflag, _vSetDdrawflag
apifix , szAlphaBlend, _AlphaBlend
apifix , szDllInitialize, _DllInitialize
apifix , szGradientFill, _GradientFill
apifix , szTransparentBlt, _TransparentBlt
endf;
ret
endp;
; 以下是关于HOOK的代码
; 安装钩子
install_hook:
; 获取CreateWindowExW地址
invoke GetModuleHandle, szUser32
test rax, rax
jz .fail
invoke GetProcAddress, rax, szCreateWindowExW
test rax, rax
jz .fail
mov , rax
; Save original bytes
mov rsi,
lea rdi,
mov rcx, 17
rep movsb
; 创建跳板函数
invoke VirtualAlloc, 0, 32, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
test rax, rax
jz .fail
mov , rax
; Copy original bytes to trampoline
mov rdi, rax
lea rsi,
mov rcx, 17
rep movsb
mov byte , 0x4c
; ; 添加跳回指令 (修正部分)
; 绝对跳转指令格式: FF 25 [目标地址]
mov byte , 0xFF ; JMP指令的第一部分
mov byte , 0x25 ; JMP指令的第二部分
mov dword , 0 ; 相对偏移(0表示RIP+0)
mov rax,
add rax, 17 ; 目标地址 = 原始地址 + 14
mov , rax ; 存储目标地址
subrax, 1
; 修改内存保护
invoke VirtualProtect, , 99, PAGE_EXECUTE_READWRITE, oldProtect
test eax, eax
jz .fail
; 写入跳转指令
mov rdi,
mov byte , 0xFF ; JMP
mov byte , 0x25
mov dword , 0
mov rax, hooked_CreateWindowExW
mov , rax
; 恢复内存保护
invoke VirtualProtect, , 14, , oldProtect
mov , 1
mov al, 1
ret
.fail:
xor al, al
ret
; 钩子处理函数 (完全堆栈平衡)
hooked_CreateWindowExW:
; 修改窗口标题
lea r8,
; 准备调用跳板函数
mov r10,
jmp r10
ret
; 以上是关于HOOK的代码
proc DllMain hinstDLL,fdwReason,lpvReserved
cmp rdx, DLL_PROCESS_ATTACH ; 进程加载DLL时
je .attach
cmp rdx, DLL_PROCESS_DETACH ; 进程卸载DLL时
je .detach
jmp .exit
.attach:
call FixImport ; 修复导出的 API 地址
call install_hook
jmp .exit
.detach:
.exit:
mov rax, 1 ; 表示成功
ret
endp
; 导出函数, 全是跳转
_exp_vSetDdrawflag: jmp [ _vSetDdrawflag ]
_exp_AlphaBlend: jmp [ _AlphaBlend ]
_exp_DllInitialize: jmp [ _DllInitialize ]
_exp_GradientFill: jmp [ _GradientFill ]
_exp_TransparentBlt: jmp [ _TransparentBlt ]
; 常数
section '.szdb' data readable;
szTargetLibrary db "\msimg32.dll",0
szvSetDdrawflagdb "vSetDdrawflag",0
szAlphaBlenddb "AlphaBlend",0
szDllInitializedb "DllInitialize",0
szGradientFilldb "GradientFill",0
szTransparentBltdb "TransparentBlt",0
; 跳转地址储存
section '.expw' data readable writeable;
_vSetDdrawflag dq ?
_AlphaBlend dq ?
_DllInitialize dq ?
_GradientFill dq ?
_TransparentBlt dq ?
section '.idata' import data readable writeable;
library kernel,'KERNEL32.DLL', \
msvc,'msvcrt.dll';
;
import kernel, \
VirtualProtect,'VirtualProtect', \
LocalAlloc,'LocalAlloc', \
OutputDebugStringW,'OutputDebugStringW' , \
VirtualAlloc, 'VirtualAlloc', \
LocalFree,'LocalFree', \
GetModuleHandle,'GetModuleHandleA', \
LoadLibrary,'LoadLibraryA', \
GetProcAddress,'GetProcAddress', \
GetModuleFileName,'GetModuleFileNameA', \
GetSystemDirectory,'GetSystemDirectoryA'; \
import msvc, \
strstr,'strstr',\
strncpy,'strncpy', \
strncat,'strncat'\
section '.edata' export data readable; \
export 'msimg32.dll',\
_exp_vSetDdrawflag,'vSetDdrawflag',\
_exp_AlphaBlend,'AlphaBlend',\
_exp_DllInitialize,'DllInitialize',\
_exp_GradientFill,'GradientFill',\
_exp_TransparentBlt,'TransparentBlt'
; 全局变量定义
section '.data' data readable writeable
; 其他变量
hookActive db 0
; 字符串常量
szUser32 db 'user32.dll',0
szCreateWindowExW db 'CreateWindowExW',0
szKernel32 db 'kernel32.dll',0
szVirtualProtect db 'VirtualProtect',0
szHookedTitle db 'hook sucess',0
; 钩子相关变量
originalCreateWindowExW dq ?
trampoline dq ?
oldProtect dq ?
; Original bytes storage
origBytes db 17 dup(?)
backupBytes db 17 dup(?)
感谢楼主分享! 谢谢大大的分享~! PYG有你更精彩! PYG有你更精彩!
页:
[1]