欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

在主程序中发送退出消息然后在消息循环中退出的程序如何破解 (3千字)

在主程序中发送退出消息然后在消息循环中退出的程序如何破解 (3千字)

在主程序中发送退出消息然后在消息循环中退出的程序如何破解

现在很多程序,如果没有软件狗,或时间过期,在运行中途就自动退出,常规的教学都是让拦或用W32dasm查找 exitprocess函数,但当拦到这个函数已经退出主程序了,作用不大,其实还有一条好用的,这就是bpx postquitmessage下面以我破解得不完全的黎之工资为例说明:
上次我破的程序不完全,时间超过2001年后,打印功能失效。即然是与时间相关我就下bpx getlocaltime按报表打印拦到后按F12后到下面:(记不清几次了)
:0051D2D9 E98A65EEFF              jmp 00403868
:0051D2DE EBF0                    jmp 0051D2D0
:0051D2E0 8B45D4                  mov eax, dword ptr [ebp-2C]
:0051D2E3 8B55DC                  mov edx, dword ptr [ebp-24]
:0051D2E6 E8916EEEFF              call 0040417C
:0051D2EB 730D                    jnb 0051D2FA
:0051D2ED 8B45D8                  mov eax, dword ptr [ebp-28]
:0051D2F0 8B55E0                  mov edx, dword ptr [ebp-20]
:0051D2F3 E8846EEEFF              call 0040417C
:0051D2F8 7249                    jb 0051D343          //将这里改为JMP 
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0051D2EB(C)
|
:0051D2FA A164225200              mov eax, dword ptr [00522264]
:0051D2FF 8B00                    mov eax, dword ptr [eax]
:0051D301 8B4074                  mov eax, dword ptr [eax+74]
:0051D304 8B4024                  mov eax, dword ptr [eax+24]
:0051D307 BA0C000000              mov edx, 0000000C
:0051D30C E823ADF4FF              call 00468034
:0051D311 8D5584                  lea edx, dword ptr [ebp-7C]
:0051D314 8B08                    mov ecx, dword ptr [eax]
:0051D316 FF5158                  call [ecx+58]
在softice环境中再按数次F12打印界面出现了,但一按F5程序自动退出了。
别急,打印界面能出现说明前面的判断是对的,后面还有比较,现在是解决程序退出问题
首先改好0051d2f8处,然后bpx postquitmessage
拦到后按F12到下面
* Referenced by a CALL at Addresses:
|:0044F1C3  , :0048E4BE  , :0048E53B  , :0048E5A4  , :004B6DC0 
|:004B7347  , :0050EFEC  , :0051D0EF  , :0051D599 
|
:00452BE4 E88BB6FBFF              call 0040E274
:00452BE9 84C0                    test al, al
:00452BEB 7407                    je 00452BF4
:00452BED 6A00                    push 00000000
* Reference To: user32.PostQuitMessage, Ord:0000h
                                  |
:00452BEF E86455FBFF              Call 00408158  //就是这里让程序退出
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00452BEB(C)
|
:00452BF4 C3                      ret
总于让我抓住狐狸的尾巴了,现在的关键是让这条psostquitmessage指令不运行
如果单纯的改上面的00452BEB 让其JMP的话程序是能运行了,但是退不出去了,现在是要知道是什么地方调用这段过程,临时在00452beb处设断,拦到后用r fl z让其不运行psostquitmessage按F10到这里:
:0050EFCC D805A4F05000            fadd dword ptr [0050F0A4]
:0050EFD2 DB7DF0                  fstp tbyte ptr [ebp-10]
:0050EFD5 9B                      wait
:0050EFD6 E8F5C0EFFF              call 0040B0D0
:0050EFDB DB6DF0                  fld tbyte ptr [ebp-10]
:0050EFDE DED9                    fcompp
:0050EFE0 DFE0                    fstsw ax
:0050EFE2 9E                      sahf
:0050EFE3 730C                    jnb 0050EFF1
:0050EFE5 A120225200              mov eax, dword ptr [00522220]
:0050EFEA 8B00                    mov eax, dword ptr [eax]
:0050EFEC E8F33BF4FF              call 00452BE4    //原来就是在这里调用的
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0050EFAE(C), :0050EFE3(C)
到此当然知道去改什么地方去了将0050EFE3 处改为JMP,我也跟着Jump了,不知这次是否改全了?大家试试看。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功