能力值:
( LV5,RANK:70 )
|
-
-
2 楼
果然如此..! 作为一个菜鸟.....我无能为力..坐等高手解释.!
|
能力值:
( LV5,RANK:70 )
|
-
-
3 楼
壳脱了以后 就可以重建了..! 可能加了壳的原因吧.!
|
能力值:
( LV5,RANK:70 )
|
-
-
4 楼
|
能力值:
(RANK:1060 )
|
-
-
5 楼
.text ROffset 改为600, RSize改为12200
其实不是LordPE的bug,而是 imagehlp.dll
PIMAGE_SECTION_HEADER __stdcall ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva)
{
PIMAGE_SECTION_HEADER pSection; // eax@1
unsigned int iSection; // esi@1
DWORD sectionRva; // edx@2
pSection = (PIMAGE_SECTION_HEADER)((char *)&NtHeaders->OptionalHeader + NtHeaders->FileHeader.SizeOfOptionalHeader);
iSection = 0;
if ( NtHeaders->FileHeader.NumberOfSections )
{
while ( 1 )
{
sectionRva = pSection->VirtualAddress;
if ( Rva >= sectionRva )
{
if ( Rva < sectionRva + pSection->SizeOfRawData ) //这里SizeOfRawData可能无效, 导致找到一个错误的段
break;
}
++pSection;
++iSection;
if ( iSection >= NtHeaders->FileHeader.NumberOfSections )
goto LABEL_5;
}
}
else
{
LABEL_5:
pSection = 0;
}
return pSection;
}
|
能力值:
( LV5,RANK:70 )
|
-
-
6 楼
楼上的大大 ... imagehelp.dll,你写的代码是你自己逆向出来的吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
膜拜LS的LS。。。
|
能力值:
(RANK:1130 )
|
-
-
8 楼
发哥就是强。
|
能力值:
( LV9,RANK:610 )
|
-
-
9 楼
大牛们都来了 太强大了~
真想捏一下楼上那只老鼠~~~
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
强..我只有围观的份了
|
能力值:
( LV9,RANK:610 )
|
-
-
11 楼
我是想说 真正的原因应该不是forgot斑竹所讲,这几天忙别的了 没来得及测试
现在补上。
#include "stdafx.h"
#include "windows.h"
#include "imagehlp.h"
#pragma comment(lib, "imagehlp.lib")
int main(int argc, char* argv[])
{
HANDLE hFile = CreateFile("..\\测试.exe", GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == (HANDLE)-1)
{
return 0;
}
DWORD dwFileSize = GetFileSize(hFile, NULL);
BYTE *pExe = new BYTE[dwFileSize];
ZeroMemory(pExe, dwFileSize);
DWORD ReadBytes = 0;
ReadFile(hFile, pExe, dwFileSize, &ReadBytes, NULL);
IMAGE_DOS_HEADER *pDos = (PIMAGE_DOS_HEADER)pExe;
IMAGE_NT_HEADERS *pNtHeader = (PIMAGE_NT_HEADERS)(pExe + pDos->e_lfanew);
for (DWORD dwi = 0; dwi<0xffffffff; dwi++)
{
IMAGE_SECTION_HEADER *pImageSectionHeaser = ImageRvaToSection(pNtHeader, (PVOID)0x0040000, dwi);
//判断得到的section段头的正确性
if (pImageSectionHeaser)
{
if (strcmp((char *)pImageSectionHeaser->Name, ".text") == 0)
{
continue;
}
if (strcmp((char *)pImageSectionHeaser->Name, ".rdata") == 0)
{
continue;
}
if (strcmp((char *)pImageSectionHeaser->Name, ".data") == 0)
{
continue;
}
if (strcmp((char *)pImageSectionHeaser->Name, ".rsrc") == 0)
{
continue;
}
if (strcmp((char *)pImageSectionHeaser->Name, ".aspack") == 0)
{
continue;
}
if (strcmp((char *)pImageSectionHeaser->Name, ".adata") == 0)
{
continue;
}
//得到了一个错误的section段头
::MessageBox(0, "There is something wrong!", 0, 0);
}
}
delete [] pExe;
::MessageBox(0, "Finished!", "OK", NULL);
return 0;
}
|
能力值:
( LV13,RANK:420 )
|
-
-
12 楼
没看明白说明了什么
|
能力值:
( LV9,RANK:610 )
|
-
-
13 楼
我说的就是 imagehlp.dll里面提供的那个ImageRvaToSection
他没有错误。
|
能力值:
(RANK:1060 )
|
-
-
14 楼
他没有错误,你有错误
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
信发哥,得精华.
|
能力值:
( LV9,RANK:610 )
|
-
-
16 楼
谢谢斑竹大人给我回复
我知道是怎么回事了,
以我的例子来说 每次都会返回.text段头 肯定不对啊
再次谢谢~~哈哈哈
|
|
|