欢迎来到 嗅灵易学

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

另一途径——不许增加。 (1千字)

另一途径——不许增加。 (1千字)

它的过期限制不是什么试用30天之类的,而是记录运行总时间并限制它不能超过一小时。所以在什么GETSYSTEMTIME、GETLOCALTIME、GETFILETIME等函数上下断点都对其无效(因为它根本就没用到),何况它自身是被WINAMP定时频繁调用的,WINAMP会把时间信息作为参数传递给它,因此它内部也不用什么GETTICKCOUNT之类的函数。——这种插件分析起来的难点就是难以找到时间递增代码,时间的比较代码倒是好几处,查出错信息就能找到,只是数量多(其实也不多,才四五个吧),难免挂一漏万,还是跳过时间递增代码比较保险。
倒霉的就是这种判断运算等全是浮点指令,不懂就只有猜,耽搁了不少时间。另外WINAMP在关闭时会通过这个插件把已经运行的时间秒数写入注册表,而且其值是浮点四字节格式,名称又是什么PARAM,很容易迷惑人。其实了解它的限制原理后,用BPM断点就能很快找到这段代码:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10002860(C)
|
:1000286A D905BC940110            fld dword ptr [100194BC]
:10002870 D81D08400110            fcomp dword ptr [10014008]
//[10014008]处是浮点数3600,也就是一小时。
:10002876 DFE0                    fstsw ax
:10002878 F6C401                  test ah, 01
:1000287B 7508                    jne 10002885    
//把这句话修改成JNE 10002897,也就是把7508改成751A。
:1000287D 8B4510                  mov eax, dword ptr [ebp+10]
:10002880 E934050000              jmp 10002DB9
就是下面这里增加时间计数:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:1000287B(C)
|
:10002885 DB4510                  fild dword ptr [ebp+10]
:10002888 DA751C                  ffidiv dword ptr [ebp+1C]
:1000288B D805BC940110            fadd dword ptr [100194BC]
:10002891 D915BC940110            fst dword ptr [100194BC]        //增加的时间计数写回[100194BC]
:10002897 D81D08400110            fcomp dword ptr [10014008]        //让其直接跳到此处,也就是不增加时间计数了。
:1000289D DFE0                    fstsw ax
:1000289F F6C401                  test ah, 01
:100028A2 7515                    jne 100028B9
至于NAG窗口,DEMO字串等的消除,我也懒得去跟了。——DEMO字串消除也就查找字串换成空格就行。

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

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

0 0 0 举报
复制成功