好友
阅读权限40
听众
最后登录1970-1-1
|
ps520
发表于 2010-10-4 23:37
Luck的博客:http://luck.syser.org/
原帖地址:http://luck.syser.org/post-5.html
------------------------------------------------
OD加载后搜索字符串,程序比较干净,没多大功夫找到几处check.
00410460 /7E 11 jle short 00410473
00410462 |68 600A5600 push 00560A60 ; 加速啦!友好提示\n\n免费用户不能选择vip 专用服务\n\n器组!欢迎您充值成为我们的付\n\n费vip用户,享受尊贵的vip服务\n\n
00410467 |8BCB mov ecx, ebx
00410469 |E8 8245FFFF call 004049F0
0041046E |E9 500C0000 jmp 004110C3
00410473 \8D4D 50 lea ecx, dword ptr [ebp+50]
00410476 FF15 78885500 call dword ptr [<&MFC80.#310>] ; MFC80.#310
0041047C 8D4D 5C lea ecx, dword ptr [ebp+5C]
修改:00410460 /EB 11 jmp short 00410473
VIP线路限制解除。
然而这个软件比较麻烦的是,它是通过列表框来选择的,而在打开“设置”的同时会SendMessage,如果不是
VIP就会设置列表框、按钮属性为禁止使用,所以需要修改2处代码来过VIP限制选择时的限制。
同样是字符串:
抱歉,测试用户暂不能选择vip节点,是否升级到vip?
双击进入代码地址,不要直接改,我们从事件头跟起或许有新发现:
004155E0 6A FF push -1
004155E2 68 6CE15300 push 0053E16C
004155E7 64:A1 00000000 mov eax, dword ptr fs:[0]
004155ED 50 push eax
004155EE 83EC 3C sub esp, 3C
004155F1 53 push ebx
004155F2 55 push ebp
004155F3 56 push esi
004155F4 57 push edi
004155F5 A1 5C485A00 mov eax, dword ptr [5A485C]
004155FA 33C4 xor eax, esp
004155FC 50 push eax
004155FD 8D4424 50 lea eax, dword ptr [esp+50]
00415601 64:A3 00000000 mov dword ptr fs:[0], eax
00415607 8BF1 mov esi, ecx
下断004155E0
切回主界面后点按钮,疯狂地石头啊~~~
00415615 /0F84 A1000000 je 004156BC
0041561B |8B86 FC000000 mov eax, dword ptr [esi+FC]
00415621 |8B2D CC935500 mov ebp, dword ptr [<&USER32.SendMes>; USER32.SendMessageA
00415627 |6A 02 push 2
00415629 |6A FF push -1
0041562B |68 0C100000 push 100C
00415630 |50 push eax
00415631 |FFD5 call ebp
jmp实现了。看到下面就是SendMessage,想到限制,不觉一惊。它是默认属性为禁止使用,然后按钮
点下时check,如果是正式用户就SendMessage解锁。
继续下走:
00415638 /0F84 39010000 je 00415777
0041563E |8B96 FC000000 mov edx, dword ptr [esi+FC]
00415644 |8D4C24 1C lea ecx, dword ptr [esp+1C]
无极神跳,跳了以后打死别想解锁了。这里需要Nop。
修改:00415638 /0F84 39010000 je 00415777 'Nop,不过默认会通过
004156BA /EB 05 jmp short 004156C1
004156BC |BD 01000000 mov ebp, 1
004156C1 \399E D4000000 cmp dword ptr [esi+D4], ebx
004156C7 0F85 AA000000 jnz 00415777
004156CD 68 30095600 push 00560930 ; http://www.jiasu.la/pay.html
004156D2 8D4C24 68 lea ecx, dword ptr [esp+68]
004156D6 FF15 50835500 call dword ptr [<&MFC80.#304>] ; MFC80.#6734
004156DC 6A 04 push 4
无极神跳,不跳就永远不给解锁。
这里跳比较合适,基本这里跳了就除掉VIP选择时的限制了。(不过得双击线路)
004156C7 0F85 AA000000 jnz 00415777 'jmp掉
修改:004156C7 /E9 AB000000 jmp 00415777
那个按钮不能点其实解决很简单:用灰色按钮突破,点一下就OK.
既然大家对按钮比较感兴趣,来讲讲怎么过按钮吧:
因为check是否为test,然后加限制。所以搜索test字符串。
第一次停刚才那列表,无视;
第二次来到按钮点下的事件。
004158A0 6A FF push -1
004158A2 68 DAE15300 push 0053E1DA
004158A7 64:A1 00000000 mov eax, dword ptr fs:[0]
004158AD 50 push eax
004158AE 83EC 0C sub esp, 0C
004158B1 53 push ebx
004158B2 56 push esi
004158B3 57 push edi
004158B4 A1 5C485A00 mov eax, dword ptr [5A485C]
004158B9 33C4 xor eax, esp
004158BB 50 push eax
004158BC 8D4424 1C lea eax, dword ptr [esp+1C]
004158C0 64:A3 00000000 mov dword ptr fs:[0], eax
004158C6 8BF1 mov esi, ecx
004158C8 6A 04 push 4
004158CA 8D4424 1C lea eax, dword ptr [esp+1C]
004158CE 8DBE D8000000 lea edi, dword ptr [esi+D8]
004158D4 33DB xor ebx, ebx
004158D6 50 push eax
004158D7 8BCF mov ecx, edi
004158D9 895C24 1C mov dword ptr [esp+1C], ebx
004158DD FF15 3C845500 call dword ptr [<&MFC80.#3997>] ; MFC80.#3997
004158E3 68 CC015600 push 005601CC ; test
004158E8 8BC8 mov ecx, eax
004158EA 895C24 28 mov dword ptr [esp+28], ebx
004158EE C74424 18 01000>mov dword ptr [esp+18], 1
004158F6 FF15 78835500 call dword ptr [<&MFC80.#1482>] ; MFC80.#1482
004158FC 85C0 test eax, eax
004158FE 75 12 jnz short 00415912
00415900 8BCF mov ecx, edi
00415902 FF15 AC865500 call dword ptr [<&MFC80.#2902>] ; MFC80.#2902
00415908 83F8 04 cmp eax, 4
0041590B C64424 13 01 mov byte ptr [esp+13], 1
00415910 74 04 je short 00415916
00415912 885C24 13 mov byte ptr [esp+13], bl
00415916 8D4C24 18 lea ecx, dword ptr [esp+18]
0041591A C74424 24 FFFFF>mov dword ptr [esp+24], -1
00415922 FF15 B8865500 call dword ptr [<&MFC80.#578>] ; MFC80.#578
00415928 385C24 13 cmp byte ptr [esp+13], bl
0041592C 8BCE mov ecx, esi
0041592E 74 0F je short 0041593F
00415930 889E D0000000 mov byte ptr [esi+D0], bl
00415936 899E D4000000 mov dword ptr [esi+D4], ebx
0041593C 53 push ebx
0041593D EB 13 jmp short 00415952
0041593F C686 D0000000 0>mov byte ptr [esi+D0], 1
00415946 C786 D4000000 0>mov dword ptr [esi+D4], 1
00415950 6A 01 push 1
00415952 6A 01 push 1
00415954 E8 C9260000 call <jmp.&MFC80.#2657>
00415959 8BC8 mov ecx, eax
0041595B E8 882D0000 call <jmp.&MFC80.#2164>
00415960 6A 01 push 1
00415962 8BCE mov ecx, esi
00415964 E8 87F7FFFF call 004150F0
00415969 8B4C24 1C mov ecx, dword ptr [esp+1C]
0041596D 64:890D 0000000>mov dword ptr fs:[0], ecx
00415974 59 pop ecx
00415975 5F pop edi
00415976 5E pop esi
00415977 5B pop ebx
00415978 83C4 18 add esp, 18
0041597B C3 retn
004158A0 6A FF push -1 是按钮入口事件,直接F2
切回主界面,点设置。再点VIP线路。
就会停下来。接下来的事就是跑呗~
F8进行曲……
004158E3 68 CC015600 push 005601CC ; test
004158E8 8BC8 mov ecx, eax
004158EA 895C24 28 mov dword ptr [esp+28], ebx
004158EE C74424 18 01000>mov dword ptr [esp+18], 1
004158F6 FF15 78835500 call dword ptr [<&MFC80.#1482>] ; MFC80.#1482
004158FC 85C0 test eax, eax
004158FE 75 12 jnz short 00415912
00415900 8BCF mov ecx, edi
00415902 FF15 AC865500 call dword ptr [<&MFC80.#2902>] ; MFC80.#2902
是否为test,是的话就不跳。
所以004158FE /75 12 jnz short 00415912 改JMP即可~
修改:004158FE /EB 12 jmp short 00415912
不过相比之下我喜欢从列表框直接双击,更快。呵呵~
接下来就是破解三天试用了(根据破解思想:最小成本最大利益,破解3天试用就和VIP没区别了)
这里我们可以分为逆向算法和硬Patch。
算法没什么技术含量,详细请参考之前网际速递的算法分析文章。
主要check就俩文件:
winsysad.dll、express32.dll
生成目录一般一个是在Windows下一个是在system32下
(所以我说开个360外加按钮突破就可以秒了这个VIP,真是悲剧。ps:按钮因为默认test灰色,所以连check VIP都没。)
winsysad.dll存事件,express32.dll似有还无。设置express32.dll的文件修改时间来做的暗桩。
方法就是删掉这俩文件,以后就特别干净了。
下面介绍硬Patch(这些是总结网际速递的经验,所以可以直接运用。ps,这个软件框架真像网际速递):
搜索“期限已”3个字,找到3个限制提示。
管他的,进入代码后一顿上翻:
0041065B /0F87 32010000 ja 00410793
00410661 |72 09 jb short 0041066C
00410663 |83FF 01 cmp edi, 1
00410666 |0F83 27010000 jnb 00410793
0041066C |837D 58 00 cmp dword ptr [ebp+58], 0
00410670 |77 47 ja short 004106B9
00410672 |72 06 jb short 0041067A
00410674 |837D 54 01 cmp dword ptr [ebp+54], 1
00410678 |73 3F jnb short 004106B9
这里是个循环,所以不要乱来。
你可以看看哪个是飞向三天试用期满的:
00410666 /0F83 27010000 jnb 00410793
0041088D /0F8D 89070000 jge 0041101C
00410893 |8D4D 30 lea ecx, dword ptr [ebp+30]
00410896 |FF15 B0865500 call dword ptr [<&MFC80.#876>] ; MFC80.#3397
0041089C |50 push eax
0041089D |FFD6 call esi
0041089F |83C4 04 add esp, 4
004108A2 |83F8 04 cmp eax, 4
004108A5 |0F8D 71070000 jge 0041101C
00410B54 /0F8D C6010000 jge 00410D20
00410B5A |85F6 test esi, esi
00410B5C |0F8C BE010000 jl 00410D20
00410B62 |83FF 03 cmp edi, 3
00410B65 |0F8D B5010000 jge 00410D20
00410B6B |85FF test edi, edi
00410B6D |0F8C AD010000 jl 00410D20
这是一个群组,最好过期的时候跟下,因为实在太多了。我只能暂时通过静态分析提供这些。
该Nop的Nop,该Jmp的JMP。手工就是了。
总结一下这个软件:
好的地方是,SendMessage解锁,这个的确可能麻痹一部分人。
坏的地方是,字符串无视SendMessage解锁,直接找到关键跳。
如果你学习了一门编程语言你就会猜到作者想干什么,然后可以很快找到法门。
OK,逆向分析报告,可以睡觉了~
By ps520[LCG |
|