首页
社区
课程
招聘
[讨论][讨论]Hex-Rays 太邪恶了
发表于: 2009-1-2 01:51 9779

[讨论][讨论]Hex-Rays 太邪恶了

2009-1-2 01:51
9779
几可乱真
PIMAGE_SECTION_HEADER __stdcall ImageRvaToSection(PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva)
{
  PIMAGE_SECTION_HEADER pSectionHeader; // eax@1
  unsigned int numberOfSections; // ecx@1
  unsigned int currentSection; // esi@1
  DWORD currentSectionRva; // edx@2

  pSectionHeader = (PIMAGE_SECTION_HEADER)((char *)&NtHeaders->OptionalHeader
                                         + NtHeaders->FileHeader.SizeOfOptionalHeader);
  numberOfSections = NtHeaders->FileHeader.NumberOfSections;
  currentSection = 0;
  if ( numberOfSections )
  {
    while ( 1 )
    {
      currentSectionRva = pSectionHeader->VirtualAddress;
      if ( Rva >= currentSectionRva )
      {
        if ( Rva < currentSectionRva + pSectionHeader->SizeOfRawData )
          break;
      }
      ++pSectionHeader;
      ++currentSection;
      if ( currentSection >= numberOfSections )
        goto LABEL_5;
    }
  }
  else
  {
LABEL_5:
    pSectionHeader = 0;
  }
  return pSectionHeader;
}

PVOID __stdcall ImageRvaToVa(PIMAGE_NT_HEADERS NtHeaders, PVOID Base, ULONG Rva, PIMAGE_SECTION_HEADER *LastRvaSection)
{
  ULONG v4; // edi@1
  PIMAGE_SECTION_HEADER *ppLastSectionHeader; // esi@1
  PIMAGE_SECTION_HEADER pSectionHeader; // ecx@2
  ULONG currentRva; // eax@3
  PVOID result; // eax@9

  ppLastSectionHeader = LastRvaSection;
  v4 = Rva;
  if ( !LastRvaSection
    || (pSectionHeader = *LastRvaSection, !*LastRvaSection)
    || (currentRva = pSectionHeader->VirtualAddress, Rva < currentRva)
    || Rva >= currentRva + pSectionHeader->SizeOfRawData )
    pSectionHeader = ImageRvaToSection(NtHeaders, Base, Rva);
  if ( pSectionHeader )
  {
    if ( ppLastSectionHeader )
      *ppLastSectionHeader = pSectionHeader;
    result = Base + pSectionHeader->PointerToRawData - pSectionHeader->VirtualAddress + v4;
  }
  else
  {
    result = 0;
  }
  return result;
}

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

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
改过变量名的吧......但是邪恶,就是邪恶......呵呵...
2009-1-2 08:11
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
分支简单的无所谓,我曾经逆的一个分支比较复杂的解压缩函数,用F5,就给我搞出几千行代码。我自己动作逆,只有500行而已

HEX RAY对多重嵌套的分支还原效果不好,还有对INLINE的函数也识别不好
2009-1-2 14:31
0
雪    币: 399
活跃值: (38)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
膜拜版主12
2009-1-2 14:32
0
雪    币: 211
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
放在不同的机器上有不同的代码,有的可读性很好, 有的很乱,变量太多. 总体而言, 确实邪恶.
2009-1-2 20:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
准备也写一个,不知道难度究竟有多大?
2009-1-2 20:27
0
雪    币: 1946
活跃值: (263)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
7
买个正版的试试
2009-1-2 21:45
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
正版和破解版效率不同?
2009-1-6 10:05
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
9
正版的光是按Enter的感觉就跟破解版不同了
2009-1-6 10:31
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
正版的跟D版的好像没啥不同啊!还是我RP不好。我用一个CrackMe试了一下。反出来的东东没什么区别。
2009-1-6 13:31
0
雪    币: 107
活跃值: (2419)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
hex-rays对分支语句或不连续case语句,极有可能变成goto,并且反复重复。
PS:另外对delphi的try-finally结构的finally后面的语句也不能识别,自动被其忽略了、
2009-1-6 16:37
0
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
突然发现拥有正版的用户不在少数,真希望哪位大牛哪天一不小心又漏出个正版安装或者pj之类的
2009-1-6 16:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我用Hex-ray 碰到这样的问题sub_10009080    endp ; sp-analysis failed,查了是SP的问题,用alt-k改SP如何IDA重新分析,这样F5就可以用了。还有常碰到 351843721i64 是什么意思!
谢谢!
2009-3-12 17:07
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
正版。多少钱呀
2009-3-13 12:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
看不太懂。还是支持一下。
2009-3-14 10:46
0
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
16
不支持ARM...
2009-3-16 19:32
0
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
这是反汇编出高级语言么?太强了!
2009-3-17 11:04
0
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
18
俺怎么弄出来的全是很难懂的代码
2009-3-17 11:52
0
游客
登录 | 注册 方可回帖
返回
//