首页
社区
课程
招聘
[原创]木马彩衣的原理和代码示例
发表于: 2005-11-23 10:38 7455

[原创]木马彩衣的原理和代码示例

2005-11-23 10:38
7455
木马彩衣的实现原理,也就是在程序里面加多一个Section,并且把入口点指向我们新添加的Section,然后再在我们的Section的代码里加上一个jmp,jmp到真正的入口点.这样,一些识壳软件,它在识别入口点代码时,就跑到我们新加的Section,看到里面的代码是VC6或是Delphi的代码也就认为是VC6或是Delphi的程序了.
下面是我写的一个代码,修改自"Fi7ke"老大的Delphi代码,原文可以查看314K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3K9r3&6^5P5i4W2Q4x3V1k6S2M7X3y4Z5K9i4k6W2i4K6u0r3x3U0l9H3y4g2)9J5c8U0p5I4i4K6u0r3x3e0k6Q4x3V1j5#2x3K6l9$3z5e0c8Q4x3X3g2S2M7%4m8^5

DWORD JMPOFF=43;

char OEPCODE[]={0x55, 0x8B, 0xEC, 0x6A, 0xFF, 0x68, 0x2A, 0x2C, 0x0A, 0x00, 0x68, 0x38,
    0x90, 0x0D, 0x00, 0x64, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x50, 0x64, 0x89,
    0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0x64, 0xA3, 0x00, 0x00, 0x00, 0x00,
    0x58, 0x58, 0x58, 0x58, 0x8B, 0xE8, 0xB8,
        0x00, 0x10, 0x40, 0x00, //此处的DWORD是跳转的地址
        0xFF,0xE0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00};

//加壳
void Encrypt(LPCSTR szFileName)
{
        //var

       
        IMAGE_DOS_HEADER                DosHeader;
        IMAGE_NT_HEADERS                PEHeader;
        IMAGE_SECTION_HEADER        SectionHeader;
        //新添加的Section
        IMAGE_SECTION_HEADER        MySectionHeader;
        //入口点地址
        DWORD                                        AddressOfEntryPoint;
        //文件流
        CFile                                        PEFile;
       
        //begin
       
       
        try
        {
                PEFile.Open(szFileName,CFile::modeReadWrite);
                //读取DOS头
                PEFile.SeekToBegin();
                PEFile.Read(&DosHeader,sizeof(DosHeader));
                //读取NT头
                PEFile.Seek(DosHeader.e_lfanew,CFile::begin);
                PEFile.Read(&PEHeader,sizeof(PEHeader));
                //读取Section
                PEFile.Seek(sizeof(IMAGE_SECTION_HEADER)*(PEHeader.FileHeader.NumberOfSections-1),CFile::current);
                PEFile.Read(&SectionHeader,sizeof(IMAGE_SECTION_HEADER));
               
                strncpy((LPSTR)MySectionHeader.Name,"Fi7ke\0",6);
                MySectionHeader.VirtualAddress = PEHeader.OptionalHeader.SizeOfImage;
                MySectionHeader.Misc.VirtualSize = 0x200;
                MySectionHeader.SizeOfRawData = (MySectionHeader.VirtualAddress / //div
                        PEHeader.OptionalHeader.FileAlignment + 1) * PEHeader.OptionalHeader.FileAlignment -
                        PEHeader.OptionalHeader.SizeOfImage;
                MySectionHeader.PointerToRawData =SectionHeader.SizeOfRawData + SectionHeader.PointerToRawData;
                MySectionHeader.Characteristics = 0x60000020;
               
                PEHeader.FileHeader.NumberOfSections++;
                PEFile.Write(&MySectionHeader, sizeof(MySectionHeader));
                PEFile.Seek(DosHeader.e_lfanew, CFile::begin);
               
                AddressOfEntryPoint = PEHeader.OptionalHeader.AddressOfEntryPoint;
                PEHeader.OptionalHeader.AddressOfEntryPoint =MySectionHeader.VirtualAddress;
                PEHeader.OptionalHeader.MajorLinkerVersion = 6;
                PEHeader.OptionalHeader.MinorLinkerVersion = 0;
               
                AddressOfEntryPoint = AddressOfEntryPoint + PEHeader.OptionalHeader.ImageBase;
                                         
                __asm
                {
                        PUSHAD
                        LEA eax, OEPCODE                                //将OEPCODE的地址交给寄存器
                        ADD eax, JMPOFF                                        //添加JMPOFF值给寄存器
                        MOV edx, AddressOfEntryPoint        //转移指令,相当于付值语句,左边给右边
                                                         
                        MOV DWORD ptr [eax], edx                //同上
                        POPAD
                       
                }
                               
                                         
                PEHeader.OptionalHeader.SizeOfImage =PEHeader.OptionalHeader.SizeOfImage + MySectionHeader.Misc.VirtualSize;
       
                PEFile.Write(&PEHeader, sizeof(PEHeader));                         
                PEFile.SeekToEnd();
                PEFile.Write(OEPCODE, MySectionHeader.Misc.VirtualSize);
                PEFile.Close();
        }
        catch (...)
        {
                PEFile.Close();
        }
}

[CODE]

这个是编译后的程序,放在网络硬盘上.使用时,直接点"加壳"就行了.
351K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3k6J5k6h3g2Q4x3X3g2&6M7K6p5$3z5q4)9J5k6h3y4G2L8g2)9K6b7e0R3H3x3o6m8Q4x3V1k6&6M7K6p5$3z5s2g2H3i4K6u0r3c8o6u0Q4x3V1k6Q4x3@1k6y4K9h3&6A6i4@1f1$3i4K6W2o6i4@1p5^5i4@1f1&6i4@1p5&6i4@1q4o6i4@1f1#2i4@1u0p5i4@1p5&6i4@1f1^5i4@1p5I4i4@1p5K6i4K6u0W2k6i4S2W2P5e0M7H3P5U0M7I4k6X3c8H3z5h3j5&6j5U0m8T1x3i4Z5&6y4h3u0A6x3X3t1J5j5U0u0T1x3X3t1H3k6Y4p5&6k6X3b7I4j5U0c8X3z5h3t1H3k6U0k6W2x3o6q4W2x3U0m8W2x3o6q4W2x3U0c8T1x3h3t1I4k6U0u0T1x3r3t1I4k6U0W2X3L8r3x3@1k6X3b7%4P5R3`.`.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看得有这么多人,可是没有一个人顶一下,晕..
2005-11-23 11:54
0
雪    币: 2116
活跃值: (2156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
编译后的程序的下载连接失效,请楼主把网络硬盘的地址写出来吧。
2005-11-23 14:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯.好的,你可以直接在我的网络硬盘里下.在个人作品项里.
还有,经过测试,原作者的彩衣,有些问题,如果加的是DELPHI的程序,是没有问题的,如果加的是VC的程序,有些有出问题,出错率是60%
456K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3E0A6L8X3N6D9L8$3&6Q4x3X3g2&6M7K6p5$3z5q4)9J5k6h3y4G2L8b7`.`.
2005-11-23 20:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
晕,这边,坛子实在是太冷清了.只有一个人回.
2005-11-24 09:23
0
雪    币: 216
活跃值: (405)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
最初由 kinglon 发布
晕,这边,坛子实在是太冷清了.只有一个人回.


加了壳的程序都有自校验的,你这个骗识壳的东东,先让程序自身没法运行了。
再说结构较简单,手动很容易判断出来把入口改掉。

精神可佳,但目前感觉这个东东用处不大。
2005-11-24 12:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
加了壳的程序都有自校验的,你这个骗识壳的东东,先让程序自身没法运行了。
再说结构较简单,手动很容易判断出来把入口改掉。

精神可佳,但目前感觉这个东东用处不大。
[QUOTE]

呵呵,我知道啊,我也只是根据原作者的DELPHI源码改的,它加对程序加了壳之后,有很多都运行不了,主要是Section对齐和PE结构的一些计算的问题,这个现在已经解决了..现在正在一步步完善它,实现可以加任意的彩衣.呵呵,
小弟能力有限,见笑了..

谢谢你的指正,呵呵,
终于有人回贴了...太好了

新的版本你可以在这里下到
a2eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4g2H3M7$3g2J5N6X3g2J5y4g2)9J5k6i4W2K6x3e0j5^5i4K6u0W2j5$3!0E0i4K6u0r3P5i4x3I4y4U0S2#2M7q4)9J5c8V1b7K6i4K6u0r3i4K6y4r3c8s2u0S2k6$3!0F1f1%4q4#2j5h3#2S2i4K6u0W2k6i4S2W2P5e0M7J5P5U0R3H3k6X3c8H3z5h3j5&6j5U0m8T1x3Y4Z5&6y4h3u0A6x3X3t1J5j5U0u0T1x3X3t1H3k6U0g2T1x3r3k6V1x3r3t1H3j5U0q4T1y4X3j5$3k6e0l9I4k6e0t1H3k6e0l9I4k6e0t1@1j5U0q4T1x3h3j5J5j5U0m8T1x3X3t1H3k6X3I4U0x3X3k6V1y4%4Z5`.
2005-11-24 20:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看不懂啊?楼主
2005-11-24 22:43
0
雪    币: 50
活跃值: (498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
下载地址还是有一些问题。
不过我平时是模拟的DP的壳。呵
说没有加壳。估计没几个人信吧。
2005-12-3 09:57
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
10
学习
2005-12-3 12:11
0
雪    币: 239
活跃值: (544)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
这是XIKUG写的代码吧
2005-12-5 14:27
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
12
最初由 hmimys 发布
这是XIKUG写的代码吧


hmi阿,最近咋没见到你啊。
2005-12-5 20:56
0
雪    币: 239
活跃值: (544)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
hmi阿,最近咋没见到你啊。 [/QUOTE]

回兄弟公司的不让上网了,网管封了,QQ是上不了了,你最近在搞啥呀?
2005-12-6 14:32
0
游客
登录 | 注册 方可回帖
返回