找回密码
 立即注册

QQ登录

只需一步,快速开始

1401软件论坛总版规【新人必看】如何正确发布收费帖子加入vip系统学习仅需498元免费获得1401软件安全论坛vip开通本站VIP会员请联系QQ 564853771
论坛纪念优盘Beyond EXE超强加密器V1.61401论坛破解工具包 2017-9-12[破解班vip]入门篇[破解班vip]基础篇
[破解班vip]脱壳篇[破解班vip]实战篇[破解班vip]网络验证篇[破解班vip]零基础HOOK教程[破解班vip]零基础易语言入门
[破解班vip]零基础c语言入门[破解班vip]零基础Delphi编程入门[破解班vip]寒假培训课程共7课[破解班vip]破解提高篇[破解班vip]易语言培训课程
[破解班vip]核心技术培训篇[破解班vip]pe格式与pe操作[破解班vip]2022全新封包-山寨-爆破全系列[原创课程]c++单文档框架课程[逆向班vip]汇编语句与反汇编基础
[逆向班vip]全自动扫雷辅助[逆向班vip]手机模拟按键[逆向班vip]植物大战僵尸辅助广告位招租...付费破解软件 +Q 564853771
查看: 3322|回复: 0

用类的思想处理PE结构

[复制链接]
  • TA的每日心情

    2023-5-7 22:27
  • 签到天数: 340 天

    [LV.8]以坛为家I

    343

    主题

    454

    回帖

    2098

    积分

    武林新贵

    UID
    7
    元宝
    232
    威望
    815
    贡献
    64
    信誉值
    0
    精华
    10
    在线时间
    189 小时
    注册时间
    2014-1-16
    最后登录
    2023-5-7
    违规
    0
    积分
    2098

    优秀版主热心会员金点子奖突出贡献最佳新人活跃会员宣传达人吾爱富翁论坛元老管理团队已有小成灌水之王

    发表于 2015-3-11 14:15:35 | 显示全部楼层 |阅读模式
    Ȧ
    本帖最后由 admin_user 于 2015-3-11 14:16 编辑

    最近在论坛里接了个业务,客户看了我的ID后说,我发的都是求助帖,对我的能力很质疑,我自己一看才发现,真是除了几年前发了个破解的帖子蒙混过关骗得一个邀请码之外,一直在做伸手党,于是翻出了之前给赏金论坛做过的一套《壳的编写》的教程,因为做的时候答应人家不能再出售,所以就不发教程了,只是把里面的源码拿来用下。
        一直以来我都是以开发为主,类的思想在我脑海里根深蒂固,几年前研究PE结构的时候发现,PE结构完全可以用类的思想处理,于是写了几个处理的代码,并用这个思想写了个简单的加壳程序,可以给notepad.exe加壳,仅供参考,现把代码贴上献丑。
    代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    //基本的PE处理 可以得到dos头 NT头 节 等信息
    class LPEFile  
    {
    public:
      BOOL LoadPEFile(BYTE* lpBuffer,DWORD dwSize);          //载入PE文件
      LPVOID RvaToPtr(DWORD dwRVA);                          //计算偏移
      LPVOID GetDirectoryEntryToData(USHORT DirectoryEntry);   
      PIMAGE_SECTION_HEADER GetSection(int nIndex);           //得到节的信息
      BOOL IsPEFile();
      PIMAGE_SECTION_HEADER GetFirstSectionHeader();         //得到第一个节
      int GetSectionCount();                                 //得到节的个数
      PIMAGE_DATA_DIRECTORY GetDataDirectory(int nIndex);     //得到数据目录
      PIMAGE_DATA_DIRECTORY GetDataDirectory();               //得到数据目录
      PIMAGE_OPTIONAL_HEADER GetNtOptionalHeader();           
      PIMAGE_FILE_HEADER GetNtFileHeader();
      PIMAGE_NT_HEADERS GetNtHeader();         
      PIMAGE_DOS_HEADER GetDosHeader();
      DWORD GetImageSize();
      BYTE* GetImage();
      bool Free();
      BOOL LoadPEFile(char* lpFilename);
      BOOL SetInfo(MAP_FILE_STRUCT *pMapFileMsg);
      MAP_FILE_STRUCT* GetInfo();
      void operator=(LPEFile& lPeFile);
      LPEFile();
      virtual ~LPEFile();


    private:
      //用于标识文件的打开状态//用于标识文件的打开状态
        BYTE bLoadStact;   
        //用于存储打开的文件句柄,文件数据,文件大小


    protected:
        MAP_FILE_STRUCT *pstMapFile;
    };




    有了基本的PE处理之后,就可以在类上做继承,扩展新功能
    代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    //继承LPEFile里面基础处理功能并对  对节处理进行扩展
    class LPESection : public LPEFile  
    {
    public:
      BOOL WriteSectionData(int nIndex,DWORD dwOffset,BYTE* lpBuffer,DWORD *dwSize);   //写入节数据
      BYTE* GetSectionData(int nIndex,DWORD* rdwSize);                                  //得到节数据
      BOOL AddSection(char* pSectionName,DWORD &dwSectionSize,DWORD dwSectionStact);     //添加一个节
      DWORD OffsetToRva(DWORD dwOffset);                                                 //计算偏移
      DWORD RvaToOffset(DWORD dwRva);                                                    //计算偏移
      DWORD GetVRk(int nSeciotnIndex);
      int OffsetToSectionIndex(DWORD dwOffset);
      int RvaToSectionIndex(DWORD dwRva);
      LPESection();
      virtual ~LPESection();
      void operator =(LPEFile& lPeFile);


    };


    //继承自LPEFile  对处理重定位表功能进行扩展
    class LPEReLocal : public LPEFile  
    {
    public:
      BOOL RelocaltionVA(DWORD dwNewAddress, DWORD dwNewImageBase, DWORD &dwOldVA);   
      BOOL RelocationMySelf(DWORD dwNewSecAddress,DWORD dwImageBase);
      DWORD GetReLocaltionRVA(int nRelocalIndex,int nTypeOffsetIndex);
      WORD GetReLocationType(int nRelocalIndex,int nTypeOffsetIndex);
      WORD GetTypeOffset(int nRelocalIndex,int nOffsetIndex);
      int GetTypeOffsetCount(int nIndex);
      PIMAGE_BASE_RELOCATION GetReLocal(int nCount,DWORD *rdwOffset);
      int GetReLocalCount();
      PIMAGE_BASE_RELOCATION GetFirstReLocaltion();
      LPEReLocal();
      virtual ~LPEReLocal();
      void operator=(LPEFile& lPeFile);


    };




    //继承自LPEFile 对处理导入表功能进行扩展
    class LPEImport : public LPEFile  
    {
    public:
      BOOL ReLocalImport(DWORD dwRVA);
      DWORD GetImportThunk(PIMAGE_IMPORT_DESCRIPTOR pImportDesc);
      void operator=(LPEFile& lPeFile);
      PIMAGE_IMPORT_BY_NAME GetImportFucByName(DWORD RavThunk);
      PIMAGE_IMPORT_DESCRIPTOR GetImportDesc(int index);
      int GetImportDesCount();
      PIMAGE_IMPORT_DESCRIPTOR GetFirstImportDesc();
      LPEImport();
      virtual ~LPEImport();


    };




    //继承自LPEFile对处理导出表功能进行扩展
    class LPEExport : public LPEFile  
    {
    public:
      WORD GetNameOrdValue(int nIndex);
      DWORD GetNameOrd(int nIndex);
      DWORD GetFirstNameOrd();
      char* GetNameValue(int nIndex);
      DWORD GetName(int nIndex);
      DWORD GetFirstName();
      DWORD GetFuncValue(int nIndex);
      DWORD GetFunc(int nIndex);
      DWORD GetFirstFunc();
      int GetNameCount();
      int GetFuncCount();
      PIMAGE_EXPORT_DIRECTORY GetExportTab();
      LPEExport();
      virtual ~LPEExport();
      void operator=(LPEFile& lPeFile);


    };




    开源的加壳代码已经很多了,重要的不是介绍怎样加壳,而是给大家提供一种新的PE文件处理思路,本人小菜,不当之处请多包含
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|1401软件安全 ( ICP备16034480号 )

    GMT+8, 2024-5-6 11:13 , Processed in 0.179368 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表