首页
社区
课程
招聘
[讨论]发现LordPE一个bug
2010-6-7 21:52 7185

[讨论]发现LordPE一个bug

2010-6-7 21:52
7185
用LordPE来重建附件中的exe程序,LordPE直接崩溃掉了!~
查输入表的时候 也崩溃。。。
大体跟了一下发现是在
REALIGN.DLL中的
1000164E   .  F3:A5         rep     movs dword ptr es:[edi], dword ptr [esi]
崩溃的

还有一处是 主模块的
0040D9B2  |> \394F 10       cmp     dword ptr [edi+10], ecx

崩溃的

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

上传的附件:
收藏
点赞6
打赏
分享
最新回复 (15)
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
gkdark 1 2010-6-7 23:30
2
0
果然如此..!  作为一个菜鸟.....我无能为力..坐等高手解释.!
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
gkdark 1 2010-6-7 23:45
3
0
壳脱了以后 就可以重建了..!  可能加了壳的原因吧.!
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
gkdark 1 2010-6-7 23:46
4
0
我是菜鸟..可能资源重建那里有问题..不知道 夸平台会不会出问题!
上传的附件:
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2010-6-8 04:41
5
0
.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;
}

雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
gkdark 1 2010-6-8 07:14
6
0
楼上的大大 ... imagehelp.dll,你写的代码是你自己逆向出来的吗?
雪    币: 4902
活跃值: (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
奘和 2010-6-8 08:19
7
0
膜拜LS的LS。。。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2010-6-8 09:19
8
0
发哥就是强。
雪    币: 456
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-6-8 10:27
9
0
大牛们都来了    太强大了~

真想捏一下楼上那只老鼠~~~
雪    币: 212
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pady 2010-6-8 16:00
10
0
强..我只有围观的份了
雪    币: 456
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-6-13 21:02
11
0
我是想说  真正的原因应该不是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;
}
雪    币: 1981
活跃值: (771)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
demoscene 7 2010-6-13 21:21
12
0
没看明白说明了什么
雪    币: 456
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-6-13 21:23
13
0
我说的就是  imagehlp.dll里面提供的那个ImageRvaToSection
他没有错误。
雪    币: 6073
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 26 2010-6-14 18:47
14
0
他没有错误,你有错误
雪    币: 170
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yzjsdn 2010-6-15 10:37
15
0
信发哥,得精华.
雪    币: 456
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
blueapplez 14 2010-6-17 17:54
16
0
谢谢斑竹大人给我回复
我知道是怎么回事了,
以我的例子来说     每次都会返回.text段头    肯定不对啊  
再次谢谢~~哈哈哈
游客
登录 | 注册 方可回帖
返回