首页
社区
课程
招聘
[求助]C++逆向F5语句求指导
发表于: 2015-10-13 20:40 3969

[求助]C++逆向F5语句求指导

2015-10-13 20:40
3969
以下是IDA F5的一个构造函数
__int64 __fastcall sagem_bio::cmn::Block::Block(sagem_bio::cmn::Block *this, int a2)
{
  sagem_bio::cmn::Block *v2; // rbx@1
  sagem_bio::cmn::CallbackManager *v3; // rdi@1
  _BYTE *v4; // rax@1
  __int64 result; // rax@2
  sagem_bio::cmn::CallbackManager *v6; // rax@3
  sagem_bio::cmn::CallbackManager *v7; // rax@3
  __int64 v8; // rax@3
  __int64 v9; // rbp@3

  v2 = this;
  *((_QWORD *)this + 1) = 0LL;                  // char* cp1
  *((_DWORD *)this + 4) = a2;                   // int型
  *((_DWORD *)this + 5) = a2;                   // int型
  *((_BYTE *)this + 24) = 1;                    // char/bool型  :isAttach
  *(_QWORD *)this = (char *)&`vtable for'sagem_bio::cmn::Block + 16;
  v3 = (sagem_bio::cmn::CallbackManager *)(unsigned int)(a2 + 8);
  v4 = (_BYTE *)operator new[]((unsigned __int64)v3);

  *((_QWORD *)v2 + 1) = v4;                     // cp1
  if ( !v4 )
  {
    v6 = (sagem_bio::cmn::CallbackManager *)sagem_bio::cmn::CallbackManager::GetInstance(v3);// CallbackManager::m__Instance
    v7 = sagem_bio::cmn::CallbackManager::GetContext(v6);
    sagem_bio::cmn::SGM_Report(
      (__int64)v7,
      0,
      0x2Du,
      "../../../ESCROW_FE/LIGHTV10/linux-64bits-gcc4-pic-multiprot/srcCMN/StandardLibrary/src/CMN_Block.cpp",
      "Memory allocation failed.");
    LODWORD(v8) = __cxa_allocate_exception(80LL);
    v9 = v8;
    sagem_bio::cmn::BasicException::BasicException(
      v8,
      "../../../ESCROW_FE/LIGHTV10/linux-64bits-gcc4-pic-multiprot/srcCMN/StandardLibrary/src/CMN_Block.cpp",
      45LL,
      2LL,
      0LL);
    __cxa_throw(v9, &`typeinfo for'sagem_bio::cmn::BasicException, sagem_bio::cmn::BasicException::~BasicException);
  }
  *((_BYTE *)v2 + 24) = 1;
  *v4 = -103;
  *(_BYTE *)(*((_QWORD *)v2 + 1) + 1LL) = -85;
  *(_BYTE *)(*((_QWORD *)v2 + 1) + 2LL) = -51;
  *(_BYTE *)(*((_QWORD *)v2 + 1) + 3LL) = -103;
  *(_BYTE *)(*((_QWORD *)v2 + 1) + (unsigned int)(*((_DWORD *)v2 + 4) + 4)) = -103;
  *(_BYTE *)(*((_QWORD *)v2 + 1) + (unsigned int)(*((_DWORD *)v2 + 4) + 5)) = -85;
  *(_BYTE *)(*((_QWORD *)v2 + 1) + (unsigned int)(*((_DWORD *)v2 + 4) + 6)) = -51;
  result = *((_QWORD *)v2 + 1);
  *(_BYTE *)(result + (unsigned int)(*((_DWORD *)v2 + 4) + 7)) = -103;
  return result;
}

问题1:红色字体的语句没有看懂,是说的虚函数表中的偏移吗?
问题2:  v3 = (sagem_bio::cmn::CallbackManager *)(unsigned int)(a2 + 8);
  把整型数转化成一个类的指针,是什么意思。如果上面语句中的类是这个构造函数类的基类,这个语句又怎么理解呢?
问题3:上面蓝色字体函数代码:
_QWORD *__fastcall sagem_bio::cmn::CallbackManager::GetInstance(sagem_bio::cmn::CallbackManager *this)
{
  return &sagem_bio::cmn::CallbackManager::m__Instance;
}
接受的函数是是它类本身的指针,返回的是类中的一个变量,从函数名猜测可能是返回类的一个实例,那么在CallbackManager这个类中会返回什么实例呢,它本身的?还是它子类的?

新手,求耐心指导。

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 237
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
没有分析类型,分析类型才是主要要做的
2015-10-14 10:33
0
游客
登录 | 注册 方可回帖
返回
//