Eric
发表于 2023-2-17 15:59
本帖最后由 Icpower 于 2023-2-17 16:03 编辑
MessageBoxA = __get_pointer (__get_handle (“user32.dll”), “MessageBoxA”)
BlankAddress = 申请空内存 (-1, 1024, )
HookData = 取钩子代码 (MessageBoxA, BlankAddress, 0)
HookCode = "汇编代码或转接子程序" + 指针到字节集 (MessageBoxA, 5)
HookCode = HookCode + 取钩子代码 (BlankAddress + 取字节集长度 (HookCode), MessageBoxA + 5, 0)
Memory.写字节集 (Pid, BlankAddress, HookCode)
Memory.写字节集 (Pid, MessageBoxA, HookData)
汇编可以直接判断寄存器指定位置 cmp dword ptr ss:,特征
DavidLiu
发表于 2023-2-17 16:31
Icpower 发表于 2023-2-17 15:59
MessageBoxA = __get_pointer (__get_handle (“user32.dll”), “MessageBoxA”)
BlankAddress = 申请空 ...
收到!卧槽,牛啊!谢谢您了。
老师我好好研究一下,按照您的思路我来写代码试一试。
涛涛
发表于 2023-2-17 17:44
.版本 2
.子程序 hook信息框, 逻辑型, 公开
.参数 参数_进程ID
.局部变量 hModule
.局部变量 FARPROC
.局部变量 OldProtect
.局部变量 hProcess
.局部变量 NumberOfBytesWritten
hProcess = OpenProcess (2035711, 0, 参数_进程ID)
hModule = LoadLibrary (“user32.dll”)
.如果真 (hModule = 0)
返回 (假)
.如果真结束
FARPROC = GetProcAddress (hModule, “MessageBoxA”)
.如果真 (FARPROC = 0)
返回 (假)
.如果真结束
.如果真 (VirtualProtectEx (hProcess, FARPROC, 4, 64, OldProtect) = 假)
返回 (假)
.如果真结束
.如果真 (WriteProcessMemory (hProcess, FARPROC, { 194, 16, 0, 144 }, 4, NumberOfBytesWritten) = 假)
返回 (假)
.如果真结束
.如果真 (NumberOfBytesWritten ≠ 4)
返回 (假)
.如果真结束
VirtualProtectEx (hProcess, FARPROC, 4, OldProtect, 0)
FARPROC = GetProcAddress (hModule, “MessageBoxW”)
.如果真 (FARPROC = 0)
返回 (假)
.如果真结束
.如果真 (VirtualProtectEx (hProcess, FARPROC, 4, 64, OldProtect) = 假)
返回 (假)
.如果真结束
.如果真 (WriteProcessMemory (hProcess, FARPROC, { 194, 16, 0, 144 }, 4, NumberOfBytesWritten) = 假)
返回 (假)
.如果真结束
.如果真 (NumberOfBytesWritten ≠ 4)
返回 (假)
.如果真结束
VirtualProtectEx (hProcess, FARPROC, 4, OldProtect, 0)
返回 (真)
DavidLiu
发表于 2023-2-17 18:12
涛涛 发表于 2023-2-17 17:44
.版本 2
.子程序 hook信息框, 逻辑型, 公开
涛哥,牛的!
这应该是直接调用API编程,用的底层DLL函数,可不是封装的类。
赞啊!!!
涛哥我晚上好好研究一下,谢谢您的回复。强的
boot
发表于 2023-2-17 18:12
可以通过汇编语句实现:判断eip的值。如果是断在“计算”的按钮段首,此时就打掉信息框;如果是断在“信息框A”或“信息框B”的按钮段首,就恢复信息框。
DavidLiu
发表于 2023-2-17 18:15
boot 发表于 2023-2-17 18:12
可以通过汇编语句实现:判断eip的值。如果是断在“计算”的按钮段首,此时就打掉信息框;如果是断在“信息 ...
感谢老师的分享!我感觉这个思路是可行的!!!
直接写汇编我还不太行,晚上我尝试尝试先写代码试一试看看能不能突破
boot
发表于 2023-2-17 20:48
DavidLiu 发表于 2023-2-17 18:15
感谢老师的分享!我感觉这个思路是可行的!!!
直接写汇编我还不太行,晚上我尝试尝试先写代码试一试看 ...
@DavidLiu
经过测试,我的这种思路完全可行。现在给你现成的解决方案:
;;;;;;;;这一行是注释,并非补丁: 00401650 >83EC 64 sub esp, 0x64 ; 总 信息框 段首
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;需要先Hook CreateWindowExW
;;;;;;;;下面是补丁,总共需要补丁四处:
<004010DC>
jmp 00480390 ; 计算按钮事件段首
nop
nop
nop
nop
<00401004>
jmp 004803A8 ; 用户代码段开始 信息框A 按钮事件段首
<00401059>
jmp 004803C1 ; 信息框B 按钮事件段首
<00480390>
mov dword ptr , 0x539090C3
push ebp
mov ebp, esp
sub esp, 0x24
jmp 004010E5
nop
add byte ptr , al
mov dword ptr , 0x5364EC83
push ebp
mov ebp, esp
jmp 00401010
jmp 00401009
add byte ptr , al
mov dword ptr , 0x5364EC83
push ebp
mov ebp, esp
jmp 00401065
jmp 0040105E
nop
boot
发表于 2023-2-17 20:50
DavidLiu 发表于 2023-2-17 18:15
感谢老师的分享!我感觉这个思路是可行的!!!
直接写汇编我还不太行,晚上我尝试尝试先写代码试一试看 ...
@DavidLiu 经过测试,我的这种思路完全可行。解决方案在这里:
https://versteckt.lanzouw.com/ienLk0nw1j0b
DavidLiu
发表于 2023-2-17 21:12
boot 发表于 2023-2-17 20:50
@DavidLiu 经过测试,我的这种思路完全可行。解决方案在这里:
https://versteckt.lanzouw.com/ienLk0nw ...
赞!!!我去试一下,这是直接写的汇编啊
DavidLiu
发表于 2023-2-18 08:54
boot 发表于 2023-2-18 01:15
根据上面的结果,编译了一份补丁,生成的补丁在这里:
https://versteckt.lanzouw.com/iIC3h0nwovub
亲测有效果!!!
非常完美和精准的解题,赞!