wenjiang 的个人资料morning's blog照片日志列表更多 工具 帮助

日志


8月23日

vmware 5.5 rip

为了减少vmware的资源占用,也为了还原系统后快速安装vmware,制作了此vmware5.5绿色版.
网络连接使用winpe的netcfg.exe工具进行配置,支持桥接方式联网.不安装额外的服务(DHCP,NAT等统统不需要),不需要虚拟网卡.包含windows vmware tools,linux等平台的没有包含.
使用方法见压缩包内说明,大小11M.
安装脚本借鉴了很多网上的vmware绿化脚本,在此表示感谢.分享仅用于技术交流.
 
 

[分享]regvsdll

这是一个注册VS dll的小工具,方便想对 VS 软件动手动脚的朋友.这是前几天制作 MSDN 7.0(VS2002/2003的帮助)绿色版的副产品.因为看到dexplore.exe并没有以来.net,所以就提取出来,用这个版本也可以看 windows 7 的SDK的帮助(命令行:dexplore.exe /helpcol ms-help://MS.W7SDK.1033),安装windows7SDK,直接执行win32doc对应的msi,并不检查.net(甚好!)
 
回到最初的话题.
VS因为各版本并存,CLASSID保存在产品所在的注册表路径下,所以,比起标准的COM Dll注册,多了额外的两个导出函数,VSDllRegisterServer,VSDllUnregisterServer,与不含VS前缀的函数相比,这两个函数有一个参数,LPCWSTR pszRegRoot,用于指定注册表根路径,而不含前缀的则使用dll默认的注册表路径.
 typedef HRESULT (WINAPI *pVSRegisterProc)(LPCWSTR pszRegRoot);
 typedef HRESULT (WINAPI *pVSUnregisterProc)(LPCWSTR pszRegRoot);
 
请新建一个 console 工程,删除 main函数,用以下代码覆盖即可(如果你没有CStdString,则新建console工程,1.添加MFC支持,或,2添加atl支持,然后 #define CStdString CString,以及A/W版本).
 
提取版的mshelp2,以及regvsdll的源代码在此下载: http://cid-2067fca683114503.skydrive.live.com/browse.aspx/Public/mshelp2/

[暂存][部分完成]适用于windows2000的来自windowsXP的msgina

本工程的目的是将windows Xp的登录界面移植到windows2000
目前遗留问题:
用于windows2000的winlogon.exe不会去调用xp版本中的无名函数,所以需要通过我们的gina stub实现调用
LogonUI 和 winlogon之间的RPC 通讯会导致线程异常,估计是5.0 和 5.1 之间定义或结构大小有差异

目前已经实现的:
1.windows xp的msgina.dll在2000系统下加载,实现 标准GINA 功能
2.windows xp的logonUI.exe在2000系统下可独立启动(但还不能被winlogon进程调用)
3.如果替换windows2000的msgina,则本gina stub 可以使得windows2000使用windows xp引入的新的蓝色关机画面
目前包含的工程:
1.xp系统文件:gdiplus.dll ,duser.dll ,User Account Pictures 这些不需要修改
2.shell32 (myshell),此工程会被来自xp系统的dll调用,用于实现windows2000系统shell32不具备的功能
3.shsvcs (mysvcs),此工程会被来自xp系统的msgina.dll,shgina.dll调用,用于支持这些dll对此dll的依赖
4.ginaproxy (ginaps),此工程会被 shgina.dll调用,用于自动动态链接当前实际使用的gina.dll
5.uxtheme (mytheme),此工程会被来自xp系统的logonui.exe调用,用于支持这dll对此dll的依赖
6.gina (mygina),用于stub/hook xp的msgina,为其与windows2000上的winlogon.exe相互调用提供桥梁,并内存patch其部分代码,以便使其能运行在windows2000的系统上,文件名可用msgina.dll或其他任意名称,推荐使用msgina.dll,因为系统中许多组件存在对此文件名的检查,如果不是msgina.dll会被禁止一些功能.
7.shgina,这是来自xp系统的文件,经过少量修改,需要调用 ginaps.dll
8.logonui 少量patch,需要调用 mytheme,myshell,shgina
9.msgina 较多patch,需要调用 myshell,mygina,必须由mygina加载
 
由于只是一段时间code后,进行的crack娱乐,此工程暂停.等忙过一段时间再继续来玩这个~

分享:修正版dbgvsvc(dbgview 服务端)

前几天调试winlogon.exe,用了dbgview的互联功能,但是发现始终连接不上,而且服务启动一会就自动停止了.我用的是dbgview 4.76.follow me,and fix it!
首先从dbgview.exe资源中解压出来: dbgv.sys,dbgvsvc.exe.
 
然后,创建一个批处理文件,例如 install.bat,内容如下:
@echo off
copy dbgv.sys %systemroot%\system32\
copy dbgvsvc.exe %systemroot%\system32\
%systemroot%\system32\dbgvsvc.exe -install
sc config "DebugViewService" start= auto
net start "DebugViewService"
pause
 
运行此批处理文件,即可安装dbgview服务端服务,并设为自动运行.
打开Tcpview.exe,反复启动服务端,发现端口是递增的,OK,看来服务端用的端口是自动分配.然后打开dbgview.exe,试着连接局域网上的任意计算机,发现尝试连接2020~2029端口,OK,难怪连接不上了.
 
打开 ollydbg(windbg不方便直接修改内存汇编)
找到 socket.bind的引用
 
00401824      66:8B50 08    mov     dx, word ptr [eax+8]
00401828      53            push    ebx                              ; /NetLong
00401829      66:899424 940>mov     word ptr [esp+194], dx
00401831      E8 AA160000   call    <jmp.&WS2_32.#8_htonl>
00401836      57            push    edi                              ; /AddrLen => 10 (16.)
00401837      8D8C24 940100>lea     ecx, dword ptr [esp+194]         ; |
0040183E      898424 980100>mov     dword ptr [esp+198], eax
00401845      51            push    ecx                              ; |pSockAddr
00401846      33C0          xor     eax, eax                         ; |
00401848  |.  56            push    esi                              ; |Socket
00401849  |.  66:898424 9E0>mov     word ptr [esp+19E], ax           ; |
00401851  |.  E8 84160000   call    <jmp.&WS2_32.#2_bind>            ; \bind
 
显然,我们需要将端口固定到能够被搜索的范围,patch 如下,我图省事,就不理会端口被占用的情况了

00401824      66:8B50 08              mov     dx, word ptr [eax+8]
00401828      90                      nop                                          ; /NetLong
00401829      66:899424 90010000      mov     word ptr [esp+190], dx
00401831      B8 07E40000             mov     eax, 0E407
00401836      57                      push    edi                                  ; /AddrLen => 10 (16.)
00401837      8D8C24 94010000         lea     ecx, dword ptr [esp+194]             ; |
0040183E      899C24 98010000         mov     dword ptr [esp+198], ebx
00401845      51                      push    ecx                                  ; |pSockAddr
00401846      90                      nop                                          ; |
00401847      90                      nop
00401848  |.  56                      push    esi                                  ; |Socket
00401849  |.  66:898424 9E010000      mov     word ptr [esp+19E], ax               ; |
00401851  |.  E8 84160000             call    <jmp.&WS2_32.#2_bind>                ; \bind
修改后固定使用 2020端口,这样世界就连通啦~
 
然后解决服首先应该想到务启动后没多久就自动停止的问题.
首先应该想到的就是 select 的超时,非常运气,果然如此,dbgvsvc检测到超时后就"自行了断"了,这可不行,应该继续检测等待啊.
so patch as following.
040191F  |.  E8 3C100000   call    dbgvsvc.00402960
00401924  |.  83C4 0C       add     esp, 0C
00401927  |.  85C0          test    eax, eax
00401929  |.  0F84 F5010000 je      dbgvsvc.00401B24
0040192F  |.  8D5424 78     lea     edx, dword ptr [esp+78]
00401933  |.  52            push    edx                                               ; /pTimeout
00401934  |.  53            push    ebx                                               ; |Exceptfds
00401935  |.  53            push    ebx                                               ; |Writefds
00401936  |.  8D8424 940000>lea     eax, dword ptr [esp+94]                           ; |
0040193D  |.  50            push    eax                                               ; |Readfds
0040193E  |.  6A 40         push    40                                                ; |nfds = 40 (64.)
00401940  |.  89B424 A00000>mov     dword ptr [esp+A0], esi                           ; |
00401947  |.  C78424 9C0000>mov     dword ptr [esp+9C], 1                             ; |
00401952  |.  C78424 8C0000>mov     dword ptr [esp+8C], 0A                            ; |
0040195D  |.  899C24 900000>mov     dword ptr [esp+90], ebx                           ; |
00401964  |.  E8 59150000   call    <jmp.&WS2_32.#18_select>                          ; \select
00401969  |.  83F8 FF       cmp     eax, -1
0040196C  |.  0F84 F7040000 je      dbgvsvc.00401E69
00401972  |.  8D8C24 880000>lea     ecx, dword ptr [esp+88]
00401979  |.  51            push    ecx
0040197A  |.  56            push    esi
0040197B  |.  E8 3C150000   call    <jmp.&WS2_32.#151___WSAFDIsSet>
00401980  |.  85C0          test    eax, eax
00401982  |.  0F84 E1040000 je      dbgvsvc.00401E69
只需修改一行代码
00401982  |.^\74 97                   \je      short dbgvsvc.0040191B
00401984  |.  90                      nop
00401985  |.  90                      nop
00401986  |.  90                      nop
00401987  |.  90                      nop
OK,这样超时后继续进入等待.
 
还剩下一个问题,如果一旦连接,客户端断开,那么服务也会自行了断.怎么办呢?由于代码跨度比较大,懒得patch了.反正一般连接上之后也不用反复断开再连上,实在需要的话,设置服务自动重启~.
现在重启服务端计算机,启动后客户端计算机可以立刻连上服务端,监视调试字符输出,此服务最大的用途是,可以接收即将关机时的调试输出.,当然,调试全屏程序也很方便.
 
enjoy this patch!
 
//================================================================
额外的,remove.bat:
@echo off
net stop "DebugViewService"
rem 强制结束服务
taskkill /f /im dbgvsvc.exe
rem 自带的这个删除不好用
::dbgvsvc.exe -remove
sc delete "DebugViewService"
del /F %systemroot%\system32\dbgv.sys
del /F %systemroot%\system32\dbgvsvc.exe
pause
 
 

搬家了,今天网络通啦

今天来安装ADSL了,速度还不错.
8月15日

随记

Windows Registry Editor Version 5.00
regedit4
 
会造成 hex(2)的处理不同

调试winlogon.exe时遇到的一个疑问

[628] <OnLoad_MSGINA>:PID:274,TID:77E77CC4,APP:\??\C:\WINDOWS\system32\winlogon.exe
[1144] <OnLoad_MSGINA>:PID:478,TID:77E77CC4,APP:C:\WINDOWS\system32\logonui.exe
不同的进程ID,相同的线程ID
 
 
 
8月12日

移植windowsXP的MSGINA到windows2000

最近顺利破解了windows2003的msgina,开启了它对LOGONUI.exe的支持.
今天继续练手(好久没crack了,难得遇到感兴趣的目标),今天花了一天的时间移植windowsXP的MSGINA到windows2000,到现在终于完成.说起来也不难,难在调试很麻烦,另外涉及patch的技巧的问题.
主要包含 GINA的接口,delayload的处理,dll的加载问题等.
 
接下来处理logonui.exe在windows2000的运行,希望也很顺利~~!,上图留念.
8月11日

5秒钟启动windows2003,并支持和XP一样的登录界面

1.Nod32 2.7的内核服务往往会卡住,将其设置 手动启动,并去掉NOD32的GUI的自动启动,写一个DelayLoader,启动系统后5秒再启动内核服务,10秒后再启动GUI,这样一般可以保证它们有充足的时间慢慢启动,随后对GUI进行内存patch,去掉部分提示(这个使用libBaeWnd类写,配合以前写驱动用的Service控制代码,哦,还有libhook,几分钟搞定)
 
2.破解 sfc_os.dll,关掉系统对系统盘的监视,当然也不再进行文件保护了,节约系统开销.(此破解方法源于网络上对XP的破解,开调试可以很快定位修改点)
 
3.破解Winlogon.exe,去掉激活校验,并可以删掉 OEMBin.* 4个文件,节约系统开销,也节约了20M左右的空间,另外,破解后可以方便的进行 Server 和WorkStation的切换.(使用antiwpa-2[1].0-winxp-2k3.zip,使用前把系统代码页切换到english,否则,程序会傻傻的.我的系统是english的但是代码页设置成了中文GBK,所以在这一步卡了一段时间)
 
4.破解 MSGINA.dll,使得在Server情况下也能正常使用LogonUI.exe,这一点不是为了加快启动速度,只是美化,因为除了这一点都可以通过注册表等设置成和XP一样,唯独这一点必须进行文件破解.破解后可以使用各种绚丽的登录界面,例如现在非常流行的Windows7的登录界面.(这是体力活,因为不想在ghost前安装VM,所以修改后得多次重启验证,做到能少修改则少修改,最终只需要修改4处代码即可在登录,注销,锁定等状态下使用绚丽的LoginUI.exe作为登录界面).
 
5.卸载掉内置的.net 1.0 1.1,我很反感.net,下载 dotnetfx_cleanup_tool,对其配置进行修改后可以方便的卸载掉2003系统内置的.net模块,如果需要恢复,命令行下输入: rundll32.exe setupApi, InstallHinfSection netfx_install 132 netfxocm.inf ,几秒钟即可恢复内置的.net,不需要重启.
 
6.删除 Distributed Transaction Coordinator,输入命令: rundll32.exe setupApi, InstallHinfSection dtc_uninstall 132 dtcnt5.inf,这个总是自动启动,删除比较省事
 
7.删除 pchealth,输入命令: rundll32.exe setupApi, InstallHinfSection DefaultUninstall 132 pchealth.inf,似乎从windowsMe开始的一个东西,但不知道何用,删之
 
8.清除开始菜单上的 outlook express图标,shmgrate.exe OCInstallHideOE
 
9.去掉Ctrl+Alt+Del,设成自动登录
 
// -----以下无关启动速度
10.这是为了更快的浏览网页,编译代码,安装RamDisc,分配给它768M,感觉足以.对不方便开启预编译的工程,效果很明显,VC8以后微软用一个聪明的办法优化了编译中间文件管理( mspdbsrv.exe ),效果不明显;对VC8以前的版本效果很好.IE的临时文件也指向这个磁盘
 
11. 去掉 TortoiseSVN 的Cache,可以极大提高explorer.exe的响应速度
 
OK,到此除了借助 windbg,ultraedit,基本没有使用外部工具,优化2003,在我的HP540上的Windows 2003 SE 可以在5秒进入桌面,并很快光标停止忙碌,fine!
共花了一个下午加一个晚上的时间搞定!
 
关键字: windows 2003,优化,提速,loginui,登录界面,login screen,optimize  
8月5日

无题

很久以前曾逆向了 QQ2009 早期版本的 CTXString,今天偶然阅读了 VC2008的IAtlStringMgr,CStringData,CStringT
一模一样,呵呵.