发新话题
打印

[转载]去除WinRamTurbo时间限制

[转载]去除WinRamTurbo时间限制

信息来源:看雪学院
文章作者:qduwg

题目:去除TotalControlPCversion2.0小组件的功能限制
运行平台:Windows95/98/98SE/ME.
软件功能:这是一款美国人写的小程序,让你调整/清理Windows95/98/98SE/ME,加速运行。提供了一个简单的界面,包含10个设置面板,定制你自己

的系统行为,添加/隐藏菜单,定制浏览器,修改系统或者驱动器图标,配置内存及关键设置,提高系统速度。另外还包括5个小组件:Sysclean系统垃

圾清理器;Shfix:删除无效快捷方式,Descol设置桌面颜色;Backsys文件和系统备份程序;Foldicons改变文件夹的图标。
使用工具:trw,ultraedit,W32DASM,Peid
破解目的:去除Sysclean系统垃圾清理器功能限制

引子:今天又装了这个小软件,看看是否有点文章做,结果真没有太大戏。这个软件是VB写的,没有加壳。主程序没有地方输入注册码。而且是在线注

册,但我不知从哪里下手,因为根本没有输入注册码的地方。我们来看看提供的小程序Sysclean系统垃圾清理器,实验了一下,查找垃圾很快,可是如

果想删除,立即弹出对话框告诉你,需要注册才可以使用这个功能。立即调出SOFTICE,下命令hwnd,找到句柄,比如xxxx,然后下bpxxxxxwm_destroy

,F5退出,结果死机,看来这个程序对SICE有防范,另外接着用OD加载,也是死机。用W32DASM加载OK。只好请来TRW了,按照上面所说,找对话框句柄

,然后下消息断点,F5退出,点击OK,被拦住。一次F11即可来到主程序空间,代码如下:
*ReferenceTo:MSVBVM60.rtcMsgBox,Ord:0253h
|
:00424905FF157C104000Calldwordptr[0040107C]
:0042490B8D4DA4leaecx,dwordptr[ebp-5C]//我们停在这里。查看前面是否有跳转指令可以跳过这个地方。
下面是前面的代码:
:0042484C0FBF053CD04200movsxeax,wordptr[0042D03C]
:0042485385C0testeax,eax
:004248550F84E5000000je00424940//我们可以找到这个地方,修改84->85。
:0042485BC745FC03000000mov[ebp-04],00000003
:00424862C7854CFFFFFF04000280movdwordptr[ebp+FFFFFF4C],80020004
:0042486CC78544FFFFFF0A000000movdwordptr[ebp+FFFFFF44],0000000A
:00424876C7855CFFFFFF04000280movdwordptr[ebp+FFFFFF5C],80020004
:00424880C78554FFFFFF0A000000movdwordptr[ebp+FFFFFF54],0000000A
:0042488AC7853CFFFFFFE8964000movdwordptr[ebp+FFFFFF3C],004096E8
:00424894C78534FFFFFF08000000movdwordptr[ebp+FFFFFF34],00000008
:0042489E8D9534FFFFFFleaedx,dwordptr[ebp+FFFFFF34]
:004248A48D8D64FFFFFFleaecx,dwordptr[ebp+FFFFFF64]

*ReferenceTo:MSVBVM60.__vbaVarDup,Ord:0000h
|
:004248AAFF15E4114000Calldwordptr[004011E4]
:004248B068DC954000push004095DC
:004248B5680C884000push0040880C

*ReferenceTo:MSVBVM60.__vbaStrCat,Ord:0000h
|
:004248BAFF1550104000Calldwordptr[00401050]
:004248C08BD0movedx,eax
:004248C28D4DA4leaecx,dwordptr[ebp-5C]

*ReferenceTo:MSVBVM60.__vbaStrMove,Ord:0000h
|
:004248C5FF1510124000Calldwordptr[00401210]
:004248CB50pusheax
:004248CC6870964000push00409670

*ReferenceTo:MSVBVM60.__vbaStrCat,Ord:0000h
|
:004248D1FF1550104000Calldwordptr[00401050]
:004248D789857CFFFFFFmovdwordptr[ebp+FFFFFF7C],eax
:004248DDC78574FFFFFF08000000movdwordptr[ebp+FFFFFF74],00000008
:004248E78D8D44FFFFFFleaecx,dwordptr[ebp+FFFFFF44]
:004248ED51pushecx
:004248EE8D9554FFFFFFleaedx,dwordptr[ebp+FFFFFF54]
:004248F452pushedx
:004248F58D8564FFFFFFleaeax,dwordptr[ebp+FFFFFF64]
:004248FB50pusheax
:004248FC6A30push00000030
:004248FE8D8D74FFFFFFleaecx,dwordptr[ebp+FFFFFF74]
:0042490451pushecx
========================================================
小结:这个程序太简单,功能也比较简单,去除限制也简单多了。修改这个地方后,设置的选项参数可以保存,可以轻松删除找到的垃圾文件。不再有

限制了。


qduwg

2006年1月14日完成。

********************************************************************************

题目:去除WinRamTurbo时间限制
软件功能:优化内存等。

工具:TRW,w32dasm,PEID,UltraEdit

引子:今天这是实验的又一个程序。结果是30天限制。没有注册码输入的地方,好象直接从其网站下载注册版的。拿PEID检查是

UPX0.89~1.02/1.05~1.24加壳,用UPX-d脱壳成功。是用BC++写的。这个软件对SOFTICE敏感,我只好用TRW了。把时间调快一个月,结果启动时先出现

一个SPLASH小窗口,显示版权信息,按OK后,接着出现第二个窗口提示过期,点OK则立即显示第三个大窗口,点OK结束。我们首先干掉第二个过期提示

框,用hwnd查看这个提示框的句柄,下断点bpxxxxxwm_destroy,按一次F11即可回到主程序内,来到这里。
1.先去掉第2个NAG。
004083F8|.7473JESHORTWINRAMTU.0040846D//这个可以跳过下面的CALL,74改为75.
004083FA|.33D2XOREDX,EDX
004083FC|.8B45D0MOVEAX,DWORDPTRSS:[EBP-30]
004083FF|.8B80F8020000MOVEAX,DWORDPTRDS:[EAX+2F8]
00408405|.E832F60400CALLWINRAMTU.00457A3C
0040840A|.6830024E00PUSHWINRAMTU.004E0230
0040840F|.8D9504FFFFFFLEAEDX,DWORDPTRSS:[EBP-FC]
00408415|.52PUSHEDX
00408416|.E8E9300B00CALLWINRAMTU.004BB504
0040841B|.83C408ADDESP,8
0040841E|.6A00PUSH0
00408420|.FF3584D24C00PUSHDWORDPTRDS:[4CD284]
00408426|.8D8D04FFFFFFLEAECX,DWORDPTRSS:[EBP-FC]
0040842C|.51PUSHECX
0040842D|.8B45D0MOVEAX,DWORDPTRSS:[EBP-30]
00408430|.E807BA0500CALLWINRAMTU.00463E3C
00408435|.50PUSHEAX
00408436|.E80DC30B00CALL//这个CALL出现过期提示。
0040843B|.8B45D0MOVEAX,DWORDPTRSS:[EBP-30]//我们停在这里。往前查看是否有地方跳过这里。
==========================================
2.重新启动,结果主界面出现了,但接着出现前面所说的第二个过期提示框。如果点OK,则退出。下bpxmessageboxa断点,重新启动程序,被拦住,按

F10来到这里。
00404F99|.E82E1D0100CALLWINRAMTU.00416CCC
00404F9E|.85C0TESTEAX,EAX
00404FA0|.7463JESHORTWINRAMTU.00405005//这个可以跳过下面的CALL。74改为75。
00404FA2|.6830024E00PUSHWINRAMTU.004E0230
00404FA7|.8D95C8FEFFFFLEAEDX,DWORDPTRSS:[EBP-138]
00404FAD|.52PUSHEDX
00404FAE|.E851650B00CALLWINRAMTU.004BB504
00404FB3|.83C408ADDESP,8
00404FB6|.6A00PUSH0
00404FB8|.FF3584D24C00PUSHDWORDPTRDS:[4CD284]
00404FBE|.8D8DC8FEFFFFLEAECX,DWORDPTRSS:[EBP-138]
00404FC4|.51PUSHECX
00404FC5|.8B45D0MOVEAX,DWORDPTRSS:[EBP-30]
00404FC8|.E86FEE0500CALLWINRAMTU.00463E3C
00404FCD|.50PUSHEAX
00404FCE|.E875F70B00CALL
00404FD3|.8B45D0MOVEAX,DWORDPTRSS:[EBP-30]//我们返回到此处,看前面哪个地方可以跳过这里。
==========================================
3.在退出程序的时候也有一个大NAG,而且软件作者故意让这个窗口出现在主程序窗口的后面,没有得到焦点,需要点击一下任务栏上的其他按钮,然后

再回来点击这个程序在任务栏上的按钮,才可以显示这个NAG,然后点击OK,退出程序。比较烦人的。现在我们就来把它拿掉好了。我也走了几个弯路,

最后才灵机一动,修改成功了。

首先是下断点的问题,用OD打开符号引用窗口,发现这个软件使用了MessageboxA和MessageBeep,我用这两个函数下断点不成功,换一个方法,点击退

出按钮,在这个NAG出现后用消息断点,我查看了句柄,使用了几个比较高级别的句柄下断点bpxxxxxwm_destroy,还是不成功,拦不住,接着来第三

个方法,用句柄下消息断点bpxxxxxwm_command,我以为点击窗口上的退出按钮时,可以被拦住,结果没有一点动静,更加激发了我非要搞掉它的信心

。继续琢磨了一会儿,突然灵机一动,我发现在这个软件内有一个函数EnableWindow,就用它下断点bpxEnableWindow,退出SOFTICE,启动程序,点击

退出按钮,OK!!被成功拦截到。随后我们按F10,一直来到如下代码处:

0044B557|.53PUSHEBX
0044B558|.E80B900700CALL
0044B55D|>83C8FFOREAX,FFFFFFFF//我们来到这里,上面这个CALL就是显示窗口的函数。
0044B560|.5BPOPEBX
0044B561|.5DPOPEBP
0044B562\.C20800RETN8
************
我们F10跟踪一直来到下面代码空间,关键地方就在下面了。
004512D3|.E890A2FFFFCALLWINRAMTU.0044B568
004512D8|.8945F4MOVDWORDPTRSS:[EBP-C],EAX//从前面代码可以逐步来到这里!
004512DB|.33D2XOREDX,EDX
004512DD|.55PUSHEBP
004512DE|.684C144500PUSHWINRAMTU.0045144C
004512E3|.64:FF32PUSHDWORDPTRFS:[EDX]
004512E6|.64:8922MOVDWORDPTRFS:[EDX],ESP
004512E9|.8B45FCMOVEAX,DWORDPTRSS:[EBP-4]
004512EC|.E83BFEFFFFCALLWINRAMTU.0045112C//这个CALL开始显示NAG的基本框架
004512F1|.33D2XOREDX,EDX
004512F3|.55PUSHEBP
004512F4|.68AB134500PUSHWINRAMTU.004513AB
004512F9|.64:FF32PUSHDWORDPTRFS:[EDX]
004512FC|.64:8922MOVDWORDPTRFS:[EDX],ESP
004512FF|.6A00PUSH0
00451301|.6A00PUSH0
00451303|.6800B00000PUSH0B000
00451308|.8B45FCMOVEAX,DWORDPTRSS:[EBP-4]
0045130B|.E82C2B0100CALLWINRAMTU.00463E3C
00451310|.50PUSHEAX
00451311|.E8B6340700CALL
00451316|.8B45FCMOVEAX,DWORDPTRSS:[EBP-4]
00451319|.33D2XOREDX,EDX
0045131B|.89902C020000MOVDWORDPTRDS:[EAX+22C],EDX
00451321|>8B03/MOVEAX,DWORDPTRDS:[EBX]//循环体开始,制造NAG。
00451323|.E8382D0000|CALLWINRAMTU.00454060
00451328|.8B03|MOVEAX,DWORDPTRDS:[EBX]
0045132A80B88400000000cmpbyteptr[eax+00000084],00//这行和下面这行可以做点文章的地方了。
00451331740Fje00451342//让这里跳到循环体后面即可。具体修改见后面。
00451333|.8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451336|.C7802C02000002000000|MOVDWORDPTRDS:[EAX+22C],2
00451340|.EB14|JMPSHORTWINRAMTU.00451356
00451342|>8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451345|.83B82C02000000|CMPDWORDPTRDS:[EAX+22C],0
0045134C|.7408|JESHORTWINRAMTU.00451356
0045134E|.8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451351|.E826FDFFFF|CALLWINRAMTU.0045107C
00451356|>8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451359|.8B802C020000|MOVEAX,DWORDPTRDS:[EAX+22C]
0045135F|.85C0|TESTEAX,EAX
00451361|.^74BE\JESHORTWINRAMTU.00451321//循环体结束。在这个循环体内一点一点地取窗口内容显示到前面的那

个NAG窗体内。现在就是要把这个循环体跳过去。
00451363|.8945F8MOVDWORDPTRSS:[EBP-8],EAX//上面循环体显示窗口结束,来到这里。等你按按钮。如果按OK按钮,

则EAX=1,则下面代码就是退出程序。还有一个purchase(购买)按钮,则EAX=2。
00451366|.6A00PUSH0
00451368|.6A00PUSH0
0045136A|.6801B00000PUSH0B001
0045136F|.8B45FCMOVEAX,DWORDPTRSS:[EBP-4]
00451372|.E8C52A0100CALLWINRAMTU.00463E3C
我在跟踪的时候注意到循环结束后,NAG出现,如果你点击OK,则重新被断下,来到00451363,EAX的值为1。所以,我们修改前面的跳转的时候,一定

记得给EAX赋值为1。因为后面的函数需要这个参数。所以前面的那个跳转指令修改成下面这个样子了:
0045132AB801000000MOVEAX,1
0045132F90NOP
0045133090NOP
00451331EB30JMPSHORTWINRAMTU.00451363
原来的程序代码指令空间刚好可以修改成新指令,绰绰有余啊!非常棒!立即用ULTRAEDIT修改吧!然后另行改名保存文件,以防你修改失败哟!!现在

启动程序运行,然后关闭,OK!没有NAG了,非常干脆利落的关掉了。
附一个失败方案:本来想从4512D8处把指令直接修改为JMP451359,同时451359和45135A处修改为MOVEAX,1,结果程序无法启动了,而且导致死机了

。我知道在4512D8到00451321之间的代码是必须的,不可以掠过去的。所以修改程序无法预见具体结果,必须实验再实验。
==========================================
4.现在已经启动已经没有问题了,不过在启动时还有一个小NAG,随着上面对最后一个大NAG的去除,我发现启动的时候第一个SPLASH版权窗口自动一闪

而过,不再停在那里等你按OK了。好生奇怪啊!这是修改的副产品!捎带把第一个也消除了。实属必然!!破解不是目的,知道如何破解才是重要的。

我觉得还是研究一下如何把它去掉。
用SOFTICELOADER加载程序,F10跟踪到下面004BFA87处出现版权信息窗口,下断点,然后再次加载程序,F5退出SOFTICE,被拦住在004BFA87处,F8

跟入,部分跟踪代码在后面。
004BFA81|.E83A450000CALL
004BFA86|.50PUSHEAX
004BFA87|.FF5618CALLDWORDPTRDS:[ESI+18]//这个CALL出那个SPLASH。:[ESI+18]的值为4012C0。
004BFA8A|.83C410ADDESP,10
004BFA8D|.50PUSHEAX
004BFA8E|.E8BDF4FFFFCALLWINRAMTU.004BEF50
004BFA93|.59POPECX
004BFA94|.EB21JMPSHORTWINRAMTU.004BFAB7
004BFA96|>8B15E8894E00MOVEDX,DWORDPTRDS:[4E89E8]
004BFA9C|.52PUSHEDX
004BFA9D|.8B0DE4894E00MOVECX,DWORDPTRDS:[4E89E4]
004BFAA3|.51PUSHECX
004BFAA4|.A1E0894E00MOVEAX,DWORDPTRDS:[4E89E0]
004BFAA9|.50PUSHEAX
004BFAAA|.FF5618CALLDWORDPTRDS:[ESI+18]//这个CALL出那个SPLASH。
004BFAAD|.83C40CADDESP,0C
我们F8跟入前面那个CALL,用F10沿着下面这个路径跟踪:
00401554.8B0D94E44D00MOVECX,DWORDPTRDS:[4DE494]
0040155A.8B01MOVEAX,DWORDPTRDS:[ECX]
0040155C.8B0D58E44D00MOVECX,DWORDPTRDS:[4DE458]
00401562.8B15749D4C00MOVEDX,DWORDPTRDS:[4C9D74]
00401568.E8072C0500CALLWINRAMTU.00454174//这个CALL用F8切入跟踪,F10则出现窗口。
0040156D.A194E44D00MOVEAX,DWORDPTRDS:[4DE494]
00401572.8B00MOVEAX,DWORDPTRDS:[EAX]
00401574.E87B2C0500CALLWINRAMTU.004541F4
00401579.66:C745C40000MOVWORDPTRSS:[EBP-3C],0
0040157F.EB1BJMPSHORTWINRAMTU.0040159C
******************
顺其自然,我们来到下面代码处:
0040FF13|.8B10MOVEDX,DWORDPTRDS:[EAX]
0040FF15|.A178E44D00MOVEAX,DWORDPTRDS:[4DE478]
0040FF1A|.8B08MOVECX,DWORDPTRDS:[EAX]
0040FF1C|.8B81D8020000MOVEAX,DWORDPTRDS:[ECX+2D8]
0040FF22|.E8B9E10400CALLWINRAMTU.0045E0E0
0040FF27|.FF4DECDECDWORDPTRSS:[EBP-14]
0040FF2A|.8D45FCLEAEAX,DWORDPTRSS:[EBP-4]
0040FF2D|.BA02000000MOVEDX,2
0040FF32|.E839390B00CALLWINRAMTU.004C3870
0040FF37|.8B0D78E44D00MOVECX,DWORDPTRDS:[4DE478]
0040FF3D|.8B01MOVEAX,DWORDPTRDS:[ECX]
0040FF3F|.8B10MOVEDX,DWORDPTRDS:[EAX]
0040FF41|.FF92CC000000CALLDWORDPTRDS:[EDX+CC]//这个CALL出现版权窗口,F8跟入。:[EDX+CC]的值为4511DC。这段代码其

实就是前面第3部分所述的代码段了。说明2个窗口都调用同样的一个函数啦!部分节选如下:
******************
004511DC/.55PUSHEBP
004511DD|.8BECMOVEBP,ESP
004511DF|.83C4E0ADDESP,-20
004511E2|.53PUSHEBX
004511E3|.56PUSHESI
004511E4|.33D2XOREDX,EDX
004511E6|.8955E0MOVDWORDPTRSS:[EBP-20],EDX
004511E9|.8945FCMOVDWORDPTRSS:[EBP-4],EAX
*省去260多行代码
004512D3|.E890A2FFFFCALLWINRAMTU.0044B568
004512D8|.8945F4MOVDWORDPTRSS:[EBP-C],EAX
004512DB|.33D2XOREDX,EDX
004512DD|.55PUSHEBP
004512DE|.684C144500PUSHWINRAMTU.0045144C
004512E3|.64:FF32PUSHDWORDPTRFS:[EDX]
004512E6|.64:8922MOVDWORDPTRFS:[EDX],ESP
004512E9|.8B45FCMOVEAX,DWORDPTRSS:[EBP-4]
004512EC|.E83BFEFFFFCALLWINRAMTU.0045112C//这个CALL出现版权窗口。同样关闭程序时的那个BIGNAG也调用这个函数

显示主框架,如前所述。
下面我给出另外一个简单的解决办法,就是把下面这个消息循环切断,不让它循环即可,最后两个NAG统统一闪即逝,根本影响不了什么了。:)
00451321|>8B03/MOVEAX,DWORDPTRDS:[EBX]
00451323|.E8382D0000|CALLWINRAMTU.00454060
00451328|.8B03|MOVEAX,DWORDPTRDS:[EBX]
0045132A80B88400000000CMPBYTEPTRDS:[EAX+84],0
00451331740FJESHORTWINRAMTU.00451342
00451333|.8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451336|.C7802C02000002000000|MOVDWORDPTRDS:[EAX+22C],2
00451340|.EB14|JMPSHORTWINRAMTU.00451356
00451342|>8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451345|.83B82C02000000|CMPDWORDPTRDS:[EAX+22C],0
0045134C|.7408|JESHORTWINRAMTU.00451356
0045134E|.8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451351|.E826FDFFFF|CALLWINRAMTU.0045107C
00451356|>8B45FC|MOVEAX,DWORDPTRSS:[EBP-4]
00451359|.8B802C020000|MOVEAX,DWORDPTRDS:[EAX+22C]
0045135F|.85C0|TESTEAX,EAX
00451361|.^74BE\JESHORTWINRAMTU.00451321//只改动半个字节即可,74->75,OK。循环链条被切断,程序继续往下

走,看它还显示NAG骚扰我们。嘿嘿!:)收工!休息!
==========================================
后记:我忙里偷闲终于把这个东西搞定了,现在运行起来真是清爽怡人啊!赶紧写出破文,分享我的快乐吧!当然能够带给你小小的经验和启发,那真

是求之不得的事情了!最近看到许多热心大侠关注我的教程,也许他们从中收获了点什么,也是给我最大的安慰和鼓励,自己的辛苦算不了什么了!激

励我写完一个还想下一个!再次感谢各位CRACKER道路上的盟友们!!同时也感谢看雪论坛各位高手的文章!你们的文章就是我们进步的阶梯!!
我也是在向高手层次冲击的一个“敢死队员”。希望我们的目标早日实现!!

这个软件功能一般,但是搞了那么多的NAG,烦煞人也!不除掉不为快!!:)不过有点小遗憾,因为版权NAG和退出时的NAG及主窗口都共享同一段代码

,通过消息传递实现窗口显示,所以牵一发而动全身。上面的修改虽然去掉了NAG,但是同时也使得2个按钮功能失效,幸亏这2个按钮的功能不重要,去

掉也就去掉也。:)本来想搞个注册码算法分析,结果没有收获,却收获了上面这些东西。也算不错啦!!进步也需要时间和经验!慢慢来!高手不是

一天铸就的,长城不是一天垒起的!

TOP

发新话题