分享

新手进阶——超详细代码过程分析

 chubanz 2011-05-05
        先介绍一下不慌不忙:大家都有过忙手忙脚最小化窗口(或关闭窗口)的经历吧!原因很简单——不想让突如其来的老板、老妈、老婆看到我们电脑屏幕上正在显示的游戏、日记、MM:-) 等属于个人隐私的东东。
本软件就能为你解决以上的烦恼,当你鼠标左、右键同时按下时,软件就能迅速隐藏正在显示的窗口,免去人工瞄准并按下每个窗口右上方的那个小得可怜的的最小化按扭之苦了。当危险解除再鼠标左、右键同时按下能使隐藏的窗口恢复。
此外程序还有关闭声音,保留某些窗口,自定义快捷键,隐藏桌面,隐藏任务栏,关闭程序等辅助功能。软件操作容易,界面简洁,不需要过多的时间摸索就能熟练使用。

1.JPG

2.JPG


开始破解

程序没有加壳,OD载入后用F12调用堆栈法或下API断点都可到达关键位置

开始分析过程


004029E0   .  6A FF                         push -1                              ;  这段代码的开头
004029E2   .  68 087F4000            push Unhurrie.00407F08               ;  SE 处理程序安装
004029E7   .  64:A1 0000000>      mov eax,dword ptr fs:[0]
004029ED   .  50                              push eax
004029EE   .  64:8925 00000>      mov dword ptr fs:[0],esp
004029F5   .  83EC 54                    sub esp,54
004029F8   .  53                                 push ebx
004029F9   .  56                                push esi
004029FA   .  BB 01000000            mov ebx,1
004029FF   .  57                                push edi
00402A00   .  8BF1                          mov esi,ecx
00402A02   .  53                                push ebx
00402A03   .  E8 E04B0000           call <jmp.&MFC42.#CWnd::UpdateData_6>;  取部分用户名,不知是干什么的
00402A08   .  8D4C24 0C               lea ecx,dword ptr ss:[esp+C]
00402A0C   .  E8 A14B0000          call <jmp.&MFC42.#CString::CString_5>
00402A11   .  8D4C24 20                lea ecx,dword ptr ss:[esp+20]
00402A15   .  C74424 68 000>     mov dword ptr ss:[esp+68],0
00402A1D   .  E8 4E4B0000         call <jmp.&MFC42.#CWnd::CWnd_567>
00402A22   .  C74424 20 F89>     mov dword ptr ss:[esp+20],Unhurrie.0>
00402A2A   .  8D7E 64                   lea edi,dword ptr ds:[esi+64]
00402A2D   .  68 48C64000          push Unhurrie.0040C648
00402A32   .  8BCF                        mov ecx,edi
00402A34   .  885C24 6C              mov byte ptr ss:[esp+6C],bl
00402A38   .  E8 6F4B0000          call <jmp.&MFC42.#CString::operator=>;  取完整用户名
00402A3D   .  8B8E 14010000     mov ecx,dword ptr ds:[esi+114]
00402A43   .  8D86 14010000      lea eax,dword ptr ds:[esi+114]
00402A49   .  8B51 F8                   mov edx,dword ptr ds:[ecx-8]
00402A4C   .  85D2                        test edx,edx
00402A4E   .  7E 0A                       jle short Unhurrie.00402A5A          ;  判断用户名是否填写,没有填写就跳向失败
00402A50   .  50                              push eax
00402A51   .  8BCF                        mov ecx,edi
00402A53   .  E8 9C4B0000         call <jmp.&MFC42.#CString::operator=>;  取填写的注册码
00402A58   .  EB 0C                       jmp short Unhurrie.00402A66
00402A5A   >  68 B8C24000         push Unhurrie.0040C2B8               

00402A5F   .  8BCF                       mov ecx,edi
00402A61   .  E8 464B0000          call <jmp.&MFC42.#CString::operator=>
00402A66   >  8B96 10010000    mov edx,dword ptr ds:[esi+110]
00402A6C   .  837A F8 17             cmp dword ptr ds:[edx-8],17
00402A70      0F85 83010000        jnz Unhurrie.00402BF9                ;  判断注册码是否为23位,不是23位就跳向失败
00402A76   .  8D4424 10               lea eax,dword ptr ss:[esp+10]
00402A7A   .  57                              push edi
00402A7B   .  50                              push eax
00402A7C   .  8BCE                       mov ecx,esi
00402A7E   .  E8 1D020000           call Unhurrie.00402CA0               ;  算法部分,F7跟入可以分析算法
00402A83   .  50                               push eax
00402A84   .  8D4C24 10              lea ecx,dword ptr ss:[esp+10]
00402A88   .  C64424 6C 02          mov byte ptr ss:[esp+6C],2
00402A8D   .  E8 624B0000           call <jmp.&MFC42.#CString::operator=>
00402A92   .  8D4C24 10              lea ecx,dword ptr ss:[esp+10]
00402A96   .  885C24 68                mov byte ptr ss:[esp+68],bl
00402A9A   .  E8 014B0000          call <jmp.&MFC42.#CString::~CString_>
00402A9F   .  8B4C24 0C             mov ecx,dword ptr ss:[esp+C]
00402AA3   .  8B86 10010000       mov eax,dword ptr ds:[esi+110]
00402AA9   .  51                              push ecx                             ; /堆栈S2=真注册码
00402AAA   .  50                             push eax                             ; |堆栈S1=假注册码
00402AAB   .  FF15 24934000     call dword ptr ds:[<&MSVCRT._mbscmp>>; \将真的注册码与假的比较
00402AB1   .  83C4 08                   add esp,8
00402AB4   .  85C0                         test eax,eax
00402AB6      0F85 9E010000       jnz Unhurrie.00402C5A                ;  判断注册码是否正确,不对就跳
00402ABC   .  8D5424 10              lea edx,dword ptr ss:[esp+10]        ;  下面开始把注册信息写入注册表
00402AC0   .  52                              push edx                             ; /pHandle
00402AC1   .  68 06000200           push 20006                           ; |Access = KEY_WRITE
00402AC6   .  50                               push eax                             ; |Reserved
00402AC7   .  68 8CC24000          push Unhurrie.0040C28C               ; |Subkey = "Software\Microsoft\Windows\CurrentVersion"
00402ACC   .  68 02000080           push 80000002                        ; |hKey = HKEY_LOCAL_MACHINE
00402AD1   .  FF15 04904000        call dword ptr ds:[<&ADVAPI32.RegOpe>; \RegOpenKeyExA
00402AD7   .  85C0                          test eax,eax
00402AD9   .  74 15                         je short Unhurrie.00402AF0           ;  判断打开注册表指定位置是否成功
00402ADB   .  6A 00                        push 0
00402ADD   .  6A 00                          push 0
00402ADF   .  68 78C24000            push Unhurrie.0040C278               ;  ASCII "can't open regedit!"
00402AE4   .  8BCE                         mov ecx,esi
00402AE6   .  E8 EB4A0000           call <jmp.&MFC42.#CWnd::MessageBoxA_>; 提示写入注册信息失败
00402AEB   .  E9 73010000            jmp Unhurrie.00402C63
00402AF0   >  51                               push ecx
00402AF1   .  8BCC                          mov ecx,esp
00402AF3   .  896424 18                  mov dword ptr ss:[esp+18],esp
00402AF7   .  57                                 push edi
00402AF8   .  E8 A94A0000             call <jmp.&MFC42.#CString::CString_5>
00402AFD   .  8BCE                          mov ecx,esi
00402AFF   .  E8 5CFEFFFF          call Unhurrie.00402960
00402B04   .  8B0F                           mov ecx,dword ptr ds:[edi]
00402B06   .  8B5424 10                  mov edx,dword ptr ss:[esp+10]
00402B0A   .  8B3D 00904000         mov edi,dword ptr ds:[<&ADVAPI32.Reg>; ADVAPI32.RegSetValueExA
00402B10   .  8B49 F8                        mov ecx,dword ptr ds:[ecx-8]
00402B13   .  41                                    inc ecx
00402B14   .  51                                      push ecx                             ; /BufSize
00402B15   .  50                                      push eax                             ; |Buffer
00402B16   .  53                                      push ebx                             ; |ValueType
00402B17   .  6A 00                                  push 0                               ; |Reserved = 0
00402B19   .  68 64C24000                   push Unhurrie.0040C264               ; |ValueName = "RegisteredBubmTzm"
00402B1E   .  52                                         push edx                             ; |hKey
00402B1F   .  FFD7                                 call edi                             ; \RegSetValueExA
00402B21   .  85C0                                 test eax,eax
00402B23   .  74 15                                 je short Unhurrie.00402B3A          ;  判断是否可以设置键值名
00402B25   .  6A 00                                push 0
00402B27   .  6A 00                               push 0
00402B29   .  68 4CC24000                  push Unhurrie.0040C24C               ;  ASCII "can't change regedit!"
00402B2E   .  8BCE                               mov ecx,esi
00402B30   .  E8 A14A0000                 call <jmp.&MFC42.#CWnd::MessageBoxA_>;  提示写入注册信息失败
00402B35   .  E9 29010000                   jmp Unhurrie.00402C63
00402B3A   >  51                                     push ecx
00402B3B   .  8D4424 10                       lea eax,dword ptr ss:[esp+10]
00402B3F   .  8BCC                                 mov ecx,esp
00402B41   .  896424 18                         mov dword ptr ss:[esp+18],esp
00402B45   .  50                                       push eax
00402B46   .  E8 5B4A0000                   call <jmp.&MFC42.#CString::CString_5>
00402B4B   .  8BCE                                 mov ecx,esi
00402B4D   .  E8 0EFEFFFF                call Unhurrie.00402960
00402B52   .  8B8E 10010000               mov ecx,dword ptr ds:[esi+110]
00402B58   .  8B5424 10                        mov edx,dword ptr ss:[esp+10]
00402B5C   .  8B49 F8                             mov ecx,dword ptr ds:[ecx-8]
00402B5F   .  41                                        inc ecx
00402B60   .  51                                       push ecx
00402B61   .  50                                       push eax
00402B62   .  53                                       push ebx
00402B63   .  6A 00                                 push 0
00402B65   .  68 38C24000                    push Unhurrie.0040C238               ;  ASCII "RegisteredBubmZcm"
00402B6A   .  52                                        push edx
00402B6B   .  FFD7                                call edi                             ;  准备写入注册信息
00402B6D   .  85C0                                test eax,eax
00402B6F   .  6A 00                                push 0
00402B71   .  74 13                                 je short Unhurrie.00402B86          ;  判断是否写入注册信息成功
00402B73   .  6A 00                                push 0
00402B75   .  68 4CC24000                  push Unhurrie.0040C24C               ;  ASCII "can't change regedit!"
00402B7A   .  8BCE                                 mov ecx,esi
00402B7C   .  E8 554A0000                  call <jmp.&MFC42.#CWnd::MessageBoxA_>;  提示写入注册信息失败
00402B81   .  E9 DD000000                  jmp Unhurrie.00402C63
00402B86   >  68 90C14000                   push Unhurrie.0040C190
00402B8B   .  51                                        push ecx
00402B8C   .  8BCC                                 mov ecx,esp
00402B8E   .  896424 24                        mov dword ptr ss:[esp+24],esp
00402B92   .  68 2CC24000                     push Unhurrie.0040C22C               ;  ASCII "SOURCEINFO1"
00402B97   .  E8 404A0000                  call <jmp.&MFC42.#CString::CString_5>
00402B9C   .  51                                       push ecx
00402B9D   .  C64424 78 03               mov byte ptr ss:[esp+78],3
00402BA2   .  8BCC                                mov ecx,esp
00402BA4   .  896424 2C                    mov dword ptr ss:[esp+2C],esp
00402BA8   .  68 70C14000                 push Unhurrie.0040C170               ; ASCII "SOURCE_DIALOG_CN"
00402BAD   .  E8 2A4A0000                 call <jmp.&MFC42.#CString::CString_5>
00402BB2   .  8D4424 24                          lea eax,dword ptr ss:[esp+24]
00402BB6   .  8D4C24 30                           lea ecx,dword ptr ss:[esp+30]
00402BBA   .  50                                          push eax
00402BBB   .  885C24 7C                      mov byte ptr ss:[esp+7C],bl
00402BBF   .  E8 CCF1FFFF               call Unhurrie.00401D90
00402BC4   .  8BC8                               mov ecx,eax
00402BC6   .  C64424 70 04                mov byte ptr ss:[esp+70],4
00402BCB   .  E8 70F1FFFF                 call Unhurrie.00401D40
00402BD0   .  50                                       push eax
00402BD1   .  8BCE                                mov ecx,esi
00402BD3   .  E8 FE490000                     call <jmp.&MFC42.#CWnd::MessageBoxA_>; 提示注册成功
00402BD8   .  8D4C24 14                       lea ecx,dword ptr ss:[esp+14]
00402BDC   .  885C24 68                    mov byte ptr ss:[esp+68],bl
00402BE0   .  E8 BB490000                  call <jmp.&MFC42.#CString::~CString_>
00402BE5   .  8B4C24 10                  mov ecx,dword ptr ss:[esp+10]
00402BE9   .  51                                        push ecx                             ; /hKey
00402BEA   .  FF15 0C904000               call dword ptr ds:[<&ADVAPI32.RegClo>; \RegCloseKey
00402BF0   .  8BCE                                    mov ecx,esi                          ;  到此注册信息写入过程结束
00402BF2   .  E8 D3490000                       call <jmp.&MFC42.#CDialog::OnOK_4853>
00402BF7   .  EB 61                                  jmp short Unhurrie.00402C5A          ;  这个跳转跳过失败提示
00402BF9   >  6A 00                                    push 0                               ;  下边开始准备提示注册失败
00402BFB   .  68 90C14000                      push Unhurrie.0040C190
00402C00   .  51                                          push ecx
00402C01   .  8BCC                                       mov ecx,esp
00402C03   .  896424 28                              mov dword ptr ss:[esp+28],esp
00402C07   .  68 1CC24000                         push Unhurrie.0040C21C               ;  ASCII "SOURCEINFO17"
00402C0C   .  E8 CB490000                                call <jmp.&MFC42.#CString::CString_5>
00402C11   .  51                                              push ecx
00402C12   .  C64424 78 05                        mov byte ptr ss:[esp+78],5
00402C17   .  8BCC                                    mov ecx,esp
00402C19   .  896424 28                     mov dword ptr ss:[esp+28],esp
00402C1D   .  68 70C14000                        push Unhurrie.0040C170               ; ASCII "SOURCE_DIALOG_CN"
00402C22   .  E8 B5490000                       call <jmp.&MFC42.#CString::CString_5>
00402C27   .  8D5424 24                           lea edx,dword ptr ss:[esp+24]
00402C2B   .  8D4C24 30                            lea ecx,dword ptr ss:[esp+30]
00402C2F   .  52                                             push edx
00402C30   .  885C24 7C                         mov byte ptr ss:[esp+7C],bl
00402C34   .  E8 57F1FFFF                     call Unhurrie.00401D90
00402C39   .  8BC8                                    mov ecx,eax
00402C3B   .  C64424 70 06                    mov byte ptr ss:[esp+70],6
00402C40   .  E8 FBF0FFFF                         call Unhurrie.00401D40
00402C45   .  50                                        push eax
00402C46   .  8BCE                                     mov ecx,esi
00402C48   .  E8 89490000                        call <jmp.&MFC42.#CWnd::MessageBoxA_>;  出现错误提示
00402C4D   .  8D4C24 14                         lea ecx,dword ptr ss:[esp+14]
00402C51   .  885C24 68                           mov byte ptr ss:[esp+68],bl
00402C55   .  E8 46490000                       call <jmp.&MFC42.#CString::~CString_>
00402C5A   >  6A 00                                  push 0
00402C5C   .  8BCE                                mov ecx,esi
00402C5E   .  E8 85490000                     call <jmp.&MFC42.#CWnd::UpdateData_6>
00402C63   >  8D4C24 20                         lea ecx,dword ptr ss:[esp+20]
00402C67   .  C64424 68 00                       mov byte ptr ss:[esp+68],0
00402C6C   .  E8 5F490000                     call <jmp.&MFC42.#CButton::~CButton_>
00402C71   .  8D4C24 0C                          lea ecx,dword ptr ss:[esp+C]
00402C75   .  C74424 68 FFF  >              mov dword ptr ss:[esp+68],-1
00402C7D   .  E8 1E490000                      call <jmp.&MFC42.#CString::~CString_>
00402C82   .  8B4C24 60                          mov ecx,dword ptr ss:[esp+60]
00402C86   .  5F                                          pop edi
00402C87   .  5E                                         pop esi
00402C88   .  64:890D 00000>                 mov dword ptr fs:[0],ecx
00402C8F   .  5B                                         pop ebx
00402C90   .  83C4 60                               add esp,60
00402C93   .  C3                                           retn                                 ; 代码结束


代码有点乱,大家将就吧,程序的目录下也有代码分析,那里的代码比较清楚一点

另外说一下,注册信息保存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 的RegisteredBubmTzm 和RegisteredBubmZcm这两个键值下

根据我的调试发现,只要在注册时输入任意23位注册码,并修改00402AB6的跳转,软件在写入注册信息时就写入正确的注册码,而不是用户输入的23位注册码,这个也算是这个软件的一个BUG吧。我的破解版就是利用了这个注册的BUG。

程序是明码比较,可以写内存注册机,大家可以自己尝试一下。我是考虑到有些不知道的人说我放毒(内存注册机杀毒软件一般会误报),所以不提供内存注册机

注意:使用破解版时,注册码可以任意输入,但必须是23位。破解版的图标,我改成了醒目的大眼睛图标,(其实是新浪网图标),便于区别。

附上不慌不忙软件的下载地址:http://u./file/f31f1c7dc   不慌不忙.rar

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多