MS12-054 の解析 その3

MS12-054 の解析と Windows 2000用セキュリティ更新プログラム
魔改造版 Windows 2000 の netapi32.dll での障害について

というわけで解析しなおしました

 L592671E1:
          mov    ecx,[ebp-30h]
          lea    eax,[edi-01h]
          imul    eax,[ebp-38h]
       
          push    [eax+ecx+04h]
          lea    eax,[ebp-24h]
          push    eax
          call    [msvcrt.dll!wcscpy]
          mov    eax,[ebp-34h]
          add    eax,esi
        ;**************************************
          cmp    eax,[ebp+18h]
          pop    ecx
          pop    ecx
          mov    byte ptr [ebp-44h],01h
          jc    L5925B838
          mov    dword ptr [ebp-28h],000000EAh
 L59267214:
          cmp    [ebp-28h],ebx
          jnz    L592657ED
          jmp    L5925B8BC
 

旧コード1

 L5926711A:
          mov    ecx,[ebp-30h]
          lea    eax,[edi-01h]
          imul    eax,[ebp-38h]
          push    0000000Fh
          push    [eax+ecx+04h]
          lea    eax,[ebp-24h]
          push    eax
          call    [msvcrt.dll!wcsncpy]
          mov    eax,[ebp-34h]
          add    eax,esi
          add    esp,0000000Ch
          cmp    eax,[ebp+18h]
          mov    [ebp-06h],bx
          mov    byte ptr [ebp-44h],01h
          jc     L5925BB3B
          mov    dword ptr [ebp-28h],000000EAh
 L59267154:
          cmp    [ebp-28h],ebx
          jnz    L5925D63D
          jmp    L5925BBBF

修正版

RxRemoteApi:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,00000198h
          mov    eax,[L5929F18C]
          mov    [ebp-04h],eax
          movzx    eax,[ebp+08h]
;
          push    edi
          xor    edi,edi
;
          cmp    eax,[ebp+08h]
          mov    [ebp-00000190h],edi
          jnz    L592676BC
          push    [ebp+0Ch]
          call    NetpIsUncComputerNameValid
          test    eax,eax
          jz     L592676C4
          push    esi
          lea    eax,[ebp-0000016Ch]
          mov    [ebp-00000184h],eax
          lea    eax,[ebp-00000194h]
          push    eax
          push    edi
          lea    eax,[ebp-00000178h]
          push    eax
          lea    eax,[ebp-00000184h]
          push    eax
          push    [ebp+1Ch]
          mov    esi,00000168h
          push    [ebp+10h]
          lea    eax,[ebp-0000016Ch]
          push    [ebp+08h]
          mov    [ebp-00000174h],edi
          push    esi
          push    eax
          mov    [ebp-00000188h],edi
          mov    [ebp-00000178h],edi
          mov    dword ptr [ebp-0000018Ch],00000004h
          call    SUB_L5925C8C7
          cmp    eax,edi
          jnz    L5925BD73
          test    byte ptr [ebp+2Fh],80h
          lea    eax,[ebp+30h]
          mov    [ebp-00000170h],eax
          jz     L5925BC2B
          lea    eax,[ebp+34h]
          mov    [ebp-00000170h],eax
          mov    eax,[ebp+30h]
          mov    [ebp-00000190h],eax
 L5925BC2B:
          push    [ebp+2Ch]
          lea    eax,[ebp-00000188h]
          push    eax
          lea    eax,[ebp-00000174h]
          push    eax
          lea    eax,[ebp-0000017Ch]
          push    eax
          lea    eax,[ebp-00000198h]
          push    eax
          lea    eax,[ebp-00000170h]
          push    eax
          lea    eax,[ebp-00000184h]
          push    eax
          lea    eax,[ebp-00000178h]
          push    eax
          lea    eax,[ebp-0000018Ch]
          push    eax
          push    esi
          push    esi
          push    [ebp+28h]
          push    [ebp+24h]
          push    [ebp+20h]
          push    [ebp+1Ch]
          push    [ebp+18h]
          push    [ebp+14h]
          push    [ebp-00000194h]
          call    SUB_L5925CADB
          cmp    eax,edi
          mov    [ebp-00000170h],edi
          jnz    L5925BD73
          mov    eax,[ebp-00000174h]
          cmp    eax,edi
          push    ebx
          jz     L5925BD7F
          push    eax
          mov    [ebp-00000180h],eax
          call    SUB_L59258FB7
          mov    ebx,eax
          cmp    ebx,edi
          jz     L592676CE
 L5925BCB8:
          mov    eax,[ebp+2Ch]
          and    eax,00000001h
          push    eax
          lea    eax,[ebp-00000180h]
          push    eax
          push    ebx
          push    [ebp-0000018Ch]
      &n
bsp;   lea    eax,[ebp-0000016Ch]
          push    eax
          push    [ebp-00000198h]
          push    [ebp-0000017Ch]
          push    [ebp-00000178h]
          push    eax
          push    [ebp-00000190h]
          push    [ebp+0Ch]
          call    SUB_L5925BD91
          mov    esi,eax
          cmp    esi,edi
          jnz    L592676D6
        
        
        
        
        
        
        
        
        
        

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

        
        
        

        

        
 L5925BCFF:
          test    byte ptr [ebp+2Fh],80h
          lea    eax,[ebp+30h]
          mov    [ebp-00000170h],eax
          jz     L5925BD17
          lea    eax,[ebp+34h]
          mov    [ebp-00000170h],eax
 L5925BD17:
          push    [ebp+2Ch]
          lea    eax,[ebp-00000170h]
          push    [ebp-00000174h]
          push    [ebp-00000188h]
          push    [ebp-00000180h]
          push    ebx
          push    eax
          push    [ebp+24h]
          lea    eax,[ebp-0000016Ch]
          push    [ebp+20h]
          push    [ebp+18h]
          push    [ebp+14h]
          push    [ebp+10h]
          push    eax
          push    [ebp+08h]
          call    SUB_L5925C470
          mov    esi,eax
          mov    [ebp-00000170h],edi
 L5925BD5A:
          cmp    [ebp-0000017Ch],edi
          jnz    L59267701
 L5925BD66:
          cmp    ebx,edi
          jz     L5925BD70
          push    ebx
          call    SUB_L592579E0
 L5925BD70:
          mov    eax,esi
 L5925BD72:
          pop    ebx
 L5925BD73:
          pop    esi
 L5925BD74:
          mov    ecx,[ebp-04h]
          pop    edi
          call    SUB_L59253D80
          leave
          retn
;------------------------------------------------------------------------------
 L5925BD7F:
          mov    [ebp-00000180h],edi
          xor    ebx,ebx
          jmp    L5925BCB8
 
 L5926C79D:
          or    dword ptr [esi+1Ch],FFFFFFFFh
          mov    [esi+14h],ebx
          mov    [esi+18h],ebx
          mov    [esi+40h],bx
          jmp    L59265D79
 
  L5926C796:
          xor    eax,eax
          jmp    L59265D7C

旧コード2

 RxRemoteApi:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,00000198h
          mov    eax,[L5929F18C]
    
      mov    [ebp-04h],eax
          movzx    eax,[ebp+08h]
          push    ebx
          push    edi
          xor    edi,edi
          xor    ebx,ebx
          cmp    eax,[ebp+08h]

          jnz    L592675FC
          push    [ebp+0Ch]
          call    NetpIsUncComputerNameValid
          test    eax,eax
          jz     L59267604
          push    esi
          lea    eax,[ebp-0000016Ch]
          mov    [ebp-00000188h],eax
          lea    eax,[ebp-00000190h]
          push    eax
          push    edi
          lea    eax,[ebp-00000180h]
          push    eax
          lea    eax,[ebp-00000188h]
          push    eax
          push    [ebp+1Ch]
          mov    esi,00000168h
          push    [ebp+10h]
          lea    eax,[ebp-0000016Ch]
          push    [ebp+08h]
          mov    [ebp-00000174h],edi
          push    esi
          push    eax
          mov    [ebp-0000018Ch],edi
          mov    [ebp-00000180h],edi
          mov    dword ptr [ebp-00000184h],00000004h
          call    SUB_L5925C56B
          cmp    eax,edi
          jnz    L5925CB0A
          test    byte ptr [ebp+2Fh],80h
          lea    eax,[ebp+30h]
          mov    [ebp-00000170h],eax
          jz     L5925BF25
          mov    ebx,[ebp+30h]
          lea    eax,[ebp+34h]
          mov    [ebp-00000170h],eax
 L5925BF25:
          push    [ebp+2Ch]
          mov    [ebp-00000194h],eax
          lea    eax,[ebp-0000018Ch]
          push    eax
          lea    eax,[ebp-00000174h]
          push    eax
          lea    eax,[ebp-0000017Ch]
          push    eax
          lea    eax,[ebp-00000198h]
          push    eax
          lea    eax,[ebp-00000170h]
          push    eax
          lea    eax,[ebp-00000188h]
          push    eax
          lea    eax,[ebp-00000180h]
          push    eax
          lea    eax,[ebp-00000184h]
          push    eax
          push    esi
          push    esi
          push    [ebp+28h]
          push    [ebp+24h]
          push    [ebp+20h]
          push    [ebp+1Ch]
          push    [ebp+18h]
          push    [ebp+14h]
          push    [ebp-00000190h]
          call    SUB_L5925C77F
          cmp    eax,edi
          mov    [ebp-00000170h],edi
          jnz    L5925CB0A
          mov    eax,[ebp-00000174h]
          cmp    eax,edi
;
          jz     L5925CB17
          push    eax
          mov    [ebp-00000178h],eax
          call    SUB_L59258FB7
          mov    esi,eax
          cmp    esi,edi
          jz     L5926760E
 L5925BFB7:
          mov    eax,[ebp+2Ch]
          and    eax,00000001h
          push    eax
          lea    eax,[ebp-00000178h]
          push    eax
          push    esi
          push    [ebp-00000184h]
          lea    eax,[ebp-0000016Ch]
          push    eax
          push    [ebp-00000198h]
          push    [ebp-0000017Ch]
          push    [ebp-00000180h]
          push    eax
   &
nbsp;      push    ebx
          push    [ebp+0Ch]
          call    SUB_L5925C003
          mov    ebx,eax
          cmp    ebx,edi
          jnz    L59267616
  L5926763D:
          push    [ebp-00000178h]
          lea    eax,[ebp-0000016Ch]
          push    esi
          push    [ebp-00000184h]
          push    eax
          push    [ebp-00000194h]
          push    [ebp+08h]
          call    SUB_L592717FC
          test    eax,eax
          jnz    L5925CA97
          push    0000000Dh
          pop    ebx
          jmp    L5925CAF2
 SUB_L59271754:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          cmp    dword ptr [ebp+10h],00000008h
          push    esi
          push    edi
          jnc    L59271768
          xor    eax,eax
          jmp    L592717F1
 L59271768:
          push    ebx
          xor    ebx,ebx
          cmp    [ebp+08h],ebx
          jnz    L59271779
          mov    dword ptr [ebp+10h],00000010h
          jmp    L59271786
 L59271779:
          cmp    dword ptr [ebp+08h],00000001h
          jnz    L592717EE
          mov    dword ptr [ebp+10h],0000001Ah
 L59271786:
          mov    edi,[ebp+0Ch]
          mov    si,[edi+04h]
          movzx    eax,si
          imul    eax,[ebp+10h]
          cmp    eax,[ebp+18h]
          ja     L592717EE
          cmp    si,bx
          mov    edx,[ebp+14h]
          jbe    L592717E9
 L592717A1:
          push    00000010h
          push    edx
          call    SUB_L59271729
          test    eax,eax
          jz     L592717EE
          cmp    dword ptr [ebp+08h],00000001h
          jnz    L592717E0
          mov    ax,[edx+16h]
          sub    ax,[edi+02h]
          movzx    eax,ax
          cmp    eax,[ebp+18h]
          jnc    L592717EE
          mov    ecx,[ebp+18h]
          sub    ecx,eax
          cmp    ecx,00000031h
          jc     L592717D0
          push    00000031h
          pop    ecx
 L592717D0:
          push    ecx
          mov    ecx,[ebp+14h]
          add    eax,ecx
          push    eax
          call    SUB_L59271729
          test    eax,eax
          jz     L592717EE
 L592717E0:
          add    edx,[ebp+10h]
          inc    ebx
          cmp    bx,si
          jc     L592717A1
 L592717E9:
          xor    eax,eax
          inc    eax
          jmp    L592717F0
 L592717EE:
          xor    eax,eax
 L592717F0:
          pop    ebx
 L592717F1:
          pop    edi
          pop    esi
          pop    ebp
          retn    0014h
;------------------------------------------------------------------------------
 SUB_L592717FC:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          xor    eax,eax
          inc    eax
          cmp    dword ptr [ebp+08h],00000068h
          jz     L59271813
          cmp    dword ptr [ebp+08h],000000D7h
          jnz    L59271829
 L59271813:
         
push    [ebp+1Ch]
          mov    eax,[ebp+0Ch]
          push    [ebp+18h]
          push    [ebp+14h]
          push    [ebp+10h]
          push    [eax]
          call    SUB_L59271754
 L59271829:
          pop    ebp
          retn    0018h
 SUB_L59271729:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          xor    eax,eax
          cmp    [ebp+0Ch],eax
          jbe    L59271744
 L59271735:
          mov    ecx,[ebp+08h]
          cmp    byte ptr [eax+ecx],00h
          jz     L5927174A
          inc    eax
          cmp    eax,[ebp+0Ch]
          jc     L59271735
 L59271744:
          xor    eax,eax
 L59271746:
          pop    ebp
          retn    0008h
;------------------------------------------------------------------------------
 L5927174A:
          xor    eax,eax
          inc    eax
          jmp    L59271746

;------------------------------------------------------------------------------
 L5925CA97:
          test    byte ptr [ebp+2Fh],80h
          lea    eax,[ebp+30h]
          mov    [ebp-00000170h],eax
          jz     L5925CAAF
          lea    eax,[ebp+34h]
          mov    [ebp-00000170h],eax
 L5925CAAF:
          push    [ebp+2Ch]
          lea    eax,[ebp-00000170h]
          push    [ebp-00000174h]
          push    [ebp-0000018Ch]
          push    [ebp-00000178h]
          push    esi
          push    eax
          push    [ebp+24h]
          lea    eax,[ebp-0000016Ch]
          push    [ebp+20h]
          push    [ebp+18h]
          push    [ebp+14h]
          push    [ebp+10h]
          push    eax
          push    [ebp+08h]
          call    SUB_L5925CD47
          mov    ebx,eax
          mov    [ebp-00000170h],edi
 L5925CAF2:
          cmp    [ebp-0000017Ch],edi
          jnz    L5926766F
 L5925CAFE:
          cmp    esi,edi
          jz     L5925CB08
          push    esi
          call    SUB_L592579E0
 L5925CB08:
          mov    eax,ebx
 L5925CB0A:
          pop    esi
 L5925CB0B:
          mov    ecx,[ebp-04h]
          pop    edi
          pop    ebx
          call    SUB_L59253D80
          leave
          retn
;------------------------------------------------------------------------------
 L5925CB17:
          mov    [ebp-00000178h],edi
          xor    esi,esi
          jmp    L5925BFB7

 L5926C893_:
          or    dword ptr [esi+1Ch],FFFFFFFFh
          mov    [esi+14h],ebx
          mov    [esi+18h],ebx
          mov    [esi+40h],bx
          jmp    L5925D8E9

  L5926C873:
          xor    eax,eax
          jmp    L5925D8EC

修正版

SUB_L5925A51B:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    ecx
          mov    ecx,[ebp+08h]
          mov    ax,[ecx]
          push    ebx
          push    esi
          push    edi
          xor    ebx,ebx
          xor    edi,edi
          cmp    ax,005Ch
          push    0000002Fh
          mov    [ebp-04h],ebx
          pop    esi
          jz     L5925D83D
          cmp    ax,si
          jz     L5925D83D
 L5925A547:
          test    ax,ax
          mov    esi,ecx
          jz     L5925A5B4
 L5925A54E:
          cmp    ax,005Ch
          jz     L59261A8F
          cmp    ax,002Eh
          jz     L5925A56D
 L5925A55E:
          inc    esi
          inc    esi
 L5925A560:
          mov    ax,[esi]
          test    ax,ax
          jz     L5925A5B4
          mov    ebx,[ebp-04h]
          jmp    L5925A54E
 L5925A56D:
          lea    eax,[esi-02h]
          cmp    ebx,eax
          jnz    L59261AAE
 L5925A578:
          lea    eax,[esi+02h]
          mov    dx,[eax]
          cmp    dx,002Eh
          jnz    L59268AFF
          lea    eax,[esi+04h]
          mov    bx,[eax]
          cmp    bx,005Ch
          jz     L5925A599
          test    bx,bx
          jnz    L5925A55E
 L5925A599:
          test    edi,edi
          jz     L59261ABB
          push    eax
          push    edi
          call    [msvcrt.dll!wcscpy]
          test    bx,bx
          pop    ecx
          pop    ecx
          jnz    L59268AD0
 L5925A5B4:
          xor    eax,eax
          inc    eax
 L5925A5B7:
          pop    edi
          pop    esi
          pop    ebx
          leave
          retn    0004h
 L59268AD0:
          mov    [ebp-04h],edi
          mov    esi,edi
          lea    eax,[edi-02h]
          jmp    L59268AE1
 L59261A8F:
          lea    eax,[esi-02h]
          cmp    ebx,eax
          jz     L59261ABB
          mov    edi,ebx
          mov    [ebp-04h],esi
          jmp    L5925A55E

 L59261AAE:
          cmp    esi,ecx
          jz     L5925A578
          jmp    L5925A55E

        
 L59261AA0:
          cmp    dx,si
          jz     L5925D84B
          jmp    L5925A547
        
 L59268ADA:
          cmp    eax,[ebp+08h]
          jz     L59268AE7
          dec    eax
          dec    eax
 L59268AE1:
          cmp    word ptr [eax],005Ch
          jnz    L59268ADA
 L59268AE7:
          mov    di,[eax]
          mov    ecx,[ebp+08h]
          sub    di,005Ch
          neg    di
          sbb    edi,edi
          not    edi
          and    edi,eax
          jmp    L5925A55E        
        
 L5925D83D:
          mov    dx,[ecx+02h]
          cmp    dx,005Ch
          jnz    L59261AA0
 L5925D84B:
          add    ecx,00000004h
 L5925D84E:
          mov    ax,[ecx]
          cmp    ax,005Ch
          jz     L5925D869
          cmp    ax,si
          jz     L5925D869
          test    ax,ax
          jz     L59261ABB
          inc    ecx
          inc    ecx
          jmp    L5925D84E
 L5925D869:
          cmp    word ptr [ecx],0000h
          jz     L59261ABB
          inc    ecx
          inc    ecx
          xor &
nbsp;  eax,eax
          mov    ax,[ecx]
          cmp    ax,005Ch
          mov    [ebp+08h],ecx
          jz     L59261ABB
          cmp    ax,si
          jnz    L5925A547
          jmp    L59261ABB

 L59268AFF:
          cmp    dx,005Ch
          jnz    L59268B24
          test    ebx,ebx
          jnz    L59268B20
          lea    eax,[esi+04h]
          mov    ecx,esi
 L59268B0E:
          push    eax
          push    ecx
          call    [msvcrt.dll!wcscpy]
          pop    ecx
          pop    ecx
          mov    ecx,[ebp+08h]
          jmp    L5925A560
 L59268B20:
          mov    ecx,ebx
          jmp    L59268B0E
 L59268B24:
          test    dx,dx
          jnz    L5925A55E
          test    ebx,ebx
          jz     L59268B33
          mov    esi,ebx
 L59268B33:
          and    word ptr [esi],0000h
          jmp    L5925A5B4
        
 L59261ABB:
          xor    eax,eax
          jmp    L5925A5B7        

旧コード3

 SUB_L5925A51A:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,0000000Ch
          push    ebx
          push    esi
          mov    esi,eax
          push    edi
          push    esi
          call    [msvcrt.dll!wcslen]
          jmp    L59268A3C
 L59268A3C:
          pop    ecx
          push    0000002Fh
          pop    edx
          lea    eax,[esi+eax*2+02h]
          push    0000005Ch
          mov    [ebp-08h],eax
          mov    ax,[esi]
          xor    ebx,ebx
          pop    edi
          cmp    ax,di
          mov    [ebp-04h],ebx
          jz     L59268A5C
          cmp    ax,dx
          jnz    L59268AAD
 L59268A5C:
          mov    cx,[esi+02h]
          cmp    cx,di
          jz     L59268A6A
          cmp    cx,dx
          jnz    L59268AAD
 L59268A6A:
          add    esi,00000004h
          jmp    L59268A82
 L59268A6F:
          cmp    ax,dx
          jz     L59268A8A
          test    ax,ax
          jnz    L5925A561
          jmp    L5925A591
 L59268A82:
          mov    ax,[esi]
          cmp    ax,di
          jnz    L59268A6F
 L59268A8A:
          cmp    word ptr [esi],0000h
          jz     L5925A591
          inc    esi
          inc    esi
          xor    eax,eax
          mov    ax,[esi]
          cmp    ax,di
          jz     L5925A591
          cmp    ax,dx
          jz     L5925A591
 L59268AAD:
          mov    edi,esi
          jmp    L5925A58A
 L59268AB4:
          cmp    edi,esi
          jz     L5925A54F
          jmp    L5925A583
 L59268AC1:
          xor    ecx,ecx
          lea    eax,[edi+04h]
          mov    cx,[eax]
          cmp    cx,005Ch
          mov    [ebp-0Ch],ecx
          jz     L59268ADB
          test    cx,cx
          jnz   &nbs
p;L5925A583
 L59268ADB:
          test    ebx,ebx
          jz     L5925A591
          cmp    ebx,[ebp-08h]
          jnc    L5925A591
          push    eax
          mov    eax,[ebp-08h]
          sub    eax,ebx
          sar    eax,1
          push    eax
          push    ebx
          call    SUB_L592810BD
          cmp    word ptr [ebp-0Ch],0000h
          jz     L5925A595
          cmp    esi,ebx
          mov    [ebp-04h],ebx
          mov    edi,ebx
          jz     L5925A591
          lea    eax,[ebx-02h]
          jmp    L59268B1E
 L59268B18:
          cmp    eax,esi
          jz     L59268B24
          dec    eax
          dec    eax
 L59268B1E:
          cmp    word ptr [eax],005Ch
          jnz    L59268B18
 L59268B24:
          mov    bx,[eax]
          sub    bx,005Ch
          neg    bx
          sbb    ebx,ebx
          not    ebx
          and    ebx,eax
          jmp    L5925A583

 L5925A583:
          inc    edi
          inc    edi
          jmp    L59268B63
                
 L59268B63:
          mov    ax,[edi]
          jmp    L5925A58A

 L59268B39:
          lea    eax,[edi+04h]
          mov    ecx,edi
 L59268B3E:
          cmp    ecx,[ebp-08h]
          jnc    L5925A591
          push    eax
          mov    eax,[ebp-08h]
          sub    eax,ecx
          sar    eax,1
          push    eax
          push    ecx
          call    SUB_L592810BD
          jmp    L59268B63

 L5925A533:
          cmp    ax,005Ch
          jz     L59263911
          cmp    ax,002Eh
          jnz    L5925A583
          lea    eax,[edi-02h]
          cmp    [ebp-04h],eax
          jnz    L59268AB4
 L5925A54F:
          lea    eax,[edi+02h]
          mov    cx,[eax]
          cmp    cx,002Eh
          jz     L59268AC1
          jmp    L5925A578
 L5925A561:
          inc    esi
          inc    esi
          jmp    L59268A82
 L5925A568:
          mov    ecx,[ebp-04h]
          test    ecx,ecx
          jz     L59268B39
          jmp    L59268B3E
 L5925A578:
          cmp    cx,005Ch
          jz     L5925A568
          jmp    L59268B58

 L59268B58:
          test    cx,cx
          jnz    L5925A583
          jmp    L59268B6B

 L59268B6B:
          cmp    dword ptr [ebp-04h],00000000h
          jz     L59268B74
          mov    edi,[ebp-04h]
 L59268B74:
          and    word ptr [edi],0000h
          jmp    L5925A595

 L5925A58A:
          test    ax,ax
          jz     L5925A595
          jmp    L5925A533
 L5925A591:
          xor    eax,eax
          jmp    L5925A598
 L5925A595:
          xor    eax,eax
          inc    eax
 L5925A598:
          pop    edi
          pop    esi
          pop    ebx
          leave
          retn
        
     L59263911:
          mov    ebx,[ebp-04h]
          lea    eax,[e
di-02h]
          cmp    ebx,eax
          jz     L5925A591
          mov    [ebp-04h],edi
          jmp    L5925A583

修正版…ほとんど変更。

 L5926C86B:
          cmp    dword ptr [ebp+0Ch],000003F2h
          jz     L5926C8C5
          cmp    dword ptr [ebp+0Ch],00000065h
          mov    eax,[ebx]
          mov    [esi+10h],eax
          jc     L5926C8C5
          mov    eax,[ebx+08h]
          mov    [esi+14h],eax
          mov    eax,[ebx+0Ch]
          mov    [esi+18h],eax
          mov    eax,[ebx+10h]
          mov    [esi+1Ch],eax
          lea    eax,[esi+40h]
          push    eax
          call    jmp_msvcrt.dll!wcslen
        ;*
          mov    ecx,7FFFFFFFh
          sub    ecx,eax
          shl    ecx,1
          add    [edi+08h],ecx
          push    [ebx+14h]
          lea    eax,[esi+40h]
        ;********
          push    eax
          call    jmp_msvcrt.dll!wcscpy
          lea    eax,[esi+40h]
          push    eax
          call    jmp_msvcrt.dll!wcslen
          lea    eax,[eax+eax+02h]
          add    esp,00000010h
          add    [edi+08h],eax
        ;*******
 L5926C8C5:
          push    00000000h
          push    [ebp+0Ch]
          push    esi
          jmp    L59265E14
 
 SUB_L59265CF7:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    ebx
          push    esi
          push    000000A4h
          call    SUB_L59257A30
          mov    esi,eax
          xor    ebx,ebx
          cmp    esi,ebx
          jz     L5926C796
          push    edi
          mov    edi,[ebp+08h]
          mov    [esi+0Ch],ebx
          mov    [esi+08h],ebx
          mov    eax,[edi]
          mov    [esi+10h],eax
          push    [edi+04h]
          lea    eax,[esi+20h]
        ;***************
          push    eax
          call    jmp_msvcrt.dll!wcscpy
          cmp    dword ptr [ebp+0Ch],00000064h
          pop    ecx
          pop    ecx
          jz     L5926C79D
          mov    eax,[edi+08h]
          mov    [esi+14h],eax
          mov    eax,[edi+0Ch]
          mov    [esi+18h],eax
          mov    eax,[edi+10h]
          mov    [esi+1Ch],eax
          push    00000030h
          push    [edi+14h]
          lea    eax,[esi+40h]
        ;****************
          push    eax
          call    jmp_msvcrt.dll!wcsncpy
          push    [edi+14h]
          call    jmp_msvcrt.dll!wcslen
          add    esp,00000010h
          cmp    eax,00000030h
        ;*********
          jnc    L59265D82
          push    [edi+14h]
          call    jmp_msvcrt.dll!wcslen
          pop    ecx
          mov    [esi+eax*2+40h],bx
 L59265D79:
          mov    eax,esi
          pop    edi
 L59265D7C:
          pop    esi
          pop    ebx
          pop    ebp
          retn    0008h

        
 SUB_L5925A430:
          mov    edi,edi
          push 
   ebp
          mov    ebp,esp
          sub    esp,00000420h
          mov    eax,[L5929F18C]
          push    ebx
          mov    ebx,[ebp+0Ch]
          mov    [ebp-04h],eax
          mov    eax,[ebp+10h]
          push    esi
          mov    esi,[ebp+08h]
          push    edi
          mov    [ebp-0000041Ch],eax
          mov    eax,[ebp+18h]
          xor    edi,edi
          cmp    esi,edi
          mov    [ebp-00000420h],eax
          jnz    L59268B3C
 L5925A468:
          mov    [ebp-00000418h],di
 L5925A46F:
          mov    esi,[msvcrt.dll!wcslen]
          push    ebx
          call    esi
          add    edi,eax
          cmp    edi,eax
          pop    ecx
          jnc    L59268BB6
 L5925A483:
          push    0000007Bh
          pop    eax
          jmp    L5925A507
 L5925A488:
          lea    eax,[ebp-00000418h]
          push    ebx
          push    eax
          call    [msvcrt.dll!wcscat]
          cmp    word ptr [ebp-00000418h],0000h
          pop    ecx
          pop    ecx
          lea    eax,[ebp-00000418h]
          jz     L5925A4BA
 L5925A4A8:
          cmp    word ptr [eax],002Fh
          jz     L59268BC7
 L5925A4B2:
          inc    eax
          inc    eax
          cmp    word ptr [eax],0000h
          jnz    L5925A4A8
 L5925A4BA:
          lea    eax,[ebp-00000418h]
          call    SUB_L5925A22A
          test    eax,eax
          jnz    L5925A4D9
          lea    eax,[ebp-00000418h]
          push    eax
          call    SUB_L5925A51B
          test    eax,eax
          jz     L5925A483
 L5925A4D9:
          lea    eax,[ebp-00000418h]
          push    eax
          call    esi
          lea    eax,[eax+eax+02h]
          cmp    eax,[ebp+14h]
          pop    ecx
          ja     L59268BD1
          lea    eax,[ebp-00000418h]
          push    eax
          push    [ebp-0000041Ch]
          call    [msvcrt.dll!wcscpy]
          pop    ecx
          pop    ecx
          xor    eax,eax
 L5925A507:
          mov    ecx,[ebp-04h]
          pop    edi
          pop    esi
          pop    ebx
          call    SUB_L59253D80
          leave
          retn    0014h

旧コード4

 SUB_L59271832:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    [ebp+10h]
          push    00000002h
          push    [ebp+0Ch]
          push    [ebp+08h]
          call    jmp_NETRAP_dll_DelayImport_RapParmNumDescriptor
          test    eax,eax
          jz     L59271858
          cmp    byte ptr [eax],55h
          jnz    L59271858
          push    eax
          call    SUB_L592579E0
          xor    eax,eax
 L59271858:
          pop    ebp
          retn    000Ch
        
 SUB_L59297AB5:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    edi
    
     mov    edi,[ebp+0Ch]
          xor    eax,eax
          test    edi,edi
          jnz    L59297ACB
          mov    eax,80070057h
          jmp    L59297AFF
 L59297ACB:
          mov    edx,[ebp+08h]
          push    esi
          mov    esi,[ebp+10h]
 L59297AD2:
          cmp    dword ptr [ebp+14h],00000000h
          jz     L59297AEF
          mov    cx,[esi]
          test    cx,cx
          jz     L59297AEF
          mov    [edx],cx
          inc    edx
          inc    edx
          inc    esi
          inc    esi
          dec    edi
          dec    [ebp+14h]
          test    edi,edi
          jnz    L59297AD2
 L59297AEF:
          test    edi,edi
          pop    esi
          jnz    L59297AFB
          dec    edx
          dec    edx
          mov    eax,8007007Ah
 L59297AFB:
          and    word ptr [edx],0000h
 L59297AFF:
          pop    edi
          pop    ebp
          retn    0010h

 SUB_L592810BD:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          cmp    dword ptr [ebp+0Ch],7FFFFFFFh
          jbe    L592810D4
          mov    eax,80070057h
          pop    ebp
          retn    000Ch
 L592810D4:
          pop    ebp
          jmp    SUB_L59280FFE

 SUB_L59280FFE:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          xor    eax,eax
          cmp    [ebp+0Ch],eax
          jnz    L59281011
          mov    eax,80070057h
          jmp    L5928103E
 L59281011:
          mov    edx,[ebp+08h]
          push    esi
          mov    esi,[ebp+10h]
 L59281018:
          mov    cx,[esi]
          test    cx,cx
          jz     L5928102C
          mov    [edx],cx
          inc    edx
          inc    edx
          inc    esi
          inc    esi
          dec    [ebp+0Ch]
          jnz    L59281018
 L5928102C:
          cmp    dword ptr [ebp+0Ch],00000000h
          pop    esi
          jnz    L5928103A
          dec    edx
          dec    edx
          mov    eax,8007007Ah
 L5928103A:
          and    word ptr [edx],0000h
 L5928103E:
          pop    ebp
          retn    000Ch

 L5926C8E0:
          cmp    dword ptr [ebp+0Ch],000003F2h
          jz     L5926C93B
          cmp    dword ptr [ebp+0Ch],00000065h
          mov    eax,[ebx]
          mov    [esi+10h],eax
          jc     L5926C93B
          mov    eax,[ebx+08h]
          mov    [esi+14h],eax
          mov    eax,[ebx+0Ch]
          mov    [esi+18h],eax
          mov    eax,[ebx+10h]
          mov    [esi+1Ch],eax
          lea    eax,[esi+40h]
          push    eax
          call    jmp_msvcrt.dll!wcslen
          pop    ecx
          mov    ecx,7FFFFFFFh
          sub    ecx,eax
          shl    ecx,1
          add    [edi+08h],ecx
          push    [ebx+14h]
          lea    eax,[esi+40h]
         &nbs
p;push    00000031h
          push    eax
          call    SUB_L59280FFE
          lea    eax,[esi+40h]
          push    eax
          call    jmp_msvcrt.dll!wcslen
          lea    eax,[eax+eax+02h]
        ;***********
          add    [edi+08h],eax
          pop    ecx
 L5926C93B:
          push    00000000h
          push    [ebp+0Ch]
          push    esi
          jmp    L5925DC3D

 SUB_L5925D885:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          push    ebx
          push    esi
          push    000000A4h
          call    SUB_L59257A30
          mov    esi,eax
          xor    ebx,ebx
          cmp    esi,ebx
          jz     L5926C873
          push    edi
          mov    edi,[ebp+08h]
          mov    [esi+0Ch],ebx
          mov    [esi+08h],ebx
          mov    eax,[edi]
          mov    [esi+10h],eax
          push    [edi+04h]
          lea    eax,[esi+20h]
          push    00000010h
          push    eax
          call    SUB_L59280FFE
          cmp    dword ptr [ebp+0Ch],00000064h
;
;        
          jz L5926C893_    ;jnz    L5926C893
 L5926C893:         mov    eax,[edi+08h]
          mov    [esi+14h],eax
          mov    eax,[edi+0Ch]
          mov    [esi+18h],eax
          mov    eax,[edi+10h]
          push    00000030h
          mov    [esi+1Ch],eax
          push    [edi+14h]
          lea    eax,[esi+40h]
          push    00000031h
          push    eax
          call    SUB_L59297AB5
          push    [edi+14h]
          call    jmp_msvcrt.dll!wcslen
;
          cmp    eax,00000030h
          pop    ecx
          jnc    L5925D8C4
          push    [edi+14h]
          call    jmp_msvcrt.dll!wcslen
          pop    ecx
          mov    [esi+eax*2+40h],bx
 L5925D8E9:
          mov    eax,esi
          pop    edi
 L5925D8EC:
          pop    esi
          pop    ebx
          pop    ebp
          retn    0008h

                
        

 SUB_L5925A430:
          mov    edi,edi
          push    ebp
          mov    ebp,esp
          sub    esp,00000420h
          mov    eax,[L5929F18C]
          push    ebx
          mov    ebx,[ebp+0Ch]
          mov    [ebp-04h],eax
          mov    eax,[ebp+10h]
          push    esi
          mov    esi,[ebp+08h]
          push    edi
          mov    [ebp-0000041Ch],eax
          mov    eax,[ebp+18h]
          xor    edi,edi
          cmp    esi,edi
          mov    [ebp-00000420h],eax
          jnz    L59268B7D
 L5925A468:
          mov    [ebp-00000418h],di
 L5925A46F:
          mov    esi,[msvcrt.dll!wcslen]
          push    ebx
          call    esi
          add    edi,eax
          cmp    edi,eax
          pop    ecx
          jnc    L59268BF7
 L5925A483:
          push    0000007Bh
          pop    eax
          jmp    L5925A506
 L5925A488:
   &n
bsp;      lea    eax,[ebp-00000418h]
          push    ebx
          push    eax
          call    [msvcrt.dll!wcscat]
          cmp    word ptr [ebp-00000418h],0000h
          pop    ecx
          pop    ecx
          lea    eax,[ebp-00000418h]
          jz     L5925A4BA
 L5925A4A8:
          cmp    word ptr [eax],002Fh
          jz     L59268C08
 L5925A4B2:
          inc    eax
          inc    eax
          cmp    word ptr [eax],0000h
          jnz    L5925A4A8
 L5925A4BA:
          lea    eax,[ebp-00000418h]
          call    SUB_L5925A22A
          test    eax,eax
          jnz    L5925A4D8
          lea    eax,[ebp-00000418h]
        ;******************
          call    SUB_L5925A51A
          test    eax,eax
          jz     L5925A483
 L5925A4D8:
          lea    eax,[ebp-00000418h]
          push    eax
          call    esi
          lea    eax,[eax+eax+02h]
          cmp    eax,[ebp+14h]
          pop    ecx
          ja     L59268C12
          lea    eax,[ebp-00000418h]
          push    eax
          push    [ebp-0000041Ch]
          call    [msvcrt.dll!wcscpy]
          pop    ecx
          pop    ecx
          xor    eax,eax
 L5925A506:
          mov    ecx,[ebp-04h]
          pop    edi
          pop    esi
          pop    ebx
          call    SUB_L59253D80
          leave
          retn    0014h

修正版と追加のバッファーチェックコード

結構な分量がありますね…パッチはしばしお待ちを

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です