首页
社区
课程
招聘
[求助]逆向office漏洞检测相关软件
2010-7-28 11:44 4199

[求助]逆向office漏洞检测相关软件

2010-7-28 11:44
4199
由于本人没有office文件结构读写经验,对于相关的操作函数不知.有谁知道,请说一下.

我找了一个office漏洞检测软件逆向学习,想请帮我看一下,这几个函数是什么功能.

  v10 = (*(int (__stdcall **)(void *, _DWORD, _DWORD, _DWORD, int *))(*(_DWORD *)ppObjectOpen + 44))

  v10 = (*(int (__stdcall **)(int, signed int, void **, char *))(*(_DWORD *)v20 + 12))(v20, 1, &v14, &v9);


//这是某个软件中一个检测函数,谁帮我逆一下,说一下流程就可以了.谢了.

signed int __cdecl sub_4044B4(int a1, const WCHAR *pwcsName)
{
  int v3; // ST1C_4@17
  int v4; // [sp+0h] [bp-88h]@14
  int v5; // [sp+4h] [bp-84h]@8
  int v6; // [sp+8h] [bp-80h]@6
  int v7; // [sp+Ch] [bp-7Ch]@3
  int v8; // [sp+10h] [bp-78h]@17
  char v9; // [sp+14h] [bp-74h]@9
  HRESULT v10; // [sp+18h] [bp-70h]@2
  size_t v11; // [sp+1Ch] [bp-6Ch]@15
  void *v12; // [sp+20h] [bp-68h]@17
  int v13; // [sp+24h] [bp-64h]@1
  void *v14; // [sp+28h] [bp-60h]@9
  int v15; // [sp+2Ch] [bp-5Ch]@10
  size_t v16; // [sp+30h] [bp-58h]@15
  unsigned int v17; // [sp+74h] [bp-14h]@1
  void *ppObjectOpen; // [sp+78h] [bp-10h]@1
  bool v19; // [sp+7Ch] [bp-Ch]@1
  int v20; // [sp+80h] [bp-8h]@7
  int v21; // [sp+84h] [bp-4h]@1
  int v22; // [sp+88h] [bp+0h]@1

  v17 = (unsigned int)&v22 ^ dword_415040;
  ppObjectOpen = 0;
  v13 = 0;
  v19 = 0;
  v21 = 0;
  if ( a1 )
  {
    v10 = (*(int (__stdcall **)(int, const WCHAR *, _DWORD, signed int, _DWORD, _DWORD, void **))(*(_DWORD *)a1 + 24))(
            a1,
            pwcsName,
            0,
            16,
            0,
            0,
            &ppObjectOpen);
    if ( v10 < 0 )
    {
      v6 = (int)L"stgopen";
      _CxxThrowException(&v6, &unk_413780);
    }
  }
  else
  {
    v10 = StgOpenStorageEx(pwcsName, 0x20u, 4u, 0, 0, 0, &riid, &ppObjectOpen);
    if ( v10 < 0 )
    {
      v7 = (int)L"Failed StgOpenStorageEx";
      _CxxThrowException(&v7, &unk_413780);
    }
  }
v10 = (*(int (__stdcall **)(void *, _DWORD, _DWORD, _DWORD, int *))(*(_DWORD *)ppObjectOpen + 44))(
          ppObjectOpen,
          0,
          0,
          0,
          &v20);

  if ( v10 < 0 )
  {
    v5 = (int)L"enum";
    _CxxThrowException(&v5, &unk_413780);
  }
  while ( 1 )
  {
    v10 = (*(int (__stdcall **)(int, signed int, void **, char *))(*(_DWORD *)v20 + 12))(v20, 1, &v14, &v9);
    if ( v10 )

      break;
    if ( v15 == 1 )
    {
      v21 = sub_4044B4((int)ppObjectOpen, (WCHAR *)v14);
    }
    else
    {
      v10 = (*(int (__stdcall **)(void *, void *, _DWORD, signed int, _DWORD, int *))(*(_DWORD *)ppObjectOpen + 16))(
              ppObjectOpen,
              v14,
              0,
              16,
              0,
              &v13);

      if ( v10 < 0 )
      {
        sub_4049F5("0x%08x: ", v10);
        v4 = (int)L"Failed OpenStream";
        _CxxThrowException(&v4, &unk_413780);
      }
      v11 = v16;
      if ( v16 > 0x7FFFFFFF )
        return 48;
      v12 = (void *)sub_401D49(v11);
      (*(void (__thiscall **)(int, int, void *, size_t, int *))(*(_DWORD *)v13 + 12))(v3, v13, v12, v11, &v8);
      (*(void (__stdcall **)(int))(*(_DWORD *)v13 + 8))(v13);

      if ( !memcmp(v14, L"__SRP_", 0xCu) )
        dword_4162D8 = 1;
      if ( !wcscmp((const wchar_t *)v14, L"WordDocument") )
        v21 = sub_40256C(v12, v8, ppObjectOpen);
      if ( !wcscmp((const wchar_t *)v14, L"CONTENTS") )
        v21 = sub_401E5D(v12, v8);
      if ( !wcscmp((const wchar_t *)v14, L"Contents") )
        v21 = sub_401F12(v12, v8);
      if ( !wcscmp((const wchar_t *)v14, L"PowerPoint Document") )
        v21 = sub_403C42(v12, v8);
      if ( !wcscmp((const wchar_t *)v14, L"Workbook") || !wcscmp((const wchar_t *)v14, L"Book") )
        v21 = sub_402E4F(v12, v8);
      if ( !wcscmp((const wchar_t *)v14, L"PROJECT") )
        v21 = sub_40416F((char *)v12, v8);
      if ( !wcscmp((const wchar_t *)v14, L"Var2Data") )
      {
        if ( v19 == 1 )
          v21 = sub_4041F2(v12, v8);
      }
      v19 = !wcscmp((const wchar_t *)v14, L"VarMeta") && !wcscmp(pwcsName, L"CFilter");
      if ( !wcscmp((const wchar_t *)v14, L"Ctls") )
        v21 = sub_403BC3(v12, v8);
      if ( !wcscmp((const wchar_t *)v14, L"VisioDocument") )
        v21 = sub_402E04(v12);
      if ( !wcscmp((const wchar_t *)v14 + 1, L"DocumentSummaryInformation")
        || !wcscmp((const wchar_t *)v14 + 1, L"SummaryInformation") )
        v21 = sub_404364(v12, v8);
      free(v12);
    }
    if ( v21 )
    {
      if ( ppObjectOpen )
        (*(void (__stdcall **)(void *))(*(_DWORD *)ppObjectOpen + 8))(ppObjectOpen);

      return v21;
    }
  }
  if ( ppObjectOpen )
    (*(void (__stdcall **)(void *))(*(_DWORD *)ppObjectOpen + 8))(ppObjectOpen);

  return 0;
}

[培训]《安卓高级研修班(网课)》月薪三万计划

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
suyuhai 2010-7-28 13:27
2
0
你还是贴汇编代码吧,F5过后的代码看了会让人崩溃
雪    币: 364
活跃值: (1321)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
wujimaa 1 2010-7-28 13:48
3
0
汇编版

.text:004044B4 ; int __cdecl sub_4044B4(int, WCHAR *pwcsName)
.text:004044B4 sub_4044B4      proc near               ; CODE XREF: sub_4044B4+104p
.text:004044B4                                         ; _wmain+C4p
.text:004044B4
.text:004044B4 var_88          = dword ptr -88h
.text:004044B4 var_84          = dword ptr -84h
.text:004044B4 var_80          = dword ptr -80h
.text:004044B4 var_7C          = dword ptr -7Ch
.text:004044B4 var_78          = dword ptr -78h
.text:004044B4 var_74          = byte ptr -74h
.text:004044B4 var_70          = dword ptr -70h
.text:004044B4 var_6C          = dword ptr -6Ch
.text:004044B4 var_68          = dword ptr -68h
.text:004044B4 var_64          = dword ptr -64h
.text:004044B4 var_60          = dword ptr -60h
.text:004044B4 var_5C          = dword ptr -5Ch
.text:004044B4 var_58          = dword ptr -58h
.text:004044B4 var_14          = dword ptr -14h
.text:004044B4 ppObjectOpen    = dword ptr -10h
.text:004044B4 var_C           = dword ptr -0Ch
.text:004044B4 var_8           = dword ptr -8
.text:004044B4 var_4           = dword ptr -4
.text:004044B4 arg_0           = dword ptr  8
.text:004044B4 pwcsName        = dword ptr  0Ch
.text:004044B4
.text:004044B4                 push    ebp
.text:004044B5                 mov     ebp, esp
.text:004044B7                 sub     esp, 88h
.text:004044BD                 mov     eax, dword_415040
.text:004044C2                 xor     eax, ebp
.text:004044C4                 mov     [ebp+var_14], eax
.text:004044C7                 and     [ebp+ppObjectOpen], 0
.text:004044CB                 and     [ebp+var_64], 0
.text:004044CF                 and     [ebp+var_C], 0
.text:004044D3                 and     [ebp+var_4], 0
.text:004044D7                 cmp     [ebp+arg_0], 0
.text:004044DB                 jnz     short loc_404519
.text:004044DD                 lea     eax, [ebp+ppObjectOpen]
.text:004044E0                 push    eax             ; ppObjectOpen
.text:004044E1                 push    offset riid     ; riid
.text:004044E6                 push    0               ; pSecurityDescriptor
.text:004044E8                 push    0               ; pStgOptions
.text:004044EA                 push    0               ; grfAttrs
.text:004044EC                 push    4               ; stgfmt
.text:004044EE                 push    20h             ; grfMode
.text:004044F0                 push    [ebp+pwcsName]  ; pwcsName
.text:004044F3                 call    ds:StgOpenStorageEx
.text:004044F9                 mov     [ebp+var_70], eax
.text:004044FC                 cmp     [ebp+var_70], 0
.text:00404500                 jge     short loc_404517
.text:00404502                 mov     [ebp+var_7C], offset aFailedStgopens ; "Failed StgOpenStorageEx"
.text:00404509                 push    offset unk_413780
.text:0040450E                 lea     eax, [ebp+var_7C]
.text:00404511                 push    eax
.text:00404512                 call    __CxxThrowException@8 ; _CxxThrowException(x,x)
.text:00404517 ; ---------------------------------------------------------------------------
.text:00404517
.text:00404517 loc_404517:                             ; CODE XREF: sub_4044B4+4Cj
.text:00404517                 jmp     short loc_404551
.text:00404519 ; ---------------------------------------------------------------------------
.text:00404519
.text:00404519 loc_404519:                             ; CODE XREF: sub_4044B4+27j
.text:00404519                 lea     eax, [ebp+ppObjectOpen]
.text:0040451C                 push    eax
.text:0040451D                 push    0
.text:0040451F                 push    0
.text:00404521                 push    10h
.text:00404523                 push    0
.text:00404525                 push    [ebp+pwcsName]
.text:00404528                 mov     eax, [ebp+arg_0]
.text:0040452B                 mov     eax, [eax]
.text:0040452D                 push    [ebp+arg_0]
.text:00404530                 call    dword ptr [eax+18h]
.text:00404533                 mov     [ebp+var_70], eax
.text:00404536                 cmp     [ebp+var_70], 0
.text:0040453A                 jge     short loc_404551
.text:0040453C                 mov     [ebp+var_80], offset aStgopen ; "stgopen"
.text:00404543                 push    offset unk_413780
.text:00404548                 lea     eax, [ebp+var_80]
.text:0040454B                 push    eax
.text:0040454C                 call    __CxxThrowException@8 ; _CxxThrowException(x,x)
.text:00404551 ; ---------------------------------------------------------------------------
.text:00404551
.text:00404551 loc_404551:                             ; CODE XREF: sub_4044B4:loc_404517j
.text:00404551                                         ; sub_4044B4+86j
.text:00404551                 lea     eax, [ebp+var_8]
.text:00404554                 push    eax
.text:00404555                 push    0
.text:00404557                 push    0
.text:00404559                 push    0
.text:0040455B                 mov     eax, [ebp+ppObjectOpen]
.text:0040455E                 mov     eax, [eax]
.text:00404560                 push    [ebp+ppObjectOpen]
.text:00404563                 call    dword ptr [eax+2Ch]
.text:00404566                 mov     [ebp+var_70], eax
.text:00404569                 cmp     [ebp+var_70], 0
.text:0040456D                 jge     short loc_40458A
.text:0040456F                 mov     [ebp+var_84], offset aEnum ; "enum"
.text:00404579                 push    offset unk_413780
.text:0040457E                 lea     eax, [ebp+var_84]
.text:00404584                 push    eax
.text:00404585                 call    __CxxThrowException@8 ; _CxxThrowException(x,x)
.text:0040458A ; ---------------------------------------------------------------------------
.text:0040458A
.text:0040458A loc_40458A:                             ; CODE XREF: sub_4044B4+B9j
.text:0040458A                                         ; sub_4044B4:loc_404861j
.text:0040458A                 lea     eax, [ebp+var_74]
.text:0040458D                 push    eax
.text:0040458E                 lea     eax, [ebp+var_60]
.text:00404591                 push    eax
.text:00404592                 push    1
.text:00404594                 mov     eax, [ebp+var_8]
.text:00404597                 mov     eax, [eax]
.text:00404599                 push    [ebp+var_8]
.text:0040459C                 call    dword ptr [eax+0Ch]
.text:0040459F                 mov     [ebp+var_70], eax
.text:004045A2                 cmp     [ebp+var_70], 0
.text:004045A6                 jnz     loc_404866
.text:004045AC                 cmp     [ebp+var_5C], 1
.text:004045B0                 jnz     short loc_4045C7
.text:004045B2                 push    [ebp+var_60]    ; pwcsName
.text:004045B5                 push    [ebp+ppObjectOpen] ; int
.text:004045B8                 call    sub_4044B4
.text:004045BD                 pop     ecx
.text:004045BE                 pop     ecx
.text:004045BF                 mov     [ebp+var_4], eax
.text:004045C2                 jmp     loc_404845
.text:004045C7 ; ---------------------------------------------------------------------------
.text:004045C7
.text:004045C7 loc_4045C7:                             ; CODE XREF: sub_4044B4+FCj
.text:004045C7                 lea     eax, [ebp+var_64]
.text:004045CA                 push    eax
.text:004045CB                 push    0
.text:004045CD                 push    10h
.text:004045CF                 push    0
.text:004045D1                 push    [ebp+var_60]
.text:004045D4                 mov     eax, [ebp+ppObjectOpen]
.text:004045D7                 mov     eax, [eax]
.text:004045D9                 push    [ebp+ppObjectOpen]
.text:004045DC                 call    dword ptr [eax+10h]
.text:004045DF                 mov     [ebp+var_70], eax
.text:004045E2                 cmp     [ebp+var_70], 0
.text:004045E6                 jge     short loc_404612
.text:004045E8                 push    [ebp+var_70]
.text:004045EB                 push    offset a0x08x   ; "0x%08x: "
.text:004045F0                 call    sub_4049F5
.text:004045F5                 pop     ecx
.text:004045F6                 pop     ecx
.text:004045F7                 mov     [ebp+var_88], offset aFailedOpenstre ; "Failed OpenStream"
.text:00404601                 push    offset unk_413780
.text:00404606                 lea     eax, [ebp+var_88]
.text:0040460C                 push    eax
.text:0040460D                 call    __CxxThrowException@8 ; _CxxThrowException(x,x)
.text:00404612 ; ---------------------------------------------------------------------------
.text:00404612
.text:00404612 loc_404612:                             ; CODE XREF: sub_4044B4+132j
.text:00404612                 mov     eax, [ebp+var_58]
.text:00404615                 mov     [ebp+var_6C], eax
.text:00404618                 cmp     [ebp+var_6C], 7FFFFFFFh
.text:0040461F                 jbe     short loc_404629
.text:00404621                 push    30h
.text:00404623                 pop     eax
.text:00404624                 jmp     loc_404879
.text:00404629 ; ---------------------------------------------------------------------------
.text:00404629
.text:00404629 loc_404629:                             ; CODE XREF: sub_4044B4+16Bj
.text:00404629                 push    [ebp+var_6C]    ; size_t
.text:0040462C                 call    sub_401D49
.text:00404631                 pop     ecx
.text:00404632                 mov     [ebp+var_68], eax
.text:00404635                 lea     eax, [ebp+var_78]
.text:00404638                 push    eax
.text:00404639                 push    [ebp+var_6C]
.text:0040463C                 push    [ebp+var_68]
.text:0040463F                 mov     eax, [ebp+var_64]
.text:00404642                 mov     eax, [eax]
.text:00404644                 push    [ebp+var_64]
.text:00404647                 call    dword ptr [eax+0Ch]
.text:0040464A                 mov     eax, [ebp+var_64]
.text:0040464D                 mov     eax, [eax]
.text:0040464F                 push    [ebp+var_64]
.text:00404652                 call    dword ptr [eax+8]
.text:00404655                 push    0Ch             ; size_t
.text:00404657                 push    offset a__srp_  ; "__SRP_"
.text:0040465C                 push    [ebp+var_60]    ; void *
.text:0040465F                 call    _memcmp
.text:00404664                 add     esp, 0Ch
.text:00404667                 test    eax, eax
.text:00404669                 jnz     short loc_404675
.text:0040466B                 mov     dword_4162D8, 1
.text:00404675
.text:00404675 loc_404675:                             ; CODE XREF: sub_4044B4+1B5j
.text:00404675                 push    offset aWorddocument ; "WordDocument"
.text:0040467A                 push    [ebp+var_60]    ; wchar_t *
.text:0040467D                 call    _wcscmp
.text:00404682                 pop     ecx
.text:00404683                 pop     ecx
.text:00404684                 test    eax, eax
.text:00404686                 jnz     short loc_40469C
.text:00404688                 push    [ebp+ppObjectOpen]
.text:0040468B                 push    [ebp+var_78]
.text:0040468E                 push    [ebp+var_68]
.text:00404691                 call    sub_40256C
.text:00404696                 add     esp, 0Ch
.text:00404699                 mov     [ebp+var_4], eax
.text:0040469C
.text:0040469C loc_40469C:                             ; CODE XREF: sub_4044B4+1D2j
.text:0040469C                 push    offset aContents ; "CONTENTS"
.text:004046A1                 push    [ebp+var_60]    ; wchar_t *
.text:004046A4                 call    _wcscmp
.text:004046A9                 pop     ecx
.text:004046AA                 pop     ecx
.text:004046AB                 test    eax, eax
.text:004046AD                 jnz     short loc_4046BF
.text:004046AF                 push    [ebp+var_78]
.text:004046B2                 push    [ebp+var_68]
.text:004046B5                 call    sub_401E5D
.text:004046BA                 pop     ecx
.text:004046BB                 pop     ecx
.text:004046BC                 mov     [ebp+var_4], eax
.text:004046BF
.text:004046BF loc_4046BF:                             ; CODE XREF: sub_4044B4+1F9j
.text:004046BF                 push    offset aContents_0 ; "Contents"
.text:004046C4                 push    [ebp+var_60]    ; wchar_t *
.text:004046C7                 call    _wcscmp
.text:004046CC                 pop     ecx
.text:004046CD                 pop     ecx
.text:004046CE                 test    eax, eax
.text:004046D0                 jnz     short loc_4046E2
.text:004046D2                 push    [ebp+var_78]
.text:004046D5                 push    [ebp+var_68]
.text:004046D8                 call    sub_401F12
.text:004046DD                 pop     ecx
.text:004046DE                 pop     ecx
.text:004046DF                 mov     [ebp+var_4], eax
.text:004046E2
.text:004046E2 loc_4046E2:                             ; CODE XREF: sub_4044B4+21Cj
.text:004046E2                 push    offset aPowerpointDocu ; "PowerPoint Document"
.text:004046E7                 push    [ebp+var_60]    ; wchar_t *
.text:004046EA                 call    _wcscmp
.text:004046EF                 pop     ecx
.text:004046F0                 pop     ecx
.text:004046F1                 test    eax, eax
.text:004046F3                 jnz     short loc_404705
.text:004046F5                 push    [ebp+var_78]
.text:004046F8                 push    [ebp+var_68]
.text:004046FB                 call    sub_403C42
.text:00404700                 pop     ecx
.text:00404701                 pop     ecx
.text:00404702                 mov     [ebp+var_4], eax
.text:00404705
.text:00404705 loc_404705:                             ; CODE XREF: sub_4044B4+23Fj
.text:00404705                 push    offset aWorkbook ; "Workbook"
.text:0040470A                 push    [ebp+var_60]    ; wchar_t *
.text:0040470D                 call    _wcscmp
.text:00404712                 pop     ecx
.text:00404713                 pop     ecx
.text:00404714                 test    eax, eax
.text:00404716                 jz      short loc_40472B
.text:00404718                 push    offset aBook    ; "Book"
.text:0040471D                 push    [ebp+var_60]    ; wchar_t *
.text:00404720                 call    _wcscmp
.text:00404725                 pop     ecx
.text:00404726                 pop     ecx
.text:00404727                 test    eax, eax
.text:00404729                 jnz     short loc_40473B
.text:0040472B
.text:0040472B loc_40472B:                             ; CODE XREF: sub_4044B4+262j
.text:0040472B                 push    [ebp+var_78]
.text:0040472E                 push    [ebp+var_68]
.text:00404731                 call    sub_402E4F
.text:00404736                 pop     ecx
.text:00404737                 pop     ecx
.text:00404738                 mov     [ebp+var_4], eax
.text:0040473B
.text:0040473B loc_40473B:                             ; CODE XREF: sub_4044B4+275j
.text:0040473B                 push    offset aProject ; "PROJECT"
.text:00404740                 push    [ebp+var_60]    ; wchar_t *
.text:00404743                 call    _wcscmp
.text:00404748                 pop     ecx
.text:00404749                 pop     ecx
.text:0040474A                 test    eax, eax
.text:0040474C                 jnz     short loc_40475E
.text:0040474E                 push    [ebp+var_78]    ; int
.text:00404751                 push    [ebp+var_68]    ; char *
.text:00404754                 call    sub_40416F
.text:00404759                 pop     ecx
.text:0040475A                 pop     ecx
.text:0040475B                 mov     [ebp+var_4], eax
.text:0040475E
.text:0040475E loc_40475E:                             ; CODE XREF: sub_4044B4+298j
.text:0040475E                 push    offset aVar2data ; "Var2Data"
.text:00404763                 push    [ebp+var_60]    ; wchar_t *
.text:00404766                 call    _wcscmp
.text:0040476B                 pop     ecx
.text:0040476C                 pop     ecx
.text:0040476D                 test    eax, eax
.text:0040476F                 jnz     short loc_404787
.text:00404771                 cmp     [ebp+var_C], 1
.text:00404775                 jnz     short loc_404787
.text:00404777                 push    [ebp+var_78]
.text:0040477A                 push    [ebp+var_68]
.text:0040477D                 call    sub_4041F2
.text:00404782                 pop     ecx
.text:00404783                 pop     ecx
.text:00404784                 mov     [ebp+var_4], eax
.text:00404787
.text:00404787 loc_404787:                             ; CODE XREF: sub_4044B4+2BBj
.text:00404787                                         ; sub_4044B4+2C1j
.text:00404787                 push    offset aVarmeta ; "VarMeta"
.text:0040478C                 push    [ebp+var_60]    ; wchar_t *
.text:0040478F                 call    _wcscmp
.text:00404794                 pop     ecx
.text:00404795                 pop     ecx
.text:00404796                 test    eax, eax
.text:00404798                 jnz     short loc_4047B6
.text:0040479A                 push    offset aCfilter ; "CFilter"
.text:0040479F                 push    [ebp+pwcsName]  ; wchar_t *
.text:004047A2                 call    _wcscmp
.text:004047A7                 pop     ecx
.text:004047A8                 pop     ecx
.text:004047A9                 test    eax, eax
.text:004047AB                 jnz     short loc_4047B6
.text:004047AD                 mov     [ebp+var_C], 1
.text:004047B4                 jmp     short loc_4047BA
.text:004047B6 ; ---------------------------------------------------------------------------
.text:004047B6
.text:004047B6 loc_4047B6:                             ; CODE XREF: sub_4044B4+2E4j
.text:004047B6                                         ; sub_4044B4+2F7j
.text:004047B6                 and     [ebp+var_C], 0
.text:004047BA
.text:004047BA loc_4047BA:                             ; CODE XREF: sub_4044B4+300j
.text:004047BA                 push    offset aCtls    ; "Ctls"
.text:004047BF                 push    [ebp+var_60]    ; wchar_t *
.text:004047C2                 call    _wcscmp
.text:004047C7                 pop     ecx
.text:004047C8                 pop     ecx
.text:004047C9                 test    eax, eax
.text:004047CB                 jnz     short loc_4047DD
.text:004047CD                 push    [ebp+var_78]    ; int
.text:004047D0                 push    [ebp+var_68]    ; void *
.text:004047D3                 call    sub_403BC3
.text:004047D8                 pop     ecx
.text:004047D9                 pop     ecx
.text:004047DA                 mov     [ebp+var_4], eax
.text:004047DD
.text:004047DD loc_4047DD:                             ; CODE XREF: sub_4044B4+317j
.text:004047DD                 push    offset aVisiodocument ; "VisioDocument"
.text:004047E2                 push    [ebp+var_60]    ; wchar_t *
.text:004047E5                 call    _wcscmp
.text:004047EA                 pop     ecx
.text:004047EB                 pop     ecx
.text:004047EC                 test    eax, eax
.text:004047EE                 jnz     short loc_404800
.text:004047F0                 push    [ebp+var_78]
.text:004047F3                 push    [ebp+var_68]
.text:004047F6                 call    sub_402E04
.text:004047FB                 pop     ecx
.text:004047FC                 pop     ecx
.text:004047FD                 mov     [ebp+var_4], eax
.text:00404800
.text:00404800 loc_404800:                             ; CODE XREF: sub_4044B4+33Aj
.text:00404800                 push    offset aDocumentsummar ; "DocumentSummaryInformation"
.text:00404805                 mov     eax, [ebp+var_60]
.text:00404808                 inc     eax
.text:00404809                 inc     eax
.text:0040480A                 push    eax             ; wchar_t *
.text:0040480B                 call    _wcscmp
.text:00404810                 pop     ecx
.text:00404811                 pop     ecx
.text:00404812                 test    eax, eax
.text:00404814                 jz      short loc_40482C
.text:00404816                 push    offset aSummaryinforma ; "SummaryInformation"
.text:0040481B                 mov     eax, [ebp+var_60]
.text:0040481E                 inc     eax
.text:0040481F                 inc     eax
.text:00404820                 push    eax             ; wchar_t *
.text:00404821                 call    _wcscmp
.text:00404826                 pop     ecx
.text:00404827                 pop     ecx
.text:00404828                 test    eax, eax
.text:0040482A                 jnz     short loc_40483C
.text:0040482C
.text:0040482C loc_40482C:                             ; CODE XREF: sub_4044B4+360j
.text:0040482C                 push    [ebp+var_78]
.text:0040482F                 push    [ebp+var_68]
.text:00404832                 call    sub_404364
.text:00404837                 pop     ecx
.text:00404838                 pop     ecx
.text:00404839                 mov     [ebp+var_4], eax
.text:0040483C
.text:0040483C loc_40483C:                             ; CODE XREF: sub_4044B4+376j
.text:0040483C                 push    [ebp+var_68]    ; void *
.text:0040483F                 call    _free
.text:00404844                 pop     ecx
.text:00404845
.text:00404845 loc_404845:                             ; CODE XREF: sub_4044B4+10Ej
.text:00404845                 cmp     [ebp+var_4], 0
.text:00404849                 jz      short loc_404861
.text:0040484B                 cmp     [ebp+ppObjectOpen], 0
.text:0040484F                 jz      short loc_40485C
.text:00404851                 mov     eax, [ebp+ppObjectOpen]
.text:00404854                 mov     eax, [eax]
.text:00404856                 push    [ebp+ppObjectOpen]
.text:00404859                 call    dword ptr [eax+8]
.text:0040485C
.text:0040485C loc_40485C:                             ; CODE XREF: sub_4044B4+39Bj
.text:0040485C                 mov     eax, [ebp+var_4]
.text:0040485F                 jmp     short loc_404879
.text:00404861 ; ---------------------------------------------------------------------------
.text:00404861
.text:00404861 loc_404861:                             ; CODE XREF: sub_4044B4+395j
.text:00404861                 jmp     loc_40458A
.text:00404866 ; ---------------------------------------------------------------------------
.text:00404866
.text:00404866 loc_404866:                             ; CODE XREF: sub_4044B4+F2j
.text:00404866                 cmp     [ebp+ppObjectOpen], 0
.text:0040486A                 jz      short loc_404877
.text:0040486C                 mov     eax, [ebp+ppObjectOpen]
.text:0040486F                 mov     eax, [eax]
.text:00404871                 push    [ebp+ppObjectOpen]
.text:00404874                 call    dword ptr [eax+8]
.text:00404877
.text:00404877 loc_404877:                             ; CODE XREF: sub_4044B4+3B6j
.text:00404877                 xor     eax, eax
.text:00404879
.text:00404879 loc_404879:                             ; CODE XREF: sub_4044B4+170j
.text:00404879                                         ; sub_4044B4+3ABj
.text:00404879                 mov     ecx, [ebp+var_14]
.text:0040487C                 xor     ecx, ebp
.text:0040487E                 call    sub_404FD3
.text:00404883                 leave
.text:00404884                 retn
.text:00404884 sub_4044B4      endp
游客
登录 | 注册 方可回帖
返回