首页
论坛
课程
招聘
[旧帖] [原创]某截图软件较新版本破解思路/过程 0.00元
2014-7-16 18:06 5086

[旧帖] [原创]某截图软件较新版本破解思路/过程 0.00元

2014-7-16 18:06
5086
[I]by:dsong @ 看雪论坛[bbs.pediy.com][/I]

====================  声明  ====================
以下内容是给想要学习破解的人看的,里面有我个人经历以及破解时的阻碍和想法。所以请伸手党们快快离开.
我也是个菜鸟,所以这篇文章中的程序是不包含花指令、VM、混淆等的保护的,代码可读性是较好的,但是又由于是年轻的版本,所以破解的时候和2005年前后的程序肯定又有了一些不同之处。当然高手就快快绕过,这种给学过一点破解的人看可能会有些帮助。当然0基础不能直接看,另找更简单、更老的程序吧。

====================写在前面====================

这篇文章我在吾爱破解论坛已经发过了,顺便在这里也发一下...... (算是"转"我自己的帖,呵呵。)我之前也发过一个帖,但是那个不适合初学者看,因为讲得很不清楚,一些东西怎么得出的我都没说。而且当时有个暗桩没有去除,现在我去除了,但是方法我先不说,等有人回帖说了方法后,我再说我自己的方法。
还有在吾爱我发现有很多伸手党,这篇文章发到看雪来不知会不会出现真正的"交流分享"的效果呢?
我本来其实不是很想写出来的,但经过考虑,还是放出来吧。但愿软件官方不会把他们程序改复杂的......(因为我下载了垃圾公司的软件,发现它的程序反调试加了好多,我的OD撑不住,而吾爱的OD我又不会设置......老是不能正常运行。垃圾公司的我做了一个Loader,不完美的,因为下了断点它会检测到,所以不打算继续尝试了。还有一个FlashDecompilerTrillix,我还在研究怎么脱掉它的穿山甲壳呢,因为它的脱壳和天草黑鹰教程里面的穿山甲壳很不一样......唉,学习的路还很长啊。)

====================破解步骤====================

(一)彻底去掉程序注册弹框+未注册水印
<方法一>简单方法,低级
这个方法非常简单,但是有些破解初学者(指已经看完了黑鹰初级的)就会有卡掉的地方,我们来具体分析看看。
首先,载入OD,程序有点大,得等一会。
从一个初学者角度来看,第一个是做什么呢,查壳(废话,这是必须的)得:Microsoft Visual C++ 8 [Overlay] * . 恩,很好,没加壳。(而且根据后面分析,代码可读性很好)
下面一个才是真的初学者才做的,查找字符串!看到结果有6542个字符串,是不是很心动呢?我们来看注册提示窗口,标题:欢迎使用......;内容:未注册......。哈,找到重点了。但是一看字符串就傻眼了,基本都是英文,没有什么有用的中文字。而且英文的什么unregistered也都查不到。然后,到了这里,有一半的初学者就阵亡了,很可能把程序扔进回收站了。然后另一半很聪明,让程序先跑起来(这就是今天要讲的方法),然后弹框出现,就在 OD按暂停,看堆栈。[或者你直接Ctrl+N看函数下段,问题是你能够断下来吗?那么多函数你要一个个试?;-)算了,告诉你这个程序你要想拦截到有用的,找函数结尾是W的下段。]
调用堆栈
地址            堆栈             函数例程 / 参数                           调用来自                         框架
0012F0F0   77D191BE   包含 ntdll.KiFastSystemCallRet        USER32.77D191BC       0012F10C
0012F0F4   77D191F1    USER32.77D191B2                       USER32.77D191EC       0012F10C
0012F110   7882183C    USER32.GetMessageW                 mfc100u.78821836       0012F10C
0012F114   00144BD0    pMsg = 00144BD0
0012F118   00000000    hWnd = NULL
0012F11C   00000000    MsgFilterMin = 0
0012F120   00000000    MsgFilterMax = 0
0012F12C   78837E81   mfc100u.7882186D                      mfc100u.78837E7C        0012F154
0012F158   787D5B04   mfc100u.78837DB9                      mfc100u.787D5AFF        0012F154
0012F15C   00000004    Arg1 = 00000004
0012F1A4   0047F76B    ? <jmp.&mfc100u.#3627>           XXXXXXX7.0047F766      0012F1A0
0012FF1C   788477C6   XXXXXXX7.0047DD60                    mfc100u.788477C3        0012FF18
0012FF30   0063C2DB   ? XXXXXXX7.0063EBBC                  XXXXXXX7.0063C2D6     0012FF2C

找哪个好呢?我也不知道;-). 反正我找的是:
0012F110   7882183C   USER32.GetMessageW                    mfc100u.78821836        0012F10C
这个,右键,显示调用。
从段头到段尾:
7882181D    CC                           int3
7882181E    CC                           int3
7882181F    CC                           int3
78821820    CC                           int3
78821821    CC                           int3
78821822    8BFF                        mov edi,edi
78821824    56                            push esi
78821825    57                            push edi
78821826    E8 DD80F0FF           call mfc100u.78729908
7882182B    8BF0                        mov esi,eax
7882182D    33C0                       xor eax,eax
7882182F    50                            push eax
78821830    50                            push eax
78821831    50                            push eax
78821832    8D7E 30                   lea edi,dword ptr ds:[esi+30]
78821835    57                            push edi
78821836    FF15 F8185F78        call dword ptr ds:[<&USER32.GetMessageW>; USER32.GetMessageW //到了这里
7882183C    85C0                       test eax,eax
7882183E    74 25                       je short mfc100u.78821865
78821840    817E 34 6A030000  cmp dword ptr ds:[esi+34],36A
78821847    74 19                       je short mfc100u.78821862
78821849    57                            push edi
7882184A    E8 02010000           call mfc100u.78821951
7882184F    59                            pop ecx
78821850    85C0                       test eax,eax
78821852    75 0E                       jnz short mfc100u.78821862
78821854    57                            push edi
78821855    FF15 241A5F78       call dword ptr ds:[<&USER32.TranslateMe>; USER32.TranslateMessage
7882185B    57                           push edi
7882185C    FF15 201A5F78       call dword ptr ds:[<&USER32.DispatchMes>; USER32.DispatchMessageW
78821862    33C0                       xor eax,eax
78821864    40                           inc eax
78821865    5F                           pop edi
78821866    5E                           pop esi
78821867    C3                           retn

然后又有一半菜鸟像我以前一样,一看,唉,居然没有跳转跳过这里!然后反复捣鼓弄不好,就扔进回收站了。(回收站你好辛苦,还有多少空间啊?)
其实,这里是一个整个Call都导致了弹窗发生。所以直接retn处下断,重新运行程序到这个位置,再F8,到达上一层Call!
新世界:
78837DB4    CC                       int3
78837DB5    CC                       int3
78837DB6    CC                       int3
78837DB7    CC                       int3
78837DB8    CC                       int3
78837DB9    8BFF                    mov edi,edi
78837DBB    55                        push ebp
78837DBC    8BEC                   mov ebp,esp
78837DBE    83EC 18              sub esp,18
78837DC1    53                       push ebx
78837DC2    56                       push esi
78837DC3    33DB                   xor ebx,ebx
78837DC5    57                       push edi
78837DC6    43                       inc ebx
78837DC7    33FF                   xor edi,edi
78837DC9    F645 08 04         test byte ptr ss:[ebp+8],4
78837DCD    8BF1                   mov esi,ecx
78837DCF    895D F4              mov dword ptr ss:[ebp-C],ebx
78837DD2    897D F8              mov dword ptr ss:[ebp-8],edi
78837DD5    74 0F                   je short mfc100u.78837DE6
78837DD7    E8 8A210100       call mfc100u.78849F66
78837DDC    895D FC              mov dword ptr ss:[ebp-4],ebx
78837DDF    A9 00000010       test eax,10000000
78837DE4    74 03                   je short mfc100u.78837DE9
78837DE6    897D FC              mov dword ptr ss:[ebp-4],edi
78837DE9    FF76 20               push dword ptr ds:[esi+20]
78837DEC    FF15 1C185F78   call dword ptr ds:[<&USER32.GetParent>] ; USER32.GetParent
78837DF2    834E 58 18          or dword ptr ds:[esi+58],18
78837DF6    8945 EC              mov dword ptr ss:[ebp-14],eax
78837DF9    E8 0A1BEFFF       call mfc100u.78729908
78837DFE    8B1D 30185F78  mov ebx,dword ptr ds:[<&USER32.UpdateWi>; USER32.UpdateWindow
78837E04    83C0 30              add eax,30
78837E07    8945 F0              mov dword ptr ss:[ebp-10],eax
78837E0A    EB 6B                  jmp short mfc100u.78837E77
78837E0C    57                       push edi
78837E0D    57                       push edi
78837E0E    57                       push edi
78837E0F    57                       push edi
78837E10    FF75 F0               push dword ptr ss:[ebp-10]
78837E13    FF15 281A5F78   call dword ptr ds:[<&USER32.PeekMessage>; USER32.PeekMessageW
78837E19    85C0                   test eax,eax
78837E1B    75 5F                  jnz short mfc100u.78837E7C
78837E1D    397D FC             cmp dword ptr ss:[ebp-4],edi
78837E20    74 11                  je short mfc100u.78837E33
78837E22    6A 01                  push 1
78837E24    8BCE                  mov ecx,esi
78837E26    E8 D8230100     call mfc100u.7884A203
78837E2B    FF76 20              push dword ptr ds:[esi+20]
78837E2E    FFD3                  call ebx
78837E30    897D FC            mov dword ptr ss:[ebp-4],edi
78837E33    F645 08 01        test byte ptr ss:[ebp+8],1
78837E37    75 1C                 jnz short mfc100u.78837E55
78837E39    397D EC            cmp dword ptr ss:[ebp-14],edi
78837E3C    74 17                 je short mfc100u.78837E55
78837E3E    397D F8            cmp dword ptr ss:[ebp-8],edi
78837E41    75 12                jnz short mfc100u.78837E55
78837E43    FF76 20             push dword ptr ds:[esi+20]
78837E46    57                     push edi
78837E47    68 21010000    push 121
78837E4C    FF75 EC            push dword ptr ss:[ebp-14]
78837E4F    FF15 54185F78 call dword ptr ds:[<&USER32.SendMessage>; USER32.SendMessageW
78837E55    F645 08 02       test byte ptr ss:[ebp+8],2
78837E59    75 19                jnz short mfc100u.78837E74
78837E5B    FF75 F8             push dword ptr ss:[ebp-8]
78837E5E    57                     push edi
78837E5F    68 6A030000    push 36A
78837E64    FF76 20            push dword ptr ds:[esi+20]
78837E67    FF15 54185F78call dword ptr ds:[<&USER32.SendMessage>; USER32.SendMessageW
78837E6D    FF45 F8            inc dword ptr ss:[ebp-8]
78837E70    85C0                test eax,eax
78837E72    75 03                jnz short mfc100u.78837E77
78837E74    897D F4           mov dword ptr ss:[ebp-C],edi
78837E77    397D F4           cmp dword ptr ss:[ebp-C],edi
78837E7A  ^ 75 90              jnz short mfc100u.78837E0C
78837E7C    E8 EC99FEFF    call mfc100u.7882186D
78837E81    85C0                test eax,eax
78837E83    74 62               je short mfc100u.78837EE7
78837E85    397D FC          cmp dword ptr ss:[ebp-4],edi
78837E88    74 25              je short mfc100u.78837EAF
78837E8A    8B45 F0          mov eax,dword ptr ss:[ebp-10]
78837E8D    8B40 04         mov eax,dword ptr ds:[eax+4]
78837E90    3D 18010000  cmp eax,118
78837E95    74 07              je short mfc100u.78837E9E
78837E97    3D 04010000  cmp eax,104
78837E9C    75 11              jnz short mfc100u.78837EAF
78837E9E    6A 01              push 1
78837EA0    8BCE               mov ecx,esi
78837EA2    E8 5C230100  call mfc100u.7884A203
78837EA7    FF76 20           push dword ptr ds:[esi+20]
78837EAA    FFD3               call ebx
78837EAC    897D FC          mov dword ptr ss:[ebp-4],edi
78837EAF    8B06                mov eax,dword ptr ds:[esi]
78837EB1    8BCE                mov ecx,esi
78837EB3    FF90 90000000call dword ptr ds:[eax+90]
78837EB9    85C0                test eax,eax
78837EBB    74 35               je short mfc100u.78837EF2
78837EBD    FF75 F0           push dword ptr ss:[ebp-10]
78837EC0    E8 209BFEFF    call mfc100u.788219E5
78837EC5    59                    pop ecx
78837EC6    85C0               test eax,eax
78837EC8    74 0A               je short mfc100u.78837ED4
78837ECA    C745 F4 01000000mov dword ptr ss:[ebp-C],1
78837ED1    897D F8           mov dword ptr ss:[ebp-8],edi
78837ED4    57                    push edi
78837ED5    57                    push edi
78837ED6    57                    push edi
78837ED7    57                    push edi
78837ED8    FF75 F0            push dword ptr ss:[ebp-10]
78837EDB    FF15 281A5F78call dword ptr ds:[<&USER32.PeekMessage>; USER32.PeekMessageW
78837EE1    85C0                test eax,eax
78837EE3  ^ 75 97              jnz short mfc100u.78837E7C
78837EE5  ^ EB 90              jmp short mfc100u.78837E77
78837EE7    57                    push edi
78837EE8    E8 D976F6FF   call mfc100u.7879F5C6
78837EED    83C8 FF           or eax,FFFFFFFF
78837EF0    EB 07                jmp short mfc100u.78837EF9
78837EF2    8366 58 E7      and dword ptr ds:[esi+58],FFFFFFE7
78837EF6    8B46 60           mov eax,dword ptr ds:[esi+60]
78837EF9    5F                     pop edi
78837EFA    5E                    pop esi
78837EFB    5B                    pop ebx
78837EFC    C9                    leave
78837EFD    C2 0400           retn 4

聪明的你这时应该也注意到,这个新世界也没什么用,所以再在retn处F4,再走出一层!
(这时候,OD显示运行,需要对程序按下“继续”以后,OD才会再次回到你的手中!)
新新世界(由于前面太大,为了避免被认为恶意灌水,所以就浓缩成六个点吧):
......
787D5AE0   /74 3A             je short mfc100u.787D5B1C
787D5AE2   |F646 58 10        test byte ptr ds:[esi+58],10
787D5AE6   |74 1E             je short mfc100u.787D5B06
787D5AE8   |6A 04             push 4
787D5AEA   |5B                pop ebx
787D5AEB   |8BCE              mov ecx,esi
787D5AED   |E8 74440700       call mfc100u.78849F66
787D5AF2   |A9 00010000       test eax,100
787D5AF7   |74 03             je short mfc100u.787D5AFC
787D5AF9   |6A 05             push 5
787D5AFB   |5B                pop ebx
787D5AFC   |53                push ebx
787D5AFD   |8BCE              mov ecx,esi
787D5AFF   |E8 B5220600       call mfc100u.78837DB9
787D5B04    33DB              xor ebx,ebx                             ; 我们到了这里
787D5B06   |395E 20           cmp dword ptr ds:[esi+20],ebx
787D5B09   |74 11             je short mfc100u.787D5B1C
787D5B0B   |68 97000000       push 97
787D5B10   |53                push ebx
787D5B11   |53                push ebx
787D5B12   |53                push ebx
787D5B13   |53                push ebx
787D5B14   |53                push ebx
787D5B15   |8BCE              mov ecx,esi
787D5B17   |E8 A4460700       call mfc100u.7884A1C0
787D5B1C   \834D FC FF        or dword ptr ss:[ebp-4],FFFFFFFF
787D5B20    EB 25             jmp short mfc100u.787D5B47
787D5B22    8B4D D4           mov ecx,dword ptr ss:[ebp-2C]
787D5B25    85C9              test ecx,ecx
787D5B27    74 05             je short mfc100u.787D5B2E
787D5B29    E8 7C530100       call mfc100u.787EAEAA
787D5B2E    8B45 E4           mov eax,dword ptr ss:[ebp-1C]
787D5B31    8348 60 FF        or dword ptr ds:[eax+60],FFFFFFFF
787D5B35    834D FC FF        or dword ptr ss:[ebp-4],FFFFFFFF
787D5B39    B8 3F5B7D78       mov eax,mfc100u.787D5B3F
787D5B3E    C3                retn

到了这里有两条路,第一条是给那些看到跳转跳过了就非常敏感的人,而第二条是给想要看新新新世界的人。
1)第一条路:
哈,终于有跳转跳过这里了,可是有两个呢,我们该改哪一个?为了便于分析,我们在此(787D5AE0)设置断点。(或者就是说,我们都尝试一下。)
-如果我们改:787D5AE0   /74 3A             je short mfc100u.787D5B1C 的跳转(让它跳),那么得到的结果是:注册提示框(果然)没有了,截个图嘞发现水印还有 ;-(
-如果我们改:787D5AE6   /74 1E             je short mfc100u.787D5B06 的跳转(让它跳),那么得到的结果是:注册提示框(果然)没有了,截个图嘞发现水印还是有 T-T
所以,我们任意改一个,然后就是去掉水印的事了。
这个没法用暂停法了,我们Ctrl+N看看。
LoadBitmap没有参考命令;Createbitmap断不下啊。有好多都没有参考的命令那!!!算了,我懒得找了。
(但是这种方法会把其他的弹出框也跳掉,这是绝对不行的!!所以还是别尝试了吧 = = )
2)第二条路:
新新新世界:(怎么到的不用我说了吧)
0047F719  |. /75 04           jnz short XXXXXXX7.0047F71F             ;  这里一跳就惨了
0047F71B  |. |85C0            test eax,eax
0047F71D  |. |75 63           jnz short XXXXXXX7.0047F782             ;  跳过了提示框Call了
0047F71F  |> \8B4B 20         mov ecx,dword ptr ds:[ebx+20]
0047F722  |.  6A 00           push 0                                  ; /Arg3 = 00000000
0047F724  |.  56              push esi                                ; |Arg2
0047F725  |.  51              push ecx                                ; |Arg1
0047F726  |.  8D8D 70FEFFFF   lea ecx,dword ptr ss:[ebp-190]          ; |
0047F72C  |.  E8 7FDC0A00     call XXXXXXX7.0052D3B0                  ; \
0047F731  |.  68 70C86500     push XXXXXXX7.0065C870
0047F736  |.  8D8B 54010000   lea ecx,dword ptr ds:[ebx+154]
0047F73C  |.  C645 FC 20      mov byte ptr ss:[ebp-4],20
0047F740  |.  FF15 E08C6500   call dword ptr ds:[<&mfc100u.#2614>]    ;  mfc100u.78650031
0047F746  |.  85C0            test eax,eax
0047F748  |.  7E 16           jle short XXXXXXX7.0047F760
0047F74A  |.  B8 1D000000     mov eax,1D
0047F74F  |.  8D56 FF         lea edx,dword ptr ds:[esi-1]
0047F752  |.  3BC2            cmp eax,edx
0047F754  |.  1BC0            sbb eax,eax
0047F756  |.  F7D0            not eax
0047F758  |.  23C6            and eax,esi
0047F75A  |.  8983 20030000   mov dword ptr ds:[ebx+320],eax
0047F760  |>  8D8D 70FEFFFF   lea ecx,dword ptr ss:[ebp-190]
0047F766  |.  E8 3FBB1B00     call <jmp.&mfc100u.#3627>
0047F76B  |.  8D8D 70FEFFFF   lea ecx,dword ptr ss:[ebp-190]
0047F771  |.  C645 FC 19      mov byte ptr ss:[ebp-4],19
0047F775  |.  E8 86DC0A00     call XXXXXXX7.0052D400
0047F77A  |.  85FF            test edi,edi
0047F77C  |.  0F85 A6000000   jnz XXXXXXX7.0047F828
0047F782  |>  83BB 10030000 0>cmp dword ptr ds:[ebx+310],0

可以看到,我们只要改这一句:
0047F71D  |. |75 63           jnz short XXXXXXX7.0047F782
改成jmp就OK!没有提示框,没有水印了!!!
查看一下帮助,关于,发现:序列号,授权给后面都是空的,中间提示你临时授权逾期XXXX.XX.XX。XXXX.XX.XX这个日期就是你今天的日期,你明天看,就是明天的日期,总之"临时授权"永不过期,总是没有弹框和水印的。但是"临时授权"看着有点不舒服,你可以用PE Explorer改,但是毕竟......于是想要完美就到方法二。
<方法二>复杂方法,高级
用这种方法一定要看懂汇编,并且了解到VC++程序拿eax来比较的经验。(那是黑鹰高级里说的吧)
Ctrl+N, 看到这里:
名称位于 XXXXXXX7,项目 2825
地址=00656004
区段=.rdata
类型=导入    (已知)
名称=ADVAPI32.RegOpenKeyExW

程序读取注册表来验证的(这个对于熟悉程序注册方法的人有效,所以买个注册码也是有用的,虽然说我没买,但是以前网上都是注册版,用用就知道了)。所以可以通过这个函数来找到。
右键,每个参考下断点。
运行,堆栈:
第一次:
0012F418   80000002      |hKey = HKEY_LOCAL_MACHINE
0012F41C   003FCD98      |Subkey = "SOFTWARE\Hyperionics\HyperSnap 7"
0012F420   00000000      |Reserved = 0
0012F424   00020019      |Access = KEY_READ
0012F428   0012F438      \pHandle = 0012F438

感觉那么快有点不像(而且我跟踪以后也证明了不是,这里节省时间就......),虽然说打开这个很可疑,但是我们还是等等。
第二次:
0012ED14   80000000      |hKey = HKEY_CLASSES_ROOT
0012ED18   0065B968      |Subkey = "Applications\HprSnap7.exe\shell\open\command"
0012ED1C   00000000      |Reserved = 0
0012ED20   00020019      |Access = KEY_READ
0012ED24   0012ED38      \pHandle = 0012ED38

明显不是,跳过。
第三次:
0012EFC0   80000001      |hKey = HKEY_CURRENT_USER
0012EFC4   0012F0F0      |Subkey = "Identities\{CEB6AF0B-CA39-31BF-B518-527AD6AE017B}"
0012EFC8   00000000      |Reserved = 0
0012EFCC   00020019      |Access = KEY_READ
0012EFD0   0012EFE0      \pHandle = 0012EFE0

仍然明显不是,跳过。
第四次:
0012EFE4   80000000      |hKey = HKEY_CLASSES_ROOT
0012EFE8   0012F050      |Subkey = "CLSID\{CEB6AF0B-C9A3-1B3F-B185-D6A527AE017B}\VERSION"
0012EFEC   00000000      |Reserved = 0
0012EFF0   00020019      |Access = KEY_READ
0012EFF4   0012F000      \pHandle = 0012F000

还是不是,汗。
第五次:
0012EFE4   80000001      |hKey = HKEY_CURRENT_USER
0012EFE8   0012F0F0      |Subkey = "Identities\{CEB6AF0B-CA39-31BF-B518-527AD6AE017B}"
0012EFEC   00000000      |Reserved = 0
0012EFF0   00020019      |Access = KEY_READ
0012EFF4   0012F000      \pHandle = 0012F000

一样,不是。
第六次:
0012EFE0   80000000      |hKey = HKEY_CLASSES_ROOT
0012EFE4   0012F050      |Subkey = "CLSID\{CEB6AF0B-C9A3-1B3F-B185-D6A527AE017B}\VERSION"
0012EFE8   00000000      |Reserved = 0
0012EFEC   00020019      |Access = KEY_READ
0012EFF0   0012F000      \pHandle = 0012F000

过。
第七次:
0012F0D8   80000001      |hKey = HKEY_CURRENT_USER
0012F0DC   0065C2E0      |Subkey = "Control Panel\International"
0012F0E0   00000000      |Reserved = 0
0012F0E4   00020019      |Access = KEY_READ
0012F0E8   0012F114      \pHandle = 0012F114

额......
第八次:
0012E500   80000001      |hKey = HKEY_CURRENT_USER
0012E504   01779B38      |Subkey = "Software\Hyperionics\HyperSnap 7"
0012E508   00000000      |Reserved = 0
0012E50C   00020019      |Access = KEY_READ
0012E510   0012E528      \pHandle = 0012E528

啊啊啊,我终于等到你了!就是你~
另一个世界:
005294A5  |. /74 09           je short XXXXXXX7.005294B0
005294A7  |. |8D4D F0         lea ecx,dword ptr ss:[ebp-10]
005294AA  |. |FF15 4C8B6500   call dword ptr ds:[<&mfc100u.#3846>]    ;  mfc100u.786486E5
005294B0  |> \8D4D E8         lea ecx,dword ptr ss:[ebp-18]
005294B3  |.  51              push ecx
005294B4  |.  68 19000200     push 20019
005294B9  |.  57              push edi
005294BA  |.  8D4D 0C         lea ecx,dword ptr ss:[ebp+C]
005294BD  |.  FF15 E88C6500   call dword ptr ds:[<&mfc100u.#1450>]    ;  mfc100u.7879FCE7
005294C3  |.  8B55 08         mov edx,dword ptr ss:[ebp+8]            ; ||
005294C6  |.  50              push eax                                ; ||Subkey
005294C7  |.  52              push edx                                ; ||hKey
005294C8  |.  FF15 04606500   call dword ptr ds:[<&ADVAPI32.RegOpenKe>; |\RegOpenKeyExW
005294CE  |.  85C0            test eax,eax                            ; |
005294D0  |.  0F85 96000000   jnz XXXXXXX7.0052956C                   ; |
005294D6  |.  68 00100000     push 1000                               ; |/size = 1000 (4096.)
005294DB  |.  FF15 607C6500   call dword ptr ds:[<&MSVCR100.malloc>]  ; |\malloc
005294E1  |.  8BF0            mov esi,eax                             ; |
005294E3  |.  8D45 F0         lea eax,dword ptr ss:[ebp-10]           ; |
005294E6  |.  50              push eax                                ; |Arg3
005294E7  |.  8D4D E4         lea ecx,dword ptr ss:[ebp-1C]           ; |
005294EA  |.  68 081D6700     push XXXXXXX7.00671D08                  ; |Arg2 = 00671D08
005294EF  |.  51              push ecx                                ; |Arg1
005294F0  |.  C745 EC 0010000>mov dword ptr ss:[ebp-14],1000          ; |
005294F7  |.  E8 440BF4FF     call XXXXXXX7.0046A040                  ; \XXXXXXX7.0046A040
005294FC  |.  83C4 10         add esp,10
005294FF  |.  8D55 EC         lea edx,dword ptr ss:[ebp-14]
00529502  |.  52              push edx
00529503  |.  56              push esi
00529504  |.  57              push edi
00529505  |.  57              push edi
00529506  |.  8BC8            mov ecx,eax
00529508  |.  FF15 E88C6500   call dword ptr ds:[<&mfc100u.#1450>]    ;  mfc100u.7879FCE7
0052950E  |.  8B3D 38606500   mov edi,dword ptr ds:[<&ADVAPI32.RegQue>; |ADVAPI32.RegQueryValueExW
00529514  |.  50              push eax                                ; |ValueName
00529515  |.  8B45 E8         mov eax,dword ptr ss:[ebp-18]           ; |
00529518  |.  50              push eax                                ; |hKey
00529519  |.  FFD7            call edi                                ; \RegQueryValueExW
0052951B  |.  85C0            test eax,eax
0052951D  |.  8D4D E4         lea ecx,dword ptr ss:[ebp-1C]
00529520  |.  0F94C3          sete bl
00529523  |.  FF15 288D6500   call dword ptr ds:[<&mfc100u.#902>]     ;  mfc100u.78704421
00529529  |.  84DB            test bl,bl
0052952B  |.  74 0A           je short XXXXXXX7.00529537
0052952D  |.  8B4D EC         mov ecx,dword ptr ss:[ebp-14]
00529530  |.  8B55 10         mov edx,dword ptr ss:[ebp+10]
00529533  |.  890A            mov dword ptr ds:[edx],ecx
00529535  |.  EB 22           jmp short XXXXXXX7.00529559
00529537  |>  8B4D E8         mov ecx,dword ptr ss:[ebp-18]
0052953A  |.  8D45 EC         lea eax,dword ptr ss:[ebp-14]
0052953D  |.  50              push eax
0052953E  |.  56              push esi
0052953F  |.  6A 00           push 0
00529541  |.  6A 00           push 0
00529543  |.  68 081D6700     push XXXXXXX7.00671D08                  ;  UNICODE "Key"
00529548  |.  51              push ecx
00529549  |.  FFD7            call edi
0052954B  |.  8B55 10         mov edx,dword ptr ss:[ebp+10]
0052954E  |.  F7D8            neg eax
00529550  |.  1BC0            sbb eax,eax
00529552  |.  F7D0            not eax
00529554  |.  2345 EC         and eax,dword ptr ss:[ebp-14]
00529557  |.  8902            mov dword ptr ds:[edx],eax
00529559  |>  8B45 10         mov eax,dword ptr ss:[ebp+10]
0052955C  |.  8B08            mov ecx,dword ptr ds:[eax]
0052955E  |.  C6040E 00       mov byte ptr ds:[esi+ecx],0
00529562  |.  8B55 E8         mov edx,dword ptr ss:[ebp-18]
00529565  |.  52              push edx                                ; /hKey
00529566  |.  FF15 00606500   call dword ptr ds:[<&ADVAPI32.RegCloseK>; \RegCloseKey
0052956C  |>  8D4D F0         lea ecx,dword ptr ss:[ebp-10]
0052956F  |.  FF15 288D6500   call dword ptr ds:[<&mfc100u.#902>]     ;  mfc100u.78704421
00529575  |.  8D4D 0C         lea ecx,dword ptr ss:[ebp+C]
00529578  |.  FF15 288D6500   call dword ptr ds:[<&mfc100u.#902>]     ;  mfc100u.78704421
0052957E  |.  8BC6            mov eax,esi
00529580  |.  8B4D F4         mov ecx,dword ptr ss:[ebp-C]
00529583  |.  64:890D 0000000>mov dword ptr fs:[0],ecx
0052958A  |.  59              pop ecx
0052958B  |.  5F              pop edi
0052958C  |.  5E              pop esi
0052958D  |.  5B              pop ebx
0052958E  |.  8BE5            mov esp,ebp
00529590  |.  5D              pop ebp
00529591  \.  C3              retn

走过第一条路的人应该知道了,要到外面一层去。没走过的人你们偷懒了(;-<),我也偷懒了,不再重复写了。;+)
另一个新世界:
//(我懒得放了,行吗?)......(浓缩成6个点)
//[都是用来分析判断你注册是否合法的算法。具体分析略过,有兴趣自己看看吧。]
//我们要注意的是最后:
0052C8D8   > \8B45 EC         mov eax,dword ptr ss:[ebp-14]           ;运行到这里
0052C8DB   .  8B4D F4         mov ecx,dword ptr ss:[ebp-C]
0052C8DE   .  64:890D 0000000>mov dword ptr fs:[0],ecx
0052C8E5   .  59              pop ecx
0052C8E6   .  5F              pop edi
0052C8E7   .  5E              pop esi
0052C8E8   .  5B              pop ebx
0052C8E9   .  8BE5            mov esp,ebp
0052C8EB   .  5D              pop ebp
0052C8EC   .  C2 1000         retn 10

注释:
堆栈 ss:[0012E584]=00000000
eax=00000000
Jump from 0052C8CC

我们要用到eax的经验了,我们知道我们没有注册,而eax这样就被置0,所以,我们就要让它是1. 我们可以先试试,执行到下一句时我们改1. 明显的,没有注册弹框,也没有水印了。于是我们找对位置了。
把这一句 mov eax,dword ptr ss:[ebp-14] 直接改成 mov eax,1 保存即可。
但是方法二也有它的问题。就要来到第二大步了。
(二)去掉点击帮助——关于时的程序异常退出问题
这是用了“<方法二>复杂方法,高级”的人才会有的步骤,它是程序中的“暗桩”。我在原创发布区里的文章也有提到过,由于它某个地方push进的是空的,没有它合法注册文件的标志,所以导致内存异常的。
既然你都有信心和兴趣研究<方法二>了,那接下来就是留给你的一个问题:如何去掉暗桩? ;-)
相信聪明的你一定会比我找到更好的解决方案。这里先暂时卖个关子,不打消你的兴趣,让你自己研究研究。

====================写在后面====================
希望大家通过这个破解经历,在破解现在“年轻”软件时有更丰富的经验。写这篇文章的目的是,让破解爱好者们对于破解年轻的软件(这个也算是大公司出的软件)开拓一下思路,因为老的教程里面有些注册什么的都已经过时了,什么查找字符串之类的东西对于资源在另一个dll里的程序就不适用了。自己也是偶然发现,原来,有些爆破点离我们是这样的近,而我们却在太深的地方找了。
还有,我给大家提供的下载安装包是7.28.05的,而我这个破解思路是按照7.28.02写的,目的就是为了防止你Ctrl+G(你懂得,其实我也干过这种事 = = )。(不过两个程序应该地址都不一样吧。如果一样就是官方偷懒了,我也没办法了。)

写给其他像我一样努力奋斗的菜鸟们:
      如果你能够看完这篇文章,说明你拥有了足够的耐心去完成破解了,恭喜你。如果你说:“哎呀,内容太多,我看不下去了。”那么请你跳过“写在前面”、“写在后面”、“关于”,这三部分内容我承认有些是我太啰嗦了;如果你还说你看不下去,那么,你就去下载附件自己(跟着我的文章)玩,这样确实更直接;如果你还觉得不耐烦,那么我想说,唉,耐心是破解的关键啊。你知道我研究出来这些东西,只是一晃儿的事而已吗?至少我还没这么强。
      还有,欢迎大家回帖一起来交流一下哈!

====================关于我/我的想法====================
我是一名初中生,现在在读初一。从6年级开始,我就开始学习逆向相关方面的知识了。黑鹰初级已经看完,现在在看高级。
由于学业压力较大,所以平时我也很难抽出时间来研究逆向,只有到寒暑假之际才能发展一下自己的兴趣爱好。我也不知我自己是怎样迷上逆向的,哦对了,就是因为垃圾公司的软件网上找不到破解,我才下决心要好好学习反汇编的。如今经过了一年不到的学习(其实真正学习的时间不多啊),终于能够破解这一个网上也是没有了破解版的软件。
而且我学习环境不佳,我的电脑内存512MB,CPU我也不知道是多老的了,而且最要命的是我每次用了磁盘1GB空间后,必须重启.(因为我安装了SD,这不是我想安装的,但是真的迫不得已。调试软件得关杀软,关了杀软就不知会发生什么事了,所以必须要有一个强大的还原。而我磁盘空间不够,真的每次只能用1GB,于是我网上找教程的都是费劲千辛万苦找到一课一课分开的,然后一个一个下载下来看。下完了还得立即吸收,否则重启就没有了。)
其实我也挺想学病毒分析的,但是我安装了虚拟机(当然是精简版)以后再用,它提示我CPU不支持,试了各种方法无果,我只能重启电脑了。......
最令我庆幸的是我找到了吾爱和看雪两大论坛,并且现在都有了帐号(看雪还没转正呢,吾爱的是我赶上开放注册了)。这让我十分兴奋,对破解的兴趣也更加浓郁了。
学习反汇编后,也总算是明白了为什么破解补丁会报毒了,以及国产杀毒软件的垃圾。自己破解的东西肯定是无毒的,杀软就报毒了。果断去用大蜘蛛检测,没有毒。从此以后我决定要用国外的杀软了。(因为听说国产杀软遇到真正的病毒就给跪了,不是病毒的狂报毒,是吗?)
但是这对我的同学们来说是他们无法理解的。我直接爆破一个程序给他们用,他们就说三鹿零报毒......额......这非要我加一个免杀壳他们才不乱说话吗?(呵呵,其实我也能理解......)
说了那么多,都是对往事回忆的感慨。最后,我希望能与大家一起学习交流,共同进步!

安装程序下载地址:
http://pan.baidu.com/s/1eQIgl3s
提取密码:9bfw

视频附上了!
地址:http://pan.baidu.com/s/1bnGQ0SB
提取密码:yc27

P.S.: 现在视频教程都附上了,如果你还说你看不下去视频教程,那么我彻底没法了。你可以认为我说明的能力不够。......

【公告】欢迎大家踊跃尝试高研班11月试题,挑战自己的极限!

收藏
点赞0
打赏
分享
最新回复 (50)
雪    币: 89
活跃值: 活跃值 (289)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
热咖啡 活跃值 2014-7-16 18:55
2
0
太强了 ,分析这么多不简单。。。
雪    币: 6740
活跃值: 活跃值 (2172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhczf 活跃值 2014-7-16 20:50
3
0
楼主一个初中一年级的学生如此厉害了,支持一下
雪    币: 2556
活跃值: 活跃值 (1268)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 活跃值 34 2014-7-16 20:59
4
0
吊炸天,初一就开始玩逆向...,初一偶还在玩泥巴...
雪    币: 5181
活跃值: 活跃值 (437)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
暖洋洋 活跃值 2014-7-16 21:05
5
0
太厉害了,学习了,感谢分享了
雪    币: 177
活跃值: 活跃值 (299)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 活跃值 4 2014-7-16 21:07
6
0
手抖了  按了优秀 应该精华,哈哈
雪    币: 2556
活跃值: 活跃值 (1268)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 活跃值 34 2014-7-16 21:10
7
0
,妮好坏,手为神马要抖...
雪    币: 75
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dsong 活跃值 2 2014-7-16 21:12
8
0
......我们班已经有人开始用黑客工具去侵入别人系统了......
据说他还成功了几次,有一次把别人电影影片未加字幕的原本拿到了。
他还说他试图侵入过我的电脑......但是居然失败了?(反正我不信 )我可是个不开杀软防火墙的货啊。
雪    币: 177
活跃值: 活跃值 (299)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 活跃值 4 2014-7-16 21:20
9
0
看到你了
雪    币: 2556
活跃值: 活跃值 (1268)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 活跃值 34 2014-7-16 21:21
10
0
雪    币: 177
活跃值: 活跃值 (299)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 活跃值 4 2014-7-16 21:23
11
0
那个你不要管他们,你就专心玩cracker,接着你会玩到shellcode 接着,写注册机.
论坛是否又会诞生出一个 fly?
雪    币: 59
活跃值: 活跃值 (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zbzb 活跃值 2014-7-16 22:26
12
0
不错!不过楼主的第一条思路是在mfc100u里面转悠哦。。
雪    币: 101
活跃值: 活跃值 (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
谷月轩 活跃值 1 2014-7-16 22:47
13
0
后生可畏。
雪    币: 32
活跃值: 活跃值 (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwtzxb 活跃值 2014-7-16 23:21
14
0
lz牛b,最好把这些时间放在读书学习上面
雪    币: 58
活跃值: 活跃值 (262)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wonderzdh 活跃值 1 2014-7-17 10:43
15
0
长江后浪推前浪~
雪    币: 17
活跃值: 活跃值 (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
魂球先生 活跃值 2014-7-17 15:14
16
0
厉害 ,为你鼓掌。
雪    币: 14884
活跃值: 活跃值 (2538)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2014-7-17 15:26
17
0
前浪死在沙滩上
雪    币: 2556
活跃值: 活跃值 (1268)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 活跃值 34 2014-7-17 15:27
18
0
雪    币: 75
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dsong 活跃值 2 2014-7-17 15:54
19
0
感谢提醒,这条路我已经说了虽然能跳过注册提示,但也会造成其它窗口不能弹出,比如说各种设置,而且还需要去掉限制。......
不过这样修改把其他窗口也跳过,这是个硬伤,是绝对不能的......
其实我刚开始写的时候还没注意到,后来我突然想到了,所以在后面加上了。
雪    币: 419
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
狗毛大圣 活跃值 2014-7-17 16:20
20
0
借用英雄杀里面 廉颇说的一句话 吾亦老矣
雪    币: 25
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sunflover 活跃值 2014-7-17 16:21
21
0
前辈好
初一貌似我还没玩过电脑,除了学校课上。
加油!
雪    币: 29
活跃值: 活跃值 (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ricroon 活跃值 2014-7-17 16:40
22
0
跟着做了,成功了,真厉害啊
雪    币: 75
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dsong 活跃值 2 2014-7-17 19:58
23
0
感谢大家的支持,我现在准备写那个EasyRecovery的破文了。
那个程序有好几种破解方法,我现在研究了两种,一个是F12法,一个是查找字符串。
这个程序虽然资源不全都在程序里,但是有些极其富有提示性的字符串。
不知是不是作者故意的。

还有我说一下下一步的决定,这个EasyRecovery搞完以后就试试看Advanced Installer. ;-)
雪    币: 5
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pooiy 活跃值 2014-7-17 22:33
24
0
楼主很有前途,慢慢搞你就是大牛了,继续努力
雪    币: 155
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mmxy 活跃值 2014-7-18 12:59
25
0
HyperSnap 7……
游客
登录 | 注册 方可回帖
返回