文章总结: ThisarticledetailsPowershellbasicsyntaxandregistryoperationstolaythefoundationformaliciouscodedetection.Itcoverscomparisonandlogicaloperators,conditionalstatementslikeifandswitch,loopstructuresincludingforeachandwhile,arraydefinitionsandaccess,customfunctioncreation,andstringmanipulationtechniqueslikesplittingandreplacing.Additionally,itexplainshowtoaccesstheWindowsRegistryusingproviderdrives,listingkeys,andreadingproperties.Thecontentservesasaneducationalguideforunderstandingscriptingmechanicsessentialforsecurityanalysisanddetectingmaliciousbehavior. 综合评分: 83 文章分类: 安全培训,恶意软件,终端安全
[系统安全]%20四十一.Powershell恶意代码检测系列%20(2)Powershell基础语法和注册表操作
原创
eastmount eastmount
娜璋AI安全之家
2022年11月29日%2018:44 湖北
该系列文章将系统整理和深入学习系统安全、逆向分析和恶意代码检测,文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。漫漫长征路,偏向虎山行。享受过程,一起加油~
前文分享了Powershell基础入门知识,涉及基础概念、管道和重定向、执行外部命令、别名用法、变量定义等。这篇文章将从Powershell条件语句、循环语句、数组、函数%20、字符串操作、注册表访问等方面讲解。Powershell被广泛应用于安全领域,甚至成为每一位Web安全必须掌握的技术。本文参考了Bilibili的Hack学习老师的课程,同时也结合了作者之前的编程经验进行讲解。作者作为网络安全的小白,分享一些自学基础教程给大家,希望你们喜欢。同时,这些大佬是真的值得我们去学习,献上小弟的膝盖~fighting!
- 只有更深入的了解PowerShell基础及用法,才能更好地检测恶意代码
文章目录:
-
一.Powershell操作符
-
二.Powershell条件语句
1.if条件判断
2.switch语句
-
三.Powershell循环语句
1.foreach循环
2.while循环
3.break和continue关键词
4.for循环
5.switch循环
-
四.Powershell数组
1.数组定义
2.访问数组
-
五.Powershell函数
1.自定义函数及调用
2.函数返回值
-
六.Powershell字符串及交互
1.定义文本及转义字符
2.用户交互
3.格式化字符串
4.字符串操作
-
七.Powershell注册表操作
-
八.总结
作者的github资源:
-
逆向分析:
https://github.com/eastmountyxz/
SystemSecurity-ReverseAnalysis
-
网络安全:
https://github.com/eastmountyxz/
NetworkSecuritySelf-study
作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔!
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。(参考文献见后)
一.Powershell操作符
常见的比较运算符包括:
- -eq%20等于
- -ne%20不等于
- -gt%20大于
- -lt%20小于
- -le%20小于等于
- -contains%20包含
- -notcontains%20不包含
67%20-eq%205050%20-eq%20501gb%20-gt%201tb(1,2,3)%20-contains%201(1,2,3)%20-contains%202(1,2,3)%20-contains%204
求反运算符:
- -not
$a=89%20-gt%2050$a-not%20$a
逻辑运算:
- -and%20与运算
- -or%20或运算
- -not%20非运算
- -xor%20异或运算
$true%20-and%20$true$true%20-and%20$false$true%20-or%20$false$false%20-or%20$false-not%20$true$true%20-xor%20$true
比较数组和集合,从中筛选出不等于0的数字。
1,5,8,0,9%20-ne%200
二.Powershell条件语句
1.if条件判断
if-elseif-else条件判断,执行操作用大括号表示。
$num=100if($num%20-gt%2090)%20{"大于90"}%20else%20{"小于等于90"}if($num%20-gt%20100)%20{"大于100"}%20else%20{"小于等于100"}
注意,if-else中间可以增加新的判断elseif,如下所示:
if($num%20-gt%20100)%20{"大于100"}%20elseif%20($num%20-eq%20100)%20{"等于100"}%20else%20{"小于100"}
2.switch语句
Switch语句主要用于多种情况的判断,这里在本地创建一个test01.ps1文件,并执行该代码。
传统的if判断如下:
$num=56if($num%20-gt%2050%20-and%20$num%20-lt%2060)%20{%20%20%20%20"大于50并且小于60"}%20elseif%20($num%20-eq%2050)%20{%20%20%20%20"等于50"}else{%20%20%20%20"小于50"}
去到桌面1019文件夹,输入“.\test01.ps1”执行代码,再打印该文件的源代码。
switch语句如下:$_表示对变量取值。
$num=56switch($num){%20%20%20%20{$_%20-lt%2050}%20{"此数值小于50"}%20%20%20%20{$_%20-eq%2050}%20{"此数值等于50"}%20%20%20%20{$_%20-gt%2050}%20{"此数值大于50"}}
三.Powershell循环语句
1.foreach循环
这里定义数组采用“$arr=1…10”实现,表示1到10的数字,在调用foreach循环输出。
$arr=1..10foreach%20($n%20in%20$arr){%20$n*$n%20}
定义文件“test03.ps1”,只输出偶数内容。
$arr=1..10foreach%20($n%20in%20$arr){%20%20%20%20if%20(($n%2)%20-eq%200%20)%20%20%20%20{%20%20%20%20%20%20%20%20$n%20%20%20%20}}
接着利用foreach操作文件目录,将C盘python34文件夹下的路径全部提取出来,赋值到file中输出。
foreach%20($file%20in%20dir%20c:\python34){%20%20%20%20if($file.length%20-gt%201kb)%20%20%20%20{%20%20%20%20%20%20%20%20$file.name%20%20%20%20%20%20%20%20$file.length%20%20%20%20}}
原始文件内容如下所示:
也可以定义变量来指定路径
$path_value%20=%20dir%20c:\python34foreach%20($file%20in%20$path_value){%20%20%20%20if($file.length%20-gt%201kb)%20%20%20%20{%20%20%20%20%20%20%20%20$file.name%20%20%20%20%20%20%20%20$file.length%20%20%20%20}}
#
2.while循环
while循环需要注意循环的终止条件,防止出现死循环,而do_while循环是先执行一次循环体,再进行判断。
下面这段代码是经典运算:1+2+3+…+99,文件名为“test05.ps1”。
$i=1$s=0while($i%20-lt%20100){%20%20%20%20$s%20=%20$s%20+%20$i%20%20%20%20$i%20=%20$i%20+%201}$s$i
do_whlie先执行循环体,再进行条件判断,如下所示:
$num=15do{%20%20%20%20$num%20%20%20%20$num=$num-1}while($num%20-gt%2010)
3.break和continue关键词
break跳出整个循环,停止执行;continue跳出当前循环一次,继续执行下一个判断。
break:下面这个代码当数值小于6继续执行,当其等于4停止循环。
$i=1while($i%20-lt%206){%20%20%20%20if($i%20-eq%204)%20%20%20%20{%20%20%20%20%20%20%20%20break%20%20%20%20}%20%20%20%20else%20%20%20%20{%20%20%20%20%20%20%20%20$i%20%20%20%20%20%20%20%20$i++%20%20%20%20}}
continue:跳过了中间等于4的内容。
$i=1while($i%20-lt%206){%20%20%20%20if($i%20-eq%204)%20%20%20%20{%20%20%20%20%20%20%20%20$i++%20%20%20%20%20%20%20%20continue%20%20%20%20}%20%20%20%20else%20%20%20%20{%20%20%20%20%20%20%20%20$i%20%20%20%20%20%20%20%20$i++%20%20%20%20}}
#
4.for循环
利用for循环实现1+2+…+100的代码如下(test09.ps1)。
$sum=0for($i=1;$i%20-le%20100;$i++){%20%20%20%20$sum=$sum+$i}$sum
学习Powershell基础语法之后,更重要的是解决实际问题,后续作者将继续深入学习。
5.switch循环
使用switch循环实现输出数组1到10,并进行奇数和偶数判断。
$num=1..10switch($num){%20%20%20%20default{"number=$_"}}
$num=1..10switch($num){%20%20%20%20{($_%20%%202)%20-eq%200}%20{"$_%20数值是偶数"}%20%20%20%20{($_%20%%202)%20-ne%200}%20{"$_%20数值是奇数"}}
四.Powershell数组
1.数组定义
数组定义一种方法是逗号隔开不同的元素,另一种是通过两个点来定义数组。
$arr=1,2,3,4,5$arr=1..5
判断是否是一个数组,使用如下语句。
$arr%20-is%20[array]
数组可以接受不同的数值。
$arr=1,3.14,"yangxiuzhang"$arr$arr%20-is%20[array]
空数组定义如下:
$arr=@()$arr$arr%20-is%20[array]
下面简单比较只有一个元素数组和变量的对比。
$arr=,"hello"$arr$arr%20-is%20[array]
$arr=1$arr$arr%20-is%20[array]
数组也可以是一个变量或命令,此时它仍然是一个数组。
$arr=ipconfig$arr$arr%20-is%20[array]
2.访问数组
首先定义一个多钟类型的数组。
$arr=1,"hello%20world",(get-date)$arr
访问数组特定元素,第一个元素,获取两个元素,获取最后一个元素。
$arr[0]$arr[0,1]$arr[-1]
//提取部分元素$arr[0..2]
获取数组元素大小调用count实现。
$num%20=%20$arr[0..2]$num.count
如何将数组倒序输出呢?如下所示。
$arr[($arr.count)..0]
数组添加一个元素代码如下:
$arr=1,"hello%20world",(get-date)$arr+="csdn"$arr$arr.count
更多数组操作,推荐读者结合实际应用进行学习。
五.Powershell函数
1.自定义函数及调用
函数通常包括函数名、参数、函数体,下面是定义及调用一个myping函数的代码(test11.ps1)。
function%20myping(){%20%20%20%20ping%20www.baidu.com%20%20%20}
myping
同样,上面的代码可以修改为指定参数。
function%20myping($site){%20%20%20%20ping%20$site}myping%20www.baidu.com
下面这个代码是接收两个参数并显示的功能。
function%20myinfo($name,$age){%20%20%20%20$info="I%20am%20$name,%20and%20i%20am%20$age%20years%20old."%20%20%20%20write-host%20$info}myinfo%20yxz,28
2.函数返回值
函数返回值通过return实现,可以返回多个值。下面是test13.ps1例子。
function%20add($num1,$num2){%20%20%20$sum=$num1+$num2%20%20%20return%20$sum}add%202%204
function%20fun($num1,$num2){%20%20%20$sum=$num1+$num2%20%20%20$sum.gettype()%20%20%20$sum.gettype().fullname%20%20%20return%20$sum}fun%202.2%204.3
//多个返回值function%20other($num1,$num2,$num3){%20%20%20%20$value=$num1,$num2,$num3%20%20%20%20return%20$value}other%202.2%204%206
六.Powershell字符串及交互
1.定义文本及转义字符
表达式中可以定义只,如下所示。同时,单引号和双引号可以相互嵌套,这和JAVA、PHP、Python中的变量套接类似。
"hello%20world%20$(get-date)""hello%20world%20$(5*7)""hello,%20my%20name%20is%20'yangxiuzhang'"
输出结果如下图所示:
在Powershell中,转义字符不再是斜杠(\)而是(`),如下所示。
- `n%20换行
- `r%20回车符
- `t%20tab键
- `b%20退格符
- `’%20单引号
"hello,`n%20my%20name%20is%20`'yangxiuzhang`'"
2.用户交互
read-host%20读取用户的输入。
$input%20=%20read-host%20"请输入您的姓名""您好!您输入的姓名是:$input"
3.格式化字符串
传统的多个变量输出方法:
$name="yangxiuzhang"$age=25$body="strong"$height=1.72"My%20name%20is%20$name,%20i%20am%20$age%20years%20old,%20and%20my%20body%20is%20$body,%20my%20height%20is%20$height"
格式化字符串输出方法:
"My%20name%20is%20{0},%20i%20am%20{1}%20years%20old,%20and%20my%20body%20is%20{2},%20my%20height%20is%20{3}"%20-f%20$name,$age,$body,$height
4.字符串操作
任何编程语言,都绕不过字符串操作,在网络安全领域,获取ip地址、URL拼接、图片或脚本文件获取等都涉及字符串操作,下面进行简单分享。
字符串分割
$str="c:\windows\system32\demo.txt"$str.split("\")//数组类型,可以通过数组下标访问$str.split("\").gettype()
获取图片名称
$str="https://blog.csdn.net/Eastmount/102781411/logo.png"$str.split("/")[-1]
其他操作如下:
//获取下标$str.indexof("s")
//字符插入$str.insert(4,"yxz")
//字符串替换$str.replace("n","N")
七.Powershell注册表操作
注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。
在CMD中输入regedit即可打开注册表,如下图所示。
注册表图形化界面显示如下,包括各种程序的配置信息,不能随便修改它,很容易造成系统故障。
- HKEY_CLASSES_ROOT:定义文档的类型\类以及与类型关联的信息以及COM组件的配置数据
- HKEY_CURRENT_USER:包含当前登录到Windows的用户的配置信息
- HKEY_LOCAL_MACHINE:包含与计算机相关的配置信息,不管用户是否登录
- HKEY_USERS:包含有关默认用户配置的信息
- HKEY_CURRENT_CONFIG:包含有关非用户特定的硬件的配置信息
在Powershell中显示注册表指令如下:
cd hkcu:dir
对应注册表图形界面。
cd systemdir
对应图形界面。
其他访问也类似。
cd HKLM:
对应图形界面:
读取键值
get-itemproperty
设置键值
set-itemproperty
由于注册表不能随便修改,很容易造成系统故障,后续随着作者深入学习,了解更多网络安全中Powershell及注册表工作再来分享,希望读者喜欢该系列文章。
八.总结
写到这里,这篇文章就介绍完毕,希望您喜欢,本文主要介绍PowerShell基础之后,这将为后续PowerShell恶意代码检测提供基础。文章非常长,作者也花费了很长时间,但相信只要你认真读完,肯定会有收获,尤其是对MSF的理解。
- 一.Powershell操作符
- 二.Powershell条件语句
- 三.Powershell循环语句
- 四.Powershell数组
- 五.Powershell函数
- 六.Powershell字符串及交互
- 七.Powershell注册表操作
这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。爱你们喔,祝大家安好。
(By:Eastmount 2022-11-29 夜于火星)
参考文献,感谢这些大佬。
- [1] https://www.bilibili.com/video/av66327436 [推荐B站老师视频]
- [2]《安全之路Web渗透技术及实战案例解析》陈小兵老师
- [3] https://baike.baidu.com/item/Windows Power Shell/693789
- [4] https://www.pstips.net/powershell-piping-and-routing.html
- [5] https://www.pstips.net/using-the-powershell-pipeline.html
- [6] 微软官方PowerShell文档
- [7] C# 系统应用之注册表使用详解 – Eastmount
前文回顾(下面的超链接可以点击喔):
- [系统安全] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
- [系统安全] 二.如何学好逆向分析及吕布传游戏逆向案例
- [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战
- [系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向破解
- [系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
- [系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制
- [系统安全] 七.逆向分析之PE病毒原理、C++实现文件加解密及OllyDbg逆向
- [系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及蓝屏攻击
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度提权
- [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现
- [系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析
- [系统安全] 十二.熊猫烧香病毒IDA和OD逆向分析(上)病毒初始化
- [系统安全] 十三.熊猫烧香病毒IDA和OD逆向分析(中)病毒释放机理
- [系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析(下)病毒感染配置
- [系统安全] 十五.Chrome密码保存功能渗透解析、Chrome蓝屏漏洞及音乐软件漏洞复现
- [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
- [系统安全] 十七.Windows PE病毒概念、分类及感染方式详解
- [系统安全] 十八.病毒攻防机理及WinRAR恶意劫持漏洞(bat病毒、自启动、蓝屏攻击)
- [系统安全] 十九.宏病毒之入门基础、防御措施、自发邮件及APT28宏样本分析
- [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
- [系统安全] 二十一.PE数字签名之(中)Signcode、PEView、010Editor、Asn1View工具用法
- [系统安全] 二十二.PE数字签名之(下)微软证书漏洞CVE-2020-0601复现及Windows验证机制分析
- [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析
- [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点
- [系统安全] 二十五.WannaCry勒索病毒分析 (1)Python复现永恒之蓝漏洞实现勒索加密
- [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及解析
- [系统安全] 二十七.WannaCry勒索病毒分析 (3)蠕虫传播机制分析及IDA和OD逆向
- [系统安全] 二十八.CS逆向分析 (1)你的游戏子弹用完了吗?Cheat Engine工具入门
- [系统安全] 二十九.外部威胁防护和勒索病毒对抗(深信服视频学习)
- [系统安全] 三十.WannaCry勒索病毒分析 (4)全网“最“详细的蠕虫传播机制解读
- [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析
- [系统安全] 三十二.恶意代码检测(2)常用技术万字详解及总结
- [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术
- [系统安全] 三十四.恶意代码检测(4)编写代码自动提取IAT表、字符串及时间戳
- [系统安全] 三十五.Procmon工具基本用法及文件进程、注册表查看
- [系统安全] 三十六.学术分享之基于溯源图的APT攻击检测安全顶会论文总结
- [系统安全] 三十七.Metasploit技术之基础用法万字详解及防御机理
- [系统安全] 三十八.Metasploit后渗透技术信息收集、权限提权和功能模块详解及防护建议
- [系统安全] 三十九.恶意代码同源分析及BinDiff软件基础用法
- [系统安全] 四十.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
- [系统安全] 四十一.Powershell恶意代码检测系列 (2)Powershell基础语法和注册表操作
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:娜璋AI安全之家 eastmount eastmount《[系统安全] 四十一.Powershell恶意代码检测系列 (2)Powershell基础语法和注册表操作》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![[系统安全]四十一.Powershell恶意代码检测系列(2)Powershell基础语法和注册表操作](/images/random/titlepic/4.jpg)
![[系统安全]四十二.Powershell恶意代码检测系列(3)PowerSploit脚本渗透详解](/images/random/titlepic/9.jpg)
![[系统安全]四十三.Powershell恶意代码检测系列(4)论文总结及抽象语法树(AST)提取](/images/random/titlepic/5.jpg)
![[系统安全]四十六.恶意软件分析(3)动态分析经典沙箱Cape的安装和基础用法详解](/images/random/titlepic/13.jpg)
![[系统安全]四十四.恶意软件分析(1)静态分析Capa经典工具的基本用法万字详解](/images/random/titlepic/7.jpg)
![[系统安全]四十七.恶意软件分析(4)Cape沙箱批量提取动态API特征](/images/random/titlepic/3.jpg)
评论