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