关于程序员:windows命令混淆

86次阅读

共计 2361 个字符,预计需要花费 6 分钟才能阅读完成。

最近有些敌人问我一些免杀问题,因为集体技术无限,对动态免杀有些理解(动静免杀真的不会,太菜了),所以就总结了一些 Windows 中 cmd 的命令混同思路,动态免杀无非就是对安全设备检测到代码(命令)中的特色字符进行查杀、过滤,首先做的就是对于特色字符的解决,随后就是对环境中限度的字符替换或混同,从而达到免杀成果。

(1) 选项字符替换

​ CMD 命令中能够执行 ping 命令,该命令是由 unix 零碎移植过去的,帮忙页面倡议命令行选项应应用连字符作为选项字符,例如 ping -n 1 127.0.0.1. 这与大多数其余应用正斜杠的 Windows 原生命令行工具不统一。大略是为了帮忙有疑难的用户,该程序还承受正斜杠作为选项比方 ping /n 1 127.0.0.1 也能运行的。

大多数应用连字符的内置 Windows 可执行文件也承受正斜杠,但有的命令却不能够,例如 find /i keyword,该命令将显示蕴含单词“keyword”的所有文件,但 find -i keyword 会提醒语句谬误。

(2) 字符替换

Unicode 修饰符替换

​ 另一种办法是用相似的字符替换命令行中的其余字符(即除了选项字符之外)。特地是当你思考整个 Unicode 范畴时,在某些过程可能承受的 ASCII 范畴中还发现了许多字母变体。

波及到的 Unicode 字符 ʱ ʰ ʲ ʳ ʷ ʸ ˢ ˣ ˡ

ʷ 润饰字母小写 W

ʸ 润饰字母小写 Y

ʰ 润饰字母小写 H

ʱ 带钩的润饰字母小写 H

ʲ 润饰字母小写 J

ʳ 润饰字母小写 R

ˡ 润饰字母小写 L

ˢ 润饰字母小写 S

ˣ 润饰字母小写 X

​ Unicode 蕴含一个间距润饰字母范畴 (0x02B0 – 0x02FF) [4],其中包含 ˪、ˣ 和 ˢ 等字符。一些命令行解析器将它们辨认为字母并将它们别离转换回 l、x 和 s。这方面的一个例子是 reg,它将 reg export HKCU out.reg 和 reg eˣport HKCU out.reg 视为平等。

因为编码问题显示 ˣ 为方框

逗号、分号替换空格

​ 应用 ;(分号)和 ,(逗号)替换非法空格,然而在某些命令中无奈替换,例如:net user 会提醒语法错误。

(3) 字符插入

​ 同样,有时能够在命令行中插入额定的字符,这些字符将被执行程序疏忽。例如,某些可执行文件可能会删除不可打印的字符,同时也可能会过滤掉某些可打印的字符。

​ 例如,Windows 事件日志工具 wevtutil 仿佛承受在随机地位插入某些范畴内的 Unicode 字符(ࢯ)的命令行。因而执行 wevtutil gli hardwareeventsandwevtutil gࢯli hardwareevents 将产生完全相同的输入,只管后者在第一个参数的两头蕴含一个阿拉伯字母。

​ 还有常见的 ^ 转义字符插入

​ 插入多个 (),也不会影响命令运行

(4) 行情插入

在放弃流程残缺的同时操纵命令行的另一种办法是插入引号。只管这听起来像是先前技术的一个子集,但这里的要求是引号成对呈现。

您可能相熟在参数四周加上引号的概念。就拿 dir “c:\windows\” 例如,这是无效的一样 dir c:\windows\,因为不足空间。大多数程序都承受这个约定。鲜为人知的是,大多数程序在任意地位承受引号:该命令 dir c:\”win”d””ow”s” 也能够工作。只有每个参数的引号数是偶数并且前面的引号不超过两个,大多数程序仿佛都承受这一点。

(4) 环境变量

​ 在 cmd 命令行中反对设置环境变量和自定义变量,应用环境变量中的值或字符串能够拼接成想要的命令。例如 whoami,将 am 设置变量为 t,将命令拼接成 who%t%i,执行胜利。

利用 @在 cmd 中的个性,@示意前面的命令不显示执行

(5) 参数缩写

​ 插入和替换字符后,咱们还须要尝试删除字符。一些应用程序容许为其余简短的命令行选项提供“速记”,从而更容易记住这些命令,或者缩短命令字符个数。

​ 这是基于 Unix 的工具(例如 grep -i keywordvs grep –ignore-case keyword)中的一个家喻户晓的概念,但在 Windows 上则不然。然而,一些程序承受缩短的版本。有些程序采纳与 Unix 相似的办法并承受单字母版本(例如 cmdkey /lvs cmdkey /list),有些程序承受其余缩写版本(例如 wevtutil glivs wevtutil get-loginfo),而其余程序则采纳“通配符办法”。这方面的一个例子是 PowerShell,它的许多关键字容许您在关键字 [5] 的开端省略一个或多个字符。

​ 须要留神的是有些命令的缩写会呈现一些抵触。能够查看 powershell 相干文档。

​ 免杀的办法有很多,只有思路灵便,动态免杀很容易的。

​ 命令混同工具曾经有好多大佬开发进去了,具体用法大家能够本人钻研(网上曾经有很多了),命令混同过动态免杀很简略,在这里提供一个简略的样例供大家参考。

下载地址:https://github.com/danielboha…

大略应用办法也很简略。

下载文件后再当前目录运行 powershell,导入应用的模块 Import-Module .\Invoke-DOSfuscation.psd1;

再运行程序 Invoke-DOSfuscation;

能够查看工具的根本应用办法 TUTORIAL

  1. Set command __ // 设置须要混同的命令
  2. Set FINALBINARY______ // 设置命令运行的环境
  3. 加载混同模块,(能够查看下当前目录下的文件夹,不同文件有不同的混同成果)
  4. 应用 show 命令查看以后命令设置的参数状况

\5. 能够应用 test 命令再以后窗口进行测试混肴过后的命令;

  1. 复测下再 cmd 中运行的后果;

​ 其中有很多混同办法,能够本人看下教程,在这里就不一一举例了。混同只是能够过一些动态面纱,动态免杀无非就是针对特色字符的解决,动态免杀的办法千千万,基本原理不会变,这里只是提供一种思路,供大家参考。

正文完
 0