首页
社区
课程
招聘
HexRay不能识别数据初始值和长度?
发表于: 2013-2-27 10:00 2899

HexRay不能识别数据初始值和长度?

2013-2-27 10:00
2899
小弟初学,发现HexRay对代码的分析能力相当了得,可对数据的处理略显欠缺,大家有没有遇到过这样的情况

例子一:得不到.data段中的初始值
int gData = 1;
int main()
{
        if(gData)
                MessageBox(NULL, "123", "123", MB_OK);
        return 0;
}
逆向得
extern int dword_406030; // weak// 初始值呢???
int __cdecl main(int argc, const char **argv, const char **envp)
{
  if ( dword_406030 )
    MessageBoxA(0, "123", "123", 0);
  return 0;
}

例子二:得不到数组长度
int main()
{
        char buf[1024] = {0};
        memset(buf, '1', 10);
        MessageBox(NULL, buf, buf, MB_OK);

        return 0;
}
逆向得
int __cdecl main(int argc, const char **argv, const char **envp)
{
  const CHAR Dst; // [sp+4h] [bp-400h]@1// 数组长度都要我自己填吗?
  char v5; // [sp+5h] [bp-3FFh]@1
  __int16 v6; // [sp+401h] [bp-3h]@1
  char v7; // [sp+403h] [bp-1h]@1

  Dst = 0;
  memset(&v5, 0, 0x3FCu);
  v6 = 0;
  v7 = 0;
  memset((void *)&Dst, 49, 0xAu);
  MessageBoxA(0, &Dst, &Dst, 0);
  return 0;
}

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 82
活跃值: (271)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
1.

"x" 一下 dword_406030 这里存放的应该是 1
然后 n 一下 dword_406030 命名为 _1_

2.
char buf[1024] = {0}; 翻译成了
Dst = 0;
memset(&v5, 0, 0x3FCu);
2013-2-27 21:01
0
游客
登录 | 注册 方可回帖
返回
//