VC写加密壳

本文介绍了使用VC编写加密壳的过程,包括EasyProtect的加壳流程和Shell的执行流程。在加壳过程中,通过区块重定位和DOS头保存关键信息,如OEP。Shell在加壳程序中先执行,动态获取API,解密代码段后再跳回原程序入口点。对于获取Kernel32.dll基址的问题,提出了解决方案。
摘要由CSDN通过智能技术生成

准备工作

工程文件已经打包。 解决方案内有2个项目:EasyProtect 和 Shell。
EasyProtect 是用来加壳的。
Shell就是壳的核心,编译后是Shell.dll。

EasyProtect 流程


打开被加壳文件 -> 打开Shell.dll -> 提取shell.dll代码段(.MyCode) 数据 ->在被加壳文件中创建新的区段->重定位Shell.dll的代码数据->把重定位好的代码数据写到被加壳程序的新区段中->加密被加壳程序代码段->修正OEP

但是还有一些细节没有提及。
packPE 加壳函数。

bool packPE(char * szFileName)
{
        CPeFile MyPe;
        CPeFile MyShell;  // 壳也是一个编译的pe文件
        PIMAGE_SECTION_HEADER pNewSec,pShellSec;
        PMyDosHeader pDosHead;
        char *shellcode;
        if(!MyPe.LoadPe(szFileName))
                return false;
        if(!MyShell.LoadPe(SHELL_FILE))
                return false;

        pDosHead = (PMyDosHeader)MyPe.GetBuffer();
        if (pDosHead->info.flag==0x1447) // 已经加密过了
                return false;
        /* 获取壳的代码段 */
        pShellSec = MyShell.FindSectionByName(".MyCode");
        pNewSec = MyPe.AddSection(".fishc",pShellSec->SizeOfRawData);
        if(!pNewSec) return false;
        // 重定位数据 0.0 
        FixRelocBase2(MyShell,MyPe.GetImageBase(),pNewSec->VirtualAddress);
        // 复制代码数据
        shellcode = new char[pShellSec->SizeOfRawData];
        bool bRet =
        MyShell.ReadDataByRaw(pShellSec->PointerToRawData,shellcode,pShellSec->SizeOfRawData);
        if(!bRet)return false;
        bRet = 
        MyPe.WriteDataByRaw(pNewSec->PointerToRawData,shellcode,pShellSec->SizeOfRawData);
        if(!bRet) return false;
        delete shellcode;
        // 加密代码段
        char *buf;
        char *key = "mooncakeisverylovelygirl";
        PIMAGE_SECTION_HEADER cs;
        pDosHead->info.CodeSec=MyPe.GetCodeSection();
        cs = MyPe.GetSectionById(pDosHead->info.CodeSec);
        buf = (char *)MyPe.GetBuffer();
        xorPlus(&buf[cs->PointerToRawData],cs->SizeOfRawData,key,strlen(key));
        // 修正OE
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2010/11/23 16:55 . 2010/11/23 16:55 .. 1998/11/19 12:10 4,187 3way.cpp 1998/12/12 14:23 1,194 3way.h 1998/01/16 23:01 314 3wayval.dat 1998/12/31 20:37 8,977 algebra.cpp 1998/12/29 23:53 7,012 algebra.h 1998/11/19 12:10 2,105 asn.cpp 1998/12/18 19:17 1,486 asn.h 1998/11/19 12:10 2,483 base64.cpp 1998/12/12 14:23 1,087 base64.h 1998/12/31 23:07 24,990 bench.cpp 1998/11/19 12:11 104 bench.h 1998/11/19 12:10 14,267 bfinit.cpp 1998/11/19 12:10 2,443 blowfish.cpp 1998/12/12 14:23 1,177 blowfish.h 1998/01/16 23:01 672 blum1024.dat 1998/01/16 23:01 1,320 blum2048.dat 1998/01/16 23:01 350 blum512.dat 1998/11/29 18:42 3,650 blumgold.cpp 1998/12/12 14:23 1,463 blumgold.h 1998/11/19 12:10 1,068 blumshub.cpp 1998/12/12 14:23 1,107 blumshub.h 1998/11/19 12:10 10,670 cast.cpp 1998/12/12 14:23 1,178 cast.h 1998/11/19 12:10 29,906 cast128s.cpp 1998/11/19 17:59 250 castval.dat 1998/11/19 12:10 4,972 cbc.cpp 1998/12/12 14:23 1,997 cbc.h 1998/12/18 19:17 3,258 config.h 1998/11/19 12:10 4,147 crc.cpp 1998/12/12 14:23 707 crc.h 1998/12/29 23:53 7,060 cryptest.dsp 1998/11/23 22:01 819 cryptest.dsw 1998/12/18 20:13 4,119 cryptlib.cpp 1998/12/29 23:53 13,140 cryptlib.dsp 1999/01/01 00:04 22,994 cryptlib.h 1998/11/24 21:26 5,327 default.cpp 1998/12/12 14:23 1,084 default.h 1998/11/19 12:10 12,518 des.cpp 1998/12/12 14:23 2,599 des.h 1998/01/16 23:01 8,892 descert.dat 1998/11/19 12:10 6,038 dessp.cpp 1998/12/29 23:53 2,030 dh.cpp 1998/12/31 20:37 1,354 dh.h 1998/12/29 23:47 276 dh1024.dat 1998/12/29 23:53 579 dh2.cpp 1998/12/29 23:53 1,607 dh2.h 1998/12/29 23:47 536 dh2048.dat 1998/12/20 18:49 158 dh512.dat 1998/11/19 12:10 18,466 diamond.cpp 1998/01/16 23:01 622 diamond.dat 1998/12/12 14:23 2,868 diamond.h 1998/11/19 12:10 151,497 diamondt.cpp 1998/12/18 19:17 5,771 dsa.cpp 1998/12/18 19:17 2,777 dsa.h 1998/01/16 23:01 9,352 dsa1024.dat 1998/01/16 23:01 598 dsa512.dat 1998/12/29 23:53 5,017 ec2n.cpp 1998/12/29 23:53 2,735 ec2n.h 1998/12/31 20:37 9,179 eccrypto.cpp 1998/12/31 20:37 6,687 eccrypto.h 1998/12/29 23:53 5,939 ecp.cpp 1998/12/29 23:53 2,944 ecp.h 1998/12/18 19:17 4,415 elgamal.cpp 1998/12/18 19:18 1,795 elgamal.h 1998/01/16 23:01 804 elgc1024.dat 1998/01/16 23:01 1,578 elgc2048.dat 1998/01/16 23:01 414 elgc512.dat 1998/11/19 12:11 1,941 eprecomp.cpp 1998/12/12 14:23 1,482 eprecomp.h 1998/12/18 19:18 1,925 files.cpp 1998/12/18 19:18 1,566 files.h 1998/11/19 12:11 1,403 filters.cpp 1998/12/12 14:23 2,648 filters.h 1998/11/19 12:11 3,240 forkjoin.cpp 1998/12/12 14:23 3,221 forkjoin.h 1998/11/19 12:11 626 gf256.cpp 1998/12/12 14:23 1,233 gf256.h 1998/12/29 23:53 14,957 gf2n.cpp 1998/12/29 23:53 8,758 gf2n.h 1998/11/19 12:11 1,754 gf2_32.cpp 1998/12/12 14:23 1,243 gf2_32.h 1998/11/19 12:11 3,926 gost.cpp 1998/12/12 14:23 1,113 gost.h 1998/01/16 23:01 846 gostval.dat 1998/12/18 19:18 4,030 gzip.cpp 1998/12/12 14:23 2,121 gzip.h 1998/11/19 12:11 15,431 haval.cpp 1998/12/12 14:23 1,551 haval.h 1998/01/16 23:01 484 havalcer.dat 1998/11/19 12:11 455 hex.cpp 1998/12/12 14:23 1,173 hex.h 1998/12/12 14:23 1,488 hmac.h 1998/11/19 12:11 6,222 idea.cpp 1998/12/12 14:23 1,074 idea.h 1998/01/16 23:01 770 ideaval.dat 1998/12/29 23:53 51,305 integer.cpp 1998/12/12 14:23 10,304 integer.h 1998/11/19 12:11 2,422 iterhash.cpp 1998/12/12 14:23 869 iterhash.h 1999/01/01 00:10 2,601 license.txt 1998/12/12 14:23 2,633 lubyrack.h 1998/12/29 23:53 10,824 luc.cpp 1998/12/29 23:53 8,243 luc.h 1998/01/16 23:01 684 luc1024.dat 1998/01/16 23:01 1,332 luc2048.dat 1998/01/16 23:01 362 luc512.dat 1998/01/16 23:01 602 lucc1024.dat 1998/01/16 23:01 326 lucc512.dat 1998/01/16 23:01 144 lucdif.dat 1998/01/16 23:01 920 lucs1024.dat 1998/01/16 23:01 496 lucs512.dat 1998/01/21 19:10 601 Makefile 1998/11/24 21:26 6,092 mars.cpp 1998/12/12 14:23 1,086 mars.h 1998/11/24 21:26 6,795 marss.cpp 1998/12/20 18:49 1,030 marsval.dat 1998/12/18 19:18 4,607 md2.cpp 1998/12/18 19:18 457 md2.h 1998/11/24 21:26 4,383 md5.cpp 1998/12/12 14:23 671 md5.h 1998/11/19 12:11 5,369 md5mac.cpp 1998/12/12 14:23 683 md5mac.h 1998/12/12 14:23 1,222 mdc.h 1998/11/24 21:26 1,565 misc.cpp 1998/12/12 14:23 6,121 misc.h 1998/12/29 23:53 4,134 modarith.h 1998/11/19 12:11 3,108 modes.cpp 1998/12/12 14:23 3,522 modes.h 1998/12/12 14:23 2,342 modexppc.cpp 1998/12/12 14:15 1,147 modexppc.h 1998/12/31 20:37 3,198 mqv.cpp 1998/12/31 20:37 1,820 mqv.h 1998/12/29 23:48 580 mqv1024.dat 1998/12/29 23:48 1,112 mqv2048.dat 1998/12/29 23:47 308 mqv512.dat 1998/12/29 23:53 25,117 nbtheory.cpp 1998/12/29 23:53 5,140 nbtheory.h 1998/12/18 19:18 4,359 nr.cpp 1998/12/18 19:18 3,202 nr.h 1998/01/16 23:01 892 nr1024.dat 1998/01/16 23:01 1,694 nr2048.dat 1998/01/16 23:01 476 nr512.dat 1998/12/18 19:18 3,036 oaep.cpp 1998/12/18 19:18 630 oaep.h 1998/01/16 23:01 18 pch.cpp 1998/12/12 14:23 278 pch.h 1998/12/18 19:18 4,208 pkcspad.cpp 1998/12/18 19:18 1,861 pkcspad.h 1998/12/18 19:18 13,392 polynomi.cpp 1998/12/12 14:23 14,895 polynomi.h 1998/12/18 19:18 5,181 pssr.h 1998/12/18 19:18 2,622 pubkey.cpp 1998/12/18 20:13 10,958 pubkey.h 1998/11/19 12:11 5,280 queue.cpp 1998/12/12 14:23 1,296 queue.h 1998/01/16 23:01 684 rabi1024.dat 1998/01/16 23:01 1,334 rabi2048.dat 1998/01/16 23:01 360 rabi512.dat 1998/12/18 19:18 3,774 rabin.cpp 1998/12/18 19:18 2,827 rabin.h 1998/11/19 12:11 2,190 randpool.cpp 1998/12/12 14:23 1,213 randpool.h 1998/11/24 21:26 3,555 rc2.cpp 1998/12/12 14:23 1,268 rc2.h 1998/12/20 18:49 618 rc2val.dat 1998/11/19 12:11 2,691 rc5.cpp 1998/12/12 14:23 1,319 rc5.h 1998/01/16 23:01 350 rc5val.dat 1998/11/19 17:59 3,345 rc6.cpp 1998/12/12 14:23 1,310 rc6.h 1998/12/20 18:49 728 rc6val.dat 1998/11/19 12:11 9,978 ripemd.cpp 1998/12/12 14:23 689 ripemd.h 1998/11/19 12:11 2,860 rng.cpp 1998/12/12 14:23 1,950 rng.h 1998/12/18 19:18 3,420 rsa.cpp 1998/12/18 19:18 4,462 rsa.h 1998/01/16 23:01 1,212 rsa1024.dat 1998/01/16 23:01 2,378 rsa2048.dat 1998/12/20 18:49 204 rsa400pb.dat 1998/12/20 18:49 892 rsa400pv.dat 1998/01/16 23:01 632 rsa512.dat 1998/01/16 23:01 1,380 rsa512a.dat 1998/12/18 19:18 5,241 rw.cpp 1998/12/18 19:18 3,670 rw.h 1998/12/20 18:49 674 rw1024.dat 1998/12/20 18:49 1,320 rw2048.dat 1998/12/20 18:49 348 rw512.dat 1998/11/19 12:11 6,366 safer.cpp 1998/12/12 14:23 3,897 safer.h 1998/01/16 23:01 1,024 saferval.dat 1998/11/19 12:11 4,400 sapphire.cpp 1998/12/12 14:23 3,181 sapphire.h 1998/11/19 12:11 4,071 seal.cpp 1998/12/12 14:23 1,166 seal.h 1998/11/24 21:26 5,101 secshare.cpp 1998/12/12 14:23 1,666 secshare.h 1998/11/19 12:11 1,454 secsplit.cpp 1998/12/12 14:23 713 secsplit.h 1998/12/18 19:18 8,545 sha.cpp 1998/12/18 19:18 707 sha.h 1998/11/19 12:11 5,393 shark.cpp 1998/12/12 14:23 1,546 shark.h 1998/11/19 12:11 121,963 sharkbox.cpp 1998/01/16 23:01 490 sharkval.dat 1998/12/12 14:23 2,976 smartptr.h 1998/11/19 12:11 5,498 square.cpp 1998/12/12 14:23 1,199 square.h 1998/11/19 12:11 32,669 squaretb.cpp 1998/01/16 23:01 816 squareva.dat 1998/11/19 12:11 1,631 tea.cpp 1998/12/12 14:23 973 tea.h 1998/12/29 23:53 12,167 test.cpp 1998/11/23 21:54 2,477 tiger.cpp 1998/12/12 14:23 875 tiger.h 1998/11/19 12:11 44,710 tigertab.cpp 1998/11/19 12:11 886 usage.dat 1998/12/29 23:53 23,376 validat1.cpp 1998/12/31 23:07 16,623 validat2.cpp 1998/12/18 19:18 16,160 validat3.cpp 1998/12/29 23:53 1,029 validate.h 1998/11/19 12:11 3,934 wake.cpp 1998/12/12 14:23 1,206 wake.h 1998/12/12 14:23 2,116 words.h 1998/12/12 14:23 3,816 xormac.h 1998/11/19 12:11 2,006 zbits.cpp 1998/12/12 14:23 459 zbits.h 1998/11/19 12:11 22,047 zdeflate.cpp 1998/12/12 14:23 2,868 zdeflate.h 1998/12/18 19:18 26,795 zinflate.cpp 1998/12/12 14:23 1,760 zinflate.h 1998/11/24 21:26 28,360 ztrees.cpp 1998/12/12 14:23 5,780 ztrees.h 233 个文件 1,316,136 字节 2 个目录 12,766,175,232 可用字节
VC是指Verifiable Credential(可验证凭证)的缩,它是一种用于身份验证和授权的加密算法。而SM加密算法是一种国密算法,由中国国家密码管理局发布,用于信息安全领域。 想要实现VC作为载体的SM加密算法,首先需要理解SM算法的基本原理和加密过程。SM加密算法采用对称密码体制,并使用了非线性函数、置换、线性函数和模运算等操作。在加密过程中,首先需要生成加密所用的密钥,并进行密钥扩展。然后,根据SM算法的特定流程,将明文转换为密文,实现信息的加密。解密时需要使用相同的密钥,按照逆向的操作过程将密文还原为明文。 在VC中应用SM加密算法时,需要将VC的信息视为明文,通过对应的加密算法和密钥,将其加密为密文。加密后的密文将被嵌入到可验证凭证的数字签名或其他安全标记中。解密时,通过相应的密钥和解密算法,对密文进行解密操作,恢复出原始的VC信息。 实现VC中的SM加密算法需要注意以下几点: 1. 确定使用的SM算法版本和相应的密钥管理方案,例如采用SM2、SM3或者SM4算法。 2. 设计和实现对应的加密和解密算法,确保安全性、高效性和可靠性。 3. 考虑密钥的生成、存储和使用问题,确保密钥的安全性。 4. 将SM加密算法应用到VC中的具体场景中,例如身份认证、数字证书等。 总之,基于VC的SM加密算法的实现,需要在理解SM算法基本原理的基础上,结合VC的特点和应用场景,设计和开发相应的加密和解密算法。同时,要注意保障密钥的安全性,以确保加密和解密的过程可靠和有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值