呵呵,明显是自校验和自删除技术嘛
我最讨厌这样做了,痛心啊。~~~连个提示警告都没有~~~恶心
原程序字节大小:466934字节
脱壳后未优化:1643008字节
下断点:可以直接在命令栏里输入“BP MSVBVM60.rtcFileLen”好了没?好了就F9吧,断在这里:
7346E967 > 55 push ebp
7346E968 8BEC mov ebp, esp
7346E96A 81EC 40010000 sub esp, 140
7346E970 8D85 C0FEFFFF lea eax, dword ptr [ebp-140]
7346E976 50 push eax
CTRL+F9返回到上一级,可以看到:
00569127 FF15 C8124000 call dword ptr [<&MSVBVM60.rtcFileLen>; MSVBVM60.rtcFileLen
而且EAX显示:00191200 即十进制的 1643008 (字节)
哼哼,明显是调用vb里面:filelen()函数来获取程序大小的嘛
接下来一步步F8,小心点,不要错按F9哦
00568F95 50 push eax
00568F96 FF15 C8124000 call dword ptr [<&MSVBVM60.rtcFileLen>; MSVBVM60.rtcFileLen 获取大小
00568F9C 8945 BC mov dword ptr [ebp-44], eax
00568F9F BE 03000000 mov esi, 3
00568FA4 8975 B4 mov dword ptr [ebp-4C], esi
00568FA7 56 push esi
00568FA8 8D4D B4 lea ecx, dword ptr [ebp-4C]
00568FAB 51 push ecx
00568FAC 8D55 A4 lea edx, dword ptr [ebp-5C]
00568FAF 52 push edx
00568FB0 FF15 24134000 call dword ptr [<&MSVBVM60.rtcLeftCha>; MSVBVM60.rtcLeftCharVar 这个东西这里是取获取大小结果的前面三位,这里即为:164
00568FB6 C785 6CFFFFFF D>mov dword ptr [ebp-94], 1D2————这个玩意转成十进制:466嘛,即原文件大小的前三位
接下来开始变形运算比较了:(具体怎么算毫无意义,不去理会)
00568FC0 89B5 64FFFFFF mov dword ptr [ebp-9C], esi
00568FC6 8D45 A4 lea eax, dword ptr [ebp-5C]
00568FC9 50 push eax
00568FCA 8D8D 64FFFFFF lea ecx, dword ptr [ebp-9C]
00568FD0 51 push ecx
00568FD1 8D55 94 lea edx, dword ptr [ebp-6C]
00568FD4 52 push edx
00568FD5 FF15 CC104000 call dword ptr [<&MSVBVM60.__vbaVarXo>; MSVBVM60.__vbaVarXor XOR运算
00568FDB 50 push eax
00568FDC FF15 84104000 call dword ptr [<&MSVBVM60.__vbaBoolE>; MSVBVM60.__vbaBoolErrVar BOOL量
00568FE2 8BF0 mov esi, eax
00568FE4 8D45 A4 lea eax, dword ptr [ebp-5C]
00568FE7 50 push eax
00568FE8 8D4D B4 lea ecx, dword ptr [ebp-4C]
00568FEB 51 push ecx
00568FEC 6A 02 push 2
00568FEE FF15 40104000 call dword ptr [<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
00568FF4 83C4 0C add esp, 0C
00568FF7 66:3BF3 cmp si, bx ————关键比较
00568FFA 0F84 BE030000 je 005693BE ; 改必须跳走——关键自校验跳
00569000 8B45 08 mov eax, dword ptr [ebp+8]
00569003 8B10 mov edx, dword ptr [eax]
00569005 8D4D B4 lea ecx, dword ptr [ebp-4C]
00569008 51 push ecx
00569009 50 push eax
0056900A FF52 6C call dword ptr [edx+6C]
0056900D 8D4D B4 lea ecx, dword ptr [ebp-4C]
00569010 FF15 20104000 call dword ptr [<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVar
00569016 E9 A3030000 jmp 005693BE
看来只要将这里改成必须跳走就完成了(后面的检测文件大小不是自校验部分了,真正的跳走就在这里了)
00568FFA 0F84 BE030000 je 005693BE 改成:——————————————————第一处
00568FFA /E9 BF030000 jmp 005693BE ; 改必须跳走
00568FFF |90 nop
还没完,测试发现还有时不时自校验~~~~郁闷,再等等,马上补充好
下面这些地方同样要改必须跳走的。而且程序名称不要改动,依照原样。烦恼啊
怎么找到的?呵呵,方法跟上面一样,只是多留个心眼。小心为妙。
004E9B82 /74 06 je short 004E9B8A ; 这里必须改成跳走——————第二处
00569083 /0F84 35030000 je 005693BE ; 这里改成必须跳走——————第三处
005691D9 /0F84 DF010000 je 005693BE ;这里改成必须跳走——————第四处
00569286 /0F84 32010000 je 005693BE ;这里改成必须跳走——————第五处
0056930F /0F84 A9000000 je 005693BE ;这里改成必须跳走——————第六处
0056965B /0F84 BD020000 je 0056991E ;这里改成必须跳走——————第七处
005696F5 /0F84 23020000 je 0056991E ;这里改成必须跳走——————第八处
005697F3 /0F84 25010000 je 0056991E ;这里改成必须跳走——————第九处
00569879 /0F84 9F000000 je 0056991E ;这里改成必须跳走——————第十处
005698FF /74 1D je short 0056991E ;这里改成必须跳走——————第十一处
00564DAF /74 06 je short 00564DB7 ;这里改成必须跳走——————第十二处
呵呵,我再看看,还有的暗桩的话再改。。。郁闷都被放倒了三次了。。。
本来想破出注册码写注册机的,可是我是在网吧:
碰到了这样一个情况:
没办法啊~~哈哈~~我先试着怎样突破网吧严密封锁来到系统管理员模式下来破~~呵呵,不行,
就爆破掉,改改标志,反正也没什么功能限制和时间限制。。。说实话,这个软件是我这些天
碰到的最好的一个,最漂亮~~~喜欢它
如果你们要破解的方法的话就断点断在这,一定没问题的,看得出程序是重启验证的了
004E678D 8B45 CC mov eax, dword ptr [ebp-34] ; 取假注册码
004E6790 50 push eax
004E6791 FF15 68104000 call dword ptr [<&MSVBVM60.rtcTrimBst>; 去掉前后多余空格
004E6797 8BD0 mov edx, eax
004E6799 8D4D C8 lea ecx, dword ptr [ebp-38]
004E679C FF15 30134000 call dword ptr [<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
004E68A3 8B45 C8 mov eax, dword ptr [ebp-38] ; 取假注册码
004E68A6 50 push eax
004E68A7 8B35 34104000 mov esi, dword ptr [<&MSVBVM60.__vba>; MSVBVM60.__vbaLenBstr
004E68AD FFD6 call esi ; 取假注册码的长度,这里9位
004E68AF 33DB xor ebx, ebx
004E68B1 83F8 03 cmp eax, 3
呵呵,这些地方都是很好玩的
004E68B1 83F8 03 cmp eax, 3 ; 3位以上
004E68B4 0F9CC3 setl bl
004E68B7 F7DB neg ebx
004E68B9 8B4D CC mov ecx, dword ptr [ebp-34] ; 获取用户名
004E68BC 51 push ecx
004E68BD FFD6 call esi ; 取用户名长度
004E68BF 33D2 xor edx, edx
004E68C1 83F8 02 cmp eax, 2 ; 2位以上
004E68C4 0F9CC2 setl dl
004E68C7 F7DA neg edx
004E68C9 23DA and ebx, edx
004E68CB 8D45 C8 lea eax, dword ptr [ebp-38]
004E68CE 50 push eax
004E68CF 8D4D CC lea ecx, dword ptr [ebp-34] ; 装载用户名
.
.
.
由于我的系统权限问题和机器码问题,下面的分析是没什么意义了.直接修改了未注册标记,我就将就着用一会儿,呵呵...反正也没功能和时间限制,听说会时不时地提示"未注册",我等了很久都没有看到,如果你们谁看到的就告诉我一下,最好把截图传给我,我好解除这个
恼人的骚扰信息.
刚才用着又被放倒了,分析的结果是:暗桩太多了,还有很长时间的定时自校验,可以肯定不是通过FILELEN函数的,莫非是什么CRC或者MD5?郁闷,我来点干脆的,直接把“call dword ptr [edx+6C]”给NOP了,一共NOP了29次,郁闷啊,看来还真阴险。
这样就不怕关机威胁了,可以放心得分析和调试去了。呵呵,自校验被废掉了,但是程序出了个问题了:数字形式的时钟打不开了,我先把这个版本发上来,等有时间了再剔除BUG。或者等下班后回家用自己的电脑来解出注册码,这样就完美了。。。期待,这款软件越看越喜欢了
真的好有特点,好漂亮好逼真~~~有决心端掉它~~~大家一起研究
另外作者很可能利用了CALL ESI来替换了传统的跳转