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



亲测有效果!!!
非常完美和精准的解题,赞!
页: 1 [2] 3
查看完整版本: E程序如何巧妙地去除信息框弹窗?