首页
社区
课程
招聘
[原创]DIY VC++ SPY工具,让它能多个同时运行
发表于: 2012-4-7 22:25 6109

[原创]DIY VC++ SPY工具,让它能多个同时运行

2012-4-7 22:25
6109

没有技术含量,感兴趣的随便瞅瞅!
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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (3)
雪    币: 183
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
楼主是真是有心人啊!!
2012-4-7 22:33
0
雪    币: 210
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
图没上,大家随便看看
2012-4-7 23:12
0
雪    币: 321
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
将12FEEB76改掉就行了吧。
2012-4-9 14:43
0
游客
登录 | 注册 方可回帖
返回
//