首先利用反汇编引擎解析并传入 壳数据

void PEProtecter::PushCode(unsigned va, unsigned len, unsigned _base)
{char* buffer = ReadDataByVA(va, _base);DISASM  disasm;memset(&disasm, 0, sizeof(DISASM));//初始化disasm.EIP = (UIntPtr)buffer;disasm.VirtualAddr = (UIntPtr)va;//虚拟地址disasm.Archi = IA32;//AMD64disasm.Options = MasmSyntax;//汇编的形式 NASM  MASMint _len;Int32 opcode;PCODEContext _pcontext = (PCODEContext)_dataHead;_pcontext->start = va;_pcontext->r_couent = 0;_pcontext->len = len;while (!disasm.Error){disasm.SecurityBlock = (UIntPtr)buffer + len - disasm.EIP;if (disasm.SecurityBlock <= 0)break;//没有任何代码可以解读_len = Disasm(&disasm); //反汇编switch (disasm.Error){case OUT_OF_BLOCK:break;case UNKNOWN_OPCODE:/*停止或报错*/disasm.EIP += 1;disasm.VirtualAddr += 1;break;default:opcode = disasm.Instruction.Opcode;if ((opcode == 0xE8) || (opcode == 0xE9)) {//记录重定位信息表_pcontext->r_couent++;//E8 XXXXXXXX  call 400000  START   EIP = >  相对地址  绝对地址unsigned short offset = (unsigned)disasm.EIP - (unsigned)buffer;unsigned* e8 = (unsigned*)(disasm.EIP + 1);unsigned callAddr = va + offset+e8[0]+5;e8[0] = callAddr;unsigned short* _offset = (unsigned short*)_dataEntry;_offset[0] = offset;_dataEntry = _dataEntry + sizeof(offset);//用了数据指针后跳}/*CStringA _tmp;_tmp.Format("0x%.08X => [%s][%x]\r\n", (unsigned)disasm.VirtualAddr, &disasm.CompleteInstr,_base);MessageBoxA(0,_tmp,"1",MB_OK);*/disasm.EIP += _len;disasm.VirtualAddr += _len;break;}}memcpy(buffer, _dataEntry, len); // copy 客户端代码到加密数据包_dataEntry += len;//加密包指针递增memset(buffer, 0xCC, len);//删除客户端代码memcpy(buffer, _AsmCode, 10);//写入客户端跳转带代码char* _pushIndex = _AsmCode + 2;//修改序号_pushIndex[0]++;//_dataHead += sizeof(CODEContext);}

利用之前设计的结构体

typedef struct CODEContext
{unsigned start;unsigned short r_couent; //重定位信息unsigned short len;     //代码长度
}*PCODEContext;

来保存加壳后的文件生成对应壳程序。

bool PEProtecter::Save(wchar_t* file)
{unsigned* fcount = (unsigned*)_dataEntry;fcount[0] = filelen;_dataEntry += sizeof(fcount);auto hFile = CreateFile(file,  GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE) {return false;}DWORD dRead;WriteFile(hFile, _data, filelen, &dRead, NULL);//写入客户端数据//结构体数据写入SetFilePointer(hFile, 0, 0, FILE_END);WriteFile(hFile, _dataHead, (unsigned)_dataHead - (unsigned)_dataHeadBegin, &dRead, NULL);SetFilePointer(hFile, 0, 0, FILE_END);WriteFile(hFile, _dataEntry, (unsigned)_dataEntry - (unsigned)_dataEntryBegin, &dRead, NULL);CloseHandle(hFile);_dataHead = _dataHeadBegin;_dataEntry = _dataEntryBegin;return true;
}

unsigned* fcount = (unsigned*)_dataEntry;
    fcount[0] = filelen;
    _dataEntry += sizeof(fcount);

这段在头部多用了四字节来储存长度数据,在设计注入模块解析的时候,就要首先减去这四个字节,才是真正的数据

先利用代码生成了加壳后的程序

在这两个位置添加保护代码 生成。

利用动态调调试工具查看这两个地址的情况:

发现添加加壳成功了

代码保护壳的设计--(3生成壳程序 )相关推荐

  1. 游戏插件开发之防插件剥离的简单保护壳工具设计(利用反汇编引擎实现自动化代码保护)上

    前言: 感谢:易道云学院 tiger老师指导: 前提:需要导入小蜜蜂反汇编引擎,不会的可以回复问,这里不做介绍,MFC页面的搭建也不做详细介绍.因为任务量太大本贴只写代码保护工具的制作,后续解析在下个 ...

  2. c语言创建可视化窗口,一种基于可视化界面绘制图形自动生成C语言代码软件的设计与实现...

    第 35 卷第 9 期 计算机应用与软件 Vol. 35 No. 9 2018 年 9 月 Computer Applications and Software Sep. 2018 一种基于可视化界面 ...

  3. 设计稿生成代码与 Serverless 的前世今生与未来!

    一场脑洞实验 云栖大会云上 Hello World 活动火热进行中!每位参与者都可收获一份阿里云出品的全球唯一序列号纪念证书! 作为阿里经济体前端委员会的四大技术方向之一,前端智能化方向一被提及,就不 ...

  4. 『重构--改善既有代码的设计』读书笔记----序

    作为C++的程序员,我从大学就开始不间断的看书,看到如今上班,也始终坚持每天多多少少阅读技术文章,书看的很多,但很难有一本书,能让我去反复的翻阅.但唯独『重构--改善既有代码的设计』这本书让我重复看了 ...

  5. Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据随机指定七个字符生成逼真车牌图片数据集(自然场景下+各种噪声效果)可视化

    Dataset之图片数据增强:设计自动生成汽车车牌图片算法(cv2+PIL)根据随机指定七个字符生成逼真车牌图片数据集(自然场景下+各种噪声效果)可视化 导读 设计自动生成汽车车牌图片算法,基于cv2 ...

  6. C#下的Windows服务通用壳程序(二)

    配置文件 (1)配置文件必须是固定的名称,这是为了方便壳程序读取. 1 <?xml version="1.0" encoding="utf-8" ?> ...

  7. Dataset之图片数据增强:设计自动生成(高级封装之命令行解析实现)汽车车牌图片算法(cv2+PIL+argparse)根据随机指定七个字符自动生成逼真车牌图片数据集(带各种噪声效果)

    Dataset之图片数据增强:设计自动生成(高级封装之命令行解析实现)汽车车牌图片算法(cv2+PIL+argparse)根据随机指定七个字符自动生成逼真车牌图片数据集(带各种噪声效果) 导读 设计自 ...

  8. python代码读取文件并将文件反序存入另外一个文件

    python代码读取文件并将文件反序存入另外一个文件 #data[::-1] 实现了反转(reverse) #python代码读取文件并将文件反序存入另外一个文件 # Open the file in ...

  9. 使用Visual Studio宏来自动生成代码 [ Visual Studio | 宏 | 自动生成代码 ]

    前言 宏的定义:是组合到一起形成一个命令以自动完成某项任务的一系列命令和指令.(MSDN) 在使用Visual Studio宏实现JS折叠功能的时候就想过用它来实现代码自动生成,有了前面的基础,实现起 ...

最新文章

  1. 两个CSS样式生成网站
  2. Java堆和栈的区别
  3. Windows 查看所有进程命令tasklist
  4. eclipse jsp没有提示_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
  5. linux 内核 面试 机制,请你来说一下linux内核中的Timer 定时器机制
  6. P2870 [USACO07DEC]Best Cow Line G
  7. 改jpg_|我来改第04期|—人物海报设计
  8. path弧形参数 svg_如何计算圆弧(圆弧)的SVG路径
  9. JS-原型-原型链-值和引用类型
  10. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据...
  11. Sping和springBoot框架技术栈
  12. 《软件方法》强化自测题-需求(2)
  13. 为什么我们需要企业架构?
  14. 蓝桥杯python组——明码
  15. FTP空间是什么?如何获取免费FTP空间吗?
  16. gerrit 用法 topic
  17. 第四章 Sysrepo连接与会话
  18. java 的德鲁伊连接池_德鲁伊连接池-Druid
  19. vb.net中datagridview取消首行选中_解锁Excel中那些隐藏很深但很实用的功能!真的太好用了!...
  20. svg中元素的层级关系

热门文章

  1. centos7 如何重启web服务_centOS7下重启网络服务报错
  2. 如何在Excel中更改工作表选项卡的颜色
  3. SQL每日一练——第1天: 基础查询
  4. 使用 xlsx 下载 xlsx 文件
  5. Java语言程序设计实训题目练习
  6. 微信小程序的奇淫巧技
  7. OAI L3与L2接口分析
  8. 一个Linux上并存KDE GNOME多桌面环境
  9. xctf攻防世界parallel-comparator-200 writeup
  10. js中的NaN并不等于NaN