前言
1、go二进制文件中结构中的函数名信息,并没有被去掉 , 而且可以通过辅助脚本再反汇编工具里将其恢复 。
2、go的函数调用约定跟c++的有些不同,前9个参数分别放入寄存器rax,rbx,rcx,rdi,rsi,r8,r9,r10,r11,其他参数从右往左入栈 。主调函数平衡堆栈,但是只有当主调函数执行完才会去平衡堆栈,而不是被调函数执行完就立即平衡 。
3、字符串实际是个结构体类型,字符串结构体有两个成员 , 分别是字符串地址和长度 。在传递结构体时,每个成员都会当成一个变量传递 。例如要传个字符串 , rax是字符串地址,ebx就是字符串长度 。
起始
某同学收到一封邮件,里面附带伪装成docx文档的病毒 。点击后会打开一个docx文档 。
分析
ida打开可以看到函数名已经给还原了 。
函数主体分析
【简单的go病毒分析】1、从主函数开始看 , 开始有一大片代码获取机器的非环回IP 。
2、获取主机名,拼接字符串,调用函数截屏 。
获取主机名,3 是字符串拼接 。rbx,rcx 是字符串"null",rdi,rsi是_,r8r9是主机名,拼接起来是- 。实际上rbx是放的本地IP地址,由于一开始断网分析的,所以rbx为null 。此处拼接得到文件名-.png 。
3、调用 , 返回值rax被存入局部变量中,后面放入到rbx传入,由于该函数参数需要一个指针,所以返回的是一个指针 。
4、接下来又打开了文件,写入内容,是一个docx文档 。
5、新建 对象,里是执行命令的操作 。执行打开文档的命令 。
内存可以看到结构体有两个成员是有值的,根据查到的结构体,第一个成员是执行路径字符串,路径长度为0x1b , 第二个成员是执行命令的参数构成的数组 , 这的数组长度为3,实际参数为:cmd /c 文档绝对路径 。
文章插图
里面用第三方库进行截图,然后调用 , 应该是用来保存截图的
此处字符串拼接获得图片的绝对路径 。
里面主要是获取临时文件目录,拼接文件名,调用 。里面是写入文件,关闭文件句柄 。
打开的是截图,里面看到关掉句柄,应该还有写入缓冲区的操作
- 羊杂汤怎么做最好 羊杂汤怎么做最好吃又简单
- 腊肉韭菜包子馅怎么做 腊肉韭菜包子馅怎么做的
- 怎么做蛋花汤好吃 怎么做蛋花汤好吃又简单
- 整理字典用的工具:pw-inspector
- 怎么认定洞里有穿山甲 穿山甲洞口是怎么样的
- 土茯苓与茯苓的区别 中药土茯苓与茯苓的区别
- 秦朝历史选择题题库 记载秦朝历史最详细的史书是
- 唐诗里的名字女孩 唐诗里的女孩子名字
- 唐诗中最唯美的名字男 唐诗中最唯美的名字男孩
- 唐诗中最唯美的名字女孩双胞胎 唐诗中最唯美的名字女