Skip to content
thawk edited this page Dec 16, 2020 · 2 revisions

Windows技巧

批处理

取脚本所在目录

REM 带最后的\
SET mypath=%~dp0
REM 去掉最后的\
echo %mypath:~0,-1%

取当前目录

%CD%

如果文件存在则删除

@REM File to be deleted
SET FileToDelete="C:\Folder\Filename.txt"

@Try to delete the file only if it exists
IF EXIST %FileToDelete% del /F %FileToDelete%

在本地进行编辑,通过psexec在远程进行编译

@ECHO OFF
set REMOTE_HOST=10.132.37.221
set CPU_COUNT=16
REM chcp 65001
set BOOST_ROOT=lib\cppf\common\3rd\boost_1_60_0

psexec \\%REMOTE_HOST% cmd /c (
        cd /d %CD%
        if not exist %BOOST_ROOT%\b2.exe (
            cd /d %CD%\%BOOST_ROOT%
            call bootstrap
            cd /d %CD%
        )
        call %BOOST_ROOT%\b2 -sBOOST_ROOT=%BOOST_ROOT% -j %CPU_COUNT% %*
)

计算MD5码

CertUtil -hashfile C:\TEMP\MyDataFile.img MD5

PowerShell验证代码

if ( $($(CertUtil -hashfile C:\TEMP\MyDataFile.img MD5)[1] -replace " ","") -eq "your_hash" ) { echo "ok" }

以另一个用户身份启动

@ECHO OFF
start "" "C:\Program Files (x86)\Dropbox\Client\Dropbox.exe"
RunAs /user:ebook /savecred "C:\Program Files (x86)\Dropbox\Client\Dropbox.exe"

touch文件/把文件时间改为当前时间

Changing the time and date of a file

If you want to assign the current time and date to a file without modifying the file, use the following syntax:

copy /b Source+,,

The commas indicate the omission of the Destination parameter.

百分号用%%进行转义

进程管理

  • 列出进程:tasklist

  • 杀进程:taskkill

    taskkill /pid 进程号
    taskkill /pid 进程号 /f
    

捕捉命令的输出

for /f "delims=" %%i in ('command') do set output=%%i

找一个命令(类似于Linux下的which)

where python

把console设为UTF-8编码

chcp 65001

PowerShell

启动一个有Visual Studio环境设置的powershell

由于VsDevCmd.bat只能在cmd.exe下执行不能在powershell下执行,因此只能反过来,先执行VsDevCmd.bat再执行powershell。

cmd.exe /k ""%VS120COMNTOOLS%VsDevCmd.bat" & powershell"

系统工具

XueTr

http://www.xuetr.com/

一个强大的手工杀毒工具,支持32位的2000、xp、2003、vista、2008和Win7操作系统。

作者QQ微博:http://t.qq.com/linxer 欢迎收听,以后XueTr情况会在这里发布。

本工具目前实现如下功能:

  • 进程、线程、进程模块、进程窗口、进程内存、定时器、热键信息查看,杀进程、杀线程、卸载模块等功能
  • 内核驱动模块查看,支持内核驱动模块的内存拷贝
  • SSDT、Shadow SSDT、FSD、KBD、TCPIP、Classpnp、Atapi、Acpi、SCSI、IDT、GDT信息查看,并能检测和恢复ssdt hook和inline hook
  • CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等Notify Routine信息查看,并支持对这些Notify Routine的删除
  • 端口信息查看,目前不支持2000系统
  • 查看消息钩子
  • 内核模块的iat、eat、inline hook、patches检测和恢复
  • 磁盘、卷、键盘、网络层等过滤驱动检测,并支持删除
  • 注册表编辑
  • 进程iat、eat、inline hook、patches检测和恢复
  • 文件系统查看,支持基本的文件操作
  • 查看(编辑)IE插件、SPI、启动项、服务、Host文件、映像劫持、文件关联、系统防火墙规则、IME
  • ObjectType Hook检测和恢复
  • DPC定时器检测和删除
  • MBR Rootkit检测和修复
  • 内核对象劫持检测
  • WorkerThread枚举

Windows Remote Management

  • 在服务器上运行:

    winrm quickconfig

    按提示操作

  • 在服务器上自检验

    • 监听情况(没输出表示没有监听)

      winrm e winrm/config/listener
    • 本地ping

      winrm id
    • 检查winrm配置

      winrm get winrm/config
    • 检查winrm服务的状态

      winrm get wmicimv2/Win32_Service?Name=WinRM
  • 在客户机上,把服务器地址加入TrustedHosts

    winrm set winrm/config/client @{TrustedHosts="192.168.74.170"}
    • 远程ping(在客户端上执行)

      winrm id -r:machinename -u:Administrator

psexec

一次执行多条命令

psexec \\192.168.74.170 cmd /c (cd /d t:\workspace\cs ^& dir)

kms

py-kms

打开Crash Dump

自从Windows2008/Windows Vista SP1 开始,Windows自身就开始提供Windows Error Reporting,在注册表中进行配置后,当user-mode application crash之后,Windows会自动抓取Crash Dump并保存在指定目录下。

这个功能在Windows中默认是关闭的,想打开的话修改方式如下:

  • 运行Regedit

  • 找到这个: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

  • 有四个值需要配置:

    • Value:DumpFolder, Type:REG_EXPAND_SZ - 顾名思义,就是存储dump的位置

    • Value:DumpCount, Type:REG_DWORD - 最大保留的dump个数,默认为10.

    • Value:DumpType, Type:REG_DWORD - Dump类型,0:Custom dump, 1: Mini dump, 2: Full dump. 默认值为1

    • Value:CustomDumpFlags, Type:REG_DWORD - 没怎么用,暂时不解释。

NOTE: 详细内容可以参见MSDN: http://msdn.microsoft.com/en-us/library/bb787181(VS.85).aspx

windows THISCALL calling convention

windbg

windbg

包管理器

  • Chocolatey

    https://chocolatey.org/

    @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

mintty

openssh依赖以下dll

  • cygcom_err-2.dll
  • cygcrypto-1.0.0.dll
  • cyggcc_s-1.dll
  • cyggssapi_krb5-2.dll
  • cygiconv-2.dll
  • cygintl-8.dll
  • cygk5crypto-3.dll
  • cygkrb5-3.dll
  • cygkrb5support-0.dll
  • cygssp-0.dll
  • cygwin1.dll
  • cygz.dll

使用keeagent

export SSH_AUTH_SOCK="C:\path\to\socket\file"

需要安装openssh

利用mintty+ssh

安装cygwin,只选择mintty和openssh。

通过命令行传入正确的SSH_AUTH_SOCK:

d:\cygwin64\bin\mintty.exe /usr/bin/env SSH_AUTH_SOCK=/cygdrive/c/Users/%USERNAME%/cygwin.sock /bin/ssh %USERNAME%@server

cygwin上, ~/.ssh/config 中可以开启ForwardAgent,这样就可以用本地的Agent进行身份验证了。

mkdir ~/.ssh
chmod 700 ~/.ssh
cat > ~/.ssh/config <<EOS
ForwardAgent yes
EOS

可以设置 ~/.minttyrc ,使用base16-solarized-dark配色:

cat > ~/.minttyrc <<EOS
BoldAsFont=yes
Font=Powerline Consolas
FontHeight=13
Term=xterm-256color
BackgroundColour=0,43,54
ForegroundColour=131,148,150
Black=7,54,66
BoldBlack=0,43,54
Red=220,50,47
BoldRed=203,75,22
Green=133,153,0
BoldGreen=88,110,117
Yellow=181,137,0
BoldYellow=101,123,131
Blue=38,139,210
BoldBlue=131,148,150
Magenta=211,54,130
BoldMagenta=108,113,196
Cyan=42,161,152
BoldCyan=147,161,161
White=238,232,213
BoldWhite=253,246,227
CursorType=block
Locale=C
Charset=UTF-8
EOS

TotalCmd

CTRL-G使用ConEmu打开

  • totalcmd中,Configuration-Options-Misc,Hotkey中选择Control+G,在下面Command中点放大镜,打开Choose Command对话框。
  • 左边选择usercmd.ini
  • 新建命令em_ConEmu ** Command: ConEmu可执行文件。如C:\GreenSoft\ConEmu\ConEmu.exe ** Parameters: /Single -cmd cmd ** Start path: 留空,使用当前路径

OpenVPN

OpenVPN GUI的快捷方式

"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect home.ovpn --config_dir e:\local\vpn

增加Windows启动时要启动的应用

Win-R,运行shell:Startup可以打开StartUp文件夹。

gitconfig

git config --global core.autocrlf true
git config --global push.default simple
git config --global credential.helper wincred

BashOnWindows

/home的位置

C:\Users\tanht\AppData\Local\lxss\home\

重置/Reset

lxrun /uninstall /full
lxrun /install

SSH进Bash

  • sudo apt-get remove openssh-server

  • sudo apt-get install openssh-server

  • sudo vi /etc/ssh/sshd_config and disallow root login by setting PermitRootLogin no

    Then add a line beneath it that says:

    AllowUsers yourusername
    

    and make sure PasswordAuthentication is set to yes if you want to login using a password.

    Disable privilege separation by adding/modifying : UsePrivilegeSeparation no

  • sudo service ssh --full-restart

mintty终端

可以把 .minttyrc 放到 %LOCALAPPDATA%\wsltty 下。

快捷方式

  • bash

    %LOCALAPPDATA%\wsltty\bin\mintty.exe -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l
  • zsh

    %LOCALAPPDATA%\wsltty\bin\mintty.exe -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash --norc --noprofile -c /usr/bin/zsh

使用keeagent

需要安装socat

#!/usr/bin/env sh

# If MSYSGIT socket in keeagent is set as c:\Users/foo/Documents/ssh_auth_msysgit
SSH_AUTH_KEEAGENT_SOCK=/mnt/c/Users/$USER/keepass.sock

if [ -e "$SSH_AUTH_KEEAGENT_SOCK" ]
then
    SSH_AUTH_KEEAGENT_PORT=`sed -r 's/!<socket >([0-9]*\b).*/\1/' ${SSH_AUTH_KEEAGENT_SOCK}`

    #use socket filename structure similar to ssh-agent
    #ssh_auth_tmpdir=`mktemp --tmpdir --directory keeagent-ssh.XXXXXXXXXX`
    #export SSH_AUTH_SOCK="${ssh_auth_tmpdir}/agent.$$"
    export SSH_AUTH_SOCK="/tmp/keeagent.sock"
    SSH_AUTH_LOCK_FILE=/var/lock/keeagent.lock

    # remove sock file if only sock exists, and lock file is not exists.
    if [ ! -e "${SSH_AUTH_LOCK_FILE}" ]
    then
        [ -e "${SSH_AUTH_SOCK}" ] && rm "${SSH_AUTH_SOCK}"

        (socat -L"${SSH_AUTH_LOCK_FILE}" UNIX-LISTEN:"${SSH_AUTH_SOCK}",mode=0600,fork,shut-down TCP:127.0.0.1:${SSH_AUTH_KEEAGENT_PORT},connect-timeout=2 </dev/null >/dev/null 2>/dev/null &) &
    fi

    unset SSH_AUTH_LOCK_FILE
fi

使用zsh作为缺省shell

https://github.com/Microsoft/BashOnWindows/issues/846

  • 修改用户的缺省shell

    chsh -s /usr/bin/zsh
  • 创建快捷方式

    %windir%\System32\bash.exe ~ -c /usr/bin/zsh

关注软件

Office激活密钥

http://www.officezhushou.com/office-key/

Office 2013 Pro Plus Vol 版MAK激活密钥:

  • BT289-PN344-W3M64-4P9V3-8K6XV

Office 2013 Visio Standard Vol 版MAK激活密钥:

  • 39GQF-N63MD-TJXHX-FPB8F-HQT2J

删除系统目录

以管理员身份打开命令行终端,运行

Takeown /r /f C:\Windows\CSC
rd /s C:\Windows\CSC

登录时不要求按“Ctrl-Alt-Delete

  • 运行 netplwiz
  • 高级 - 安全登录 - 要求用户按Ctrl-Alt-Delete

禁用Windows的快速启动(fast startup)功能

在快速启动启用时,关机重启后,VesaCrypt/TrueCrypt可能会直接mount,造成不安全。

  • 控制面板上,找“电源与睡眠”
  • “其它电源设置”
  • “选择电源按钮的功能”
  • “更改当前不可用的设置”
  • 禁用“关机设置”-“启用快速启动”

Windows 7

隐藏登录界面上不需要的用户名

HKEY_LOCAL_MACHING\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ 下建立Winlogon\SpecialAccounts\UserList节点,在其下建立一个DWORD 32位的值,键名设置为不想在界面上显示的用户名(如administrator),值设 为0。

自动登录

  • 运行netplwiz,打开高级用户控制面板
  • 在高级用户控制面板中,取消对“要使用本机,用户需输入用户名和密码(E)”项的勾选
  • 系统将弹出窗口要求输入默认登录系统的用户名和密码,输入完成后点击确定
  • 重启Windows 7,即可发现系统自动以默认用户登录

登录时要求必须输入用户名

  • Pro版以上

    • 运行gpedit.msc,打开组策略管理
    • 依次展开“计算机配置”下的“windows设置”--“安全设置”--“本地策略”--“安全选项”
    • 找到“交互式登录: 不显示最后的用户名”后右键,选择已启用
    • 重启
  • Home版

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
    • dontdisplaylastusername改为1

Windows目标版本号

NTDDI_VERSION

要求的最低系统版本 NTDDI_VERSION的最小值
Windows 8.1 NTDDI_WINBLUE (0x06030000)
Windows 8 NTDDI_WIN8 (0x06020000)
Windows 7 NTDDI_WIN7 (0x06010000)
Windows Server 2008 NTDDI_WS08 (0x06000100)
Windows Vista with Service Pack 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 with Service Pack 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 with Service Pack 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP with Service Pack 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP with Service Pack 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
Windows XP with Service Pack 1 (SP1) NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)

_WIN32_WINNTWINVER

最低系统版本 _WIN32_WINNT and WINVER的最小值
Windows 8.1 _WIN32_WINNT_WINBLUE (0x0602)
Windows 8 _WIN32_WINNT_WIN8 (0x0602)
Windows 7 _WIN32_WINNT_WIN7 (0x0601)
Windows Server 2008 _WIN32_WINNT_WS08 (0x0600)
Windows Vista _WIN32_WINNT_VISTA (0x0600)
Windows Server 2003 with SP1, Windows XP with SP2 _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003, Windows XP _WIN32_WINNT_WINXP (0x0501)

_WIN32_IE

最低版本 _WIN32_IE的最小值
Internet Explorer 10.0 _WIN32_IE_IE100 (0x0A00)
Internet Explorer 9.0 _WIN32_IE_IE90 (0x0900)
Internet Explorer 8.0 _WIN32_IE_IE80 (0x0800)
Internet Explorer 7.0 _WIN32_IE_IE70 (0x0700)
Internet Explorer 6.0 SP2 _WIN32_IE_IE60SP2 (0x0603)
Internet Explorer 6.0 SP1 _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5.5 _WIN32_IE_IE55 (0x0550)
Internet Explorer 5.01 _WIN32_IE_IE501 (0x0501)
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE_IE50 (0x0500)

取Windows版本号的方法

  • Part1: Overcoming Windows 8.1's deprecation of GetVersionEx and GetVersion APIs ** GetVersionEx()VerifyVersionInfo()在高版本中都只能返回6.2(Windows 2008) ** NetWkstaGetInfo()在各种情况下(包括兼容模式)下都能正确取出版本号,但只能拿到Major和Minor版本号,没有其他信息 ** RtlGetVersion()可以拿到准确的信息,但在兼容模式下会返回兼容版本号(如Windows XP对应的版本号)

  • Reliable way to get Windows Version from registry

    通过HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CurrentVersion"下的值可以取得版本号

    ** 旧版本通过CurrentVersion读取 ** 高版本可以通过CurrentMajorVersionNumber/CurrentMinorVersionNumber读取

判断Windows是否64位

BOOL Is64BitWindows()
{
#if defined(_WIN64)
    return TRUE;  // 64-bit programs run only on Win64
#elif defined(_WIN32)
    // 32-bit programs run on both 32-bit and 64-bit Windows
    // so must sniff
    BOOL f64 = FALSE;
    return IsWow64Process(GetCurrentProcess(), &f64) && f64;
#else
    return FALSE; // Win64 does not support Win16
#endif
}

移动关键目录

移动Chrome的profile目录

缺省位于: C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\Default

  • 移动上述profile目录到需要的地方,如“C:\Profiles\user\Default”

  • 启动命令改为

    C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe --user-data-dir="C:\\Profiles\\user"

    NOTE: 指定Default的上一层目录。

VC相关

LNK1318: Unexpected PDB error; OK (0)

for /F "tokens=2 delims= " %%I in ('tasklist^|findstr /I "mspdbsrv.exe"') do taskkill /F /PID %%I>NUL && echo VS debug symbol server killed.

输入法

给微软拼音添加了小鹤双拼方案

  • 首先打开注册表,找到这个路径

    计算机\HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS

  • 然后新建一个名为UserDefinedDoublePinyinScheme0的字符串值,数值数据为

    小鹤双拼*2*^*iuvdjhcwfg^xmlnpbksqszxkrltvyovt

  • 打开控制面板,找到微软拼音的配置页面,把新出现的小鹤双拼设置为默认值。

    直接修改注册表的最大意义在于,不需要自己一个个去定义按键和音节的对应关系了。

每个应用单独默认英文输入法

  • 想达到的效果

    每个程序打开时,都默认是英文输入法,需要时才切换到中文输入法。

  • 到输入法配置的“高级配置”里去修改

    • 修改默认为英文输入法
    • 勾选“允许我为每个应用窗口使用不同的输入法”
Clone this wiki locally