使用windows图片传真管理器同时打开多个图片
Bell.wang
Window的图片传真管理器用起来很方便,但是有一个不好的地方是:无法同时打开多个图片。当你打开一个新的图片后,旧的窗口更新以显示新的图片,始终是一个窗口。这样,当你想比较2幅图片的时候,就不方便了。
解决办法:
1. 使用UltraEdit打开system32\shimgvw.dll,找到地址0xFD54, (74 2E改为EB 2E)
0000fd50h: 8B F0 3B F7 74 2E 8D 45 FC 50 68 E8 03 00 00 6A ; ‹ð;÷ë.EüPhè...j
修改为
0000fd50h: 8B F0 3B F7 EB 2E 8D 45 FC 50 68 E8 03 00 00 6A ; ‹ð;÷ë.EüPhè...j
2. 同样的修改system32\dllcache\shimgvw.dll
3. 再修改一遍system32\shimgvw.dll
注:仅在windowsXP版本测试过.
效果图:
原理:
查找一番,得知Window的图片传真管理器实际上就是System32\shimgvw.dll。一个例子是可以执行:rundll32.exe %Systemroot%\System32\shimgvw.dll,ImageView_Fullscreen E:\temp\test1\1.jpgWindows,将打开一个图片传真管理器显示1.jpg.
决定修改shimgvw.dll这个文件,使用反汇编工具OlyDBG,找到它调用Findwindow的地方(一共2处),将其后的条件判断修改为无条件跳转:
5CB10941 |. 57 push edi ; /Title => NULL
5CB10942 |. 68 4422B05C push 5CB02244 ; |Class = "ShImgVw:CPreviewWnd"
5CB10947 |. 894D F8 mov dword ptr [ebp-8], ecx ; |
5CB1094A |. FF15 0415B05C call dword ptr [<&USER32.FindWindowW>>; \FindWindowW
5CB10950 |. 8BF0 mov esi, eax
5CB10952 |. 3BF7 cmp esi, edi
5CB10954 74 2E je short 5CB10984 ====> (74 2E修改为 EB 2E) 74就是je, EB就是jmp
......
......
于是程序就不再判断是否找到了已经打开的窗口,重新CreateWindow.
修改,保存,替换到系统system32目录下。
但是,window提示:该文件正在被使用,无法更新。使用进程察看工具得知,shimgvw.dll正在被explore.exe使用.于是杀掉explore.exe. 再次替换shimgvw.dll.
很不幸,很快,windows就察觉到了这个shimgvw.dll被修改掉了,于是自动地从system32\dllcache目录找来了一个原始的shimgvw.dll, 把我修改过的shimgvw.dll覆盖掉了,白干了。
干脆,我把system32\dllcache\shimgvw.dll, system32\shimgvw.dll都修改掉! 这下windows不再干预了。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!