-
-
[原创]DIY VC++ SPY工具,让它能多个同时运行
-
-
[原创]DIY VC++ SPY工具,让它能多个同时运行
没有技术含量,感兴趣的随便瞅瞅!
VC++ 的SPY工具很好用,最近玩的时候想让他查查自己的标题,发现居然只能运行一个实例!
NNDT,不爽,决定把它搞定!
知己知彼百战百胜嘛,为什么只能运行一个实例呢?这个偶也不清楚,还好俺们有无敌的百度!
请出百度,搜索之得到结果,运行一个实例的办法一般有以下两种方法
1、用FindWidow查找窗口,然后你懂的
2、CreateMutex函数会创建一个互斥体,之后MSDN后也不知所以然,英文差啊
反正和这两函数有关,不管咋样看看在说
PEID查壳,VC++,没有加壳,好的开始!
祭出神器OD,载入SPY程序,CTRL+N查看导入表函数
找找有没有FindWindow函数,木有啊
找找CreateMutex函数,找到了!OK,
右击数遍选择查找输入函数参考,会得到引用该函数的地点,这里有四个,有一个肯定没啥关系,剩下的就一个下断点吧
最后在该位置得到重要提示
0043324E . 68 B02A4600 push SPYXX.00462AB0 ; /MutexName = "SpyxxStartupSyncMutex"
00433253 . 6A 00 push 0 ; |InitialOwner = FALSE
00433255 . 6A 00 push 0 ; |pSecurity = NULL
00433257 . C78424 1801000>mov dword ptr ss:[esp+118],0 ; |
00433262 . FF15 D8C04400 call dword ptr ds:[<&KERNEL32.CreateMutex>; \CreateMutexA
00433268 . 8BF0 mov esi,eax
0043326A . 6A 00 push 0 ; /Timeout = 0. ms
0043326C . 56 push esi ; |hObject
0043326D . 897424 28 mov dword ptr ss:[esp+28],esi ; |
00433271 . FF15 30C14400 call dword ptr ds:[<&KERNEL32.WaitForSing>; \WaitForSingleObject
00433277 . 85C0 test eax,eax
00433279 . 74 0C je short SPYXX.00433287
0043327B . 56 push esi ; /hObject
0043327C . FF15 94C04400 call dword ptr ds:[<&KERNEL32.CloseHandle>; \CloseHandle
00433282 . E9 1F070000 jmp SPYXX.004339A6
00433287 > 6A 05 push 5 ; /Relation = GW_CHILD
00433289 . FF15 D8C84400 call dword ptr ds:[<&USER32.GetDesktopWin>; |[GetDesktopWindow
0043328F . 8B3D 78C94400 mov edi,dword ptr ds:[<&USER32.GetWindow>>; |user32.GetWindow
00433295 . 50 push eax ; |hWnd
00433296 . FFD7 call edi ; \GetWindow
00433298 . 8BF0 mov esi,eax
0043329A . 85F6 test esi,esi
0043329C . 74 21 jne short SPYXX.004332BF
0043329E . 8B2D 9CC94400 mov ebp,dword ptr ds:[<&USER32.GetWindowL>; user32.GetWindowLongA
0043329E . 8B2D 9CC94400 mov ebp,dword ptr ds:[<&USER32.GetWindowLongA>] ; user32.GetWindowLongA
004332A4 > 6A EB push -15
004332A6 . 56 push esi
004332A7 . FFD5 call ebp
004332A9 . 3D 76EBFE12 cmp eax,12FEEB76
004332AE . 0F84 8F010000 je SPYXX.00433443//到这个位置几本上完蛋了004332B4 . 6A 02 push 2
004332B6 . 56 push esi
004332B7 . FFD7 call edi
004332B9 . 8BF0 mov esi,eax
004332BB . 85F6 test esi,esi
这几段代码借助MSDN倒是很容易明白,不过偶没耐心,用了两次比较就顺利找到关键跳转处
第一次先开一个SPY++,然后F9让OD跑起来,然后看执行,在看看没有先开SPY++OD又是怎么运行的基本上很快就能知道哪比较关键了
关键的是程序必须运行到下列代码才能正常打开
004332BF > \6A 01 push 1
004332C1 . 6A 0E push 0E
004332C3 . 6A 01 push 1
004332C5 . E8 5A4D0100 call <jmp.&MFC42.#AfxFindResourceHandle_1>
然后各种办法,大家随便玩吧!
OK
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!