1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326
| .text:73B721AE .text:73B721AE ; =============== S U B R O U T I N E ======================================= .text:73B721AE .text:73B721AE ; Attributes: bp-based frame .text:73B721AE .text:73B721AE ; int __stdcall CVDecompress(ULONG, _BYTE *, unsigned int, int, int, int, int) .text:73B721AE _CVDecompress@28 proc near ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+27↓p .text:73B721AE ; Decompress(x,x,x,x,x,x,x,x,x,x,x,x,x,x)+118↓p .text:73B721AE ; Decompress(x,x,x,x,x,x,x,x,x,x,x,x,x,x)+140↓p .text:73B721AE .text:73B721AE var_20= dword ptr -20h .text:73B721AE var_1C= dword ptr -1Ch .text:73B721AE var_18= dword ptr -18h .text:73B721AE var_14= dword ptr -14h .text:73B721AE pulResult= dword ptr -10h .text:73B721AE var_C= dword ptr -0Ch .text:73B721AE ulMinuend= dword ptr -8 .text:73B721AE var_4= dword ptr -4 .text:73B721AE arg_0= dword ptr 8 .text:73B721AE arg_4= dword ptr 0Ch .text:73B721AE arg_8= dword ptr 10h .text:73B721AE arg_C= dword ptr 14h .text:73B721AE arg_10= dword ptr 18h .text:73B721AE arg_14= dword ptr 1Ch .text:73B721AE arg_18= dword ptr 20h .text:73B721AE .text:73B721AE 8B FF mov edi, edi .text:73B721B0 55 push ebp .text:73B721B1 8B EC mov ebp, esp .text:73B721B3 83 EC 20 sub esp, 20h .text:73B721B6 53 push ebx .text:73B721B7 8B 5D 08 mov ebx, [ebp+arg_0] .text:73B721BA 56 push esi .text:73B721BB 8B 73 24 mov esi, [ebx+24h] .text:73B721BE 57 push edi .text:73B721BF 33 FF xor edi, edi .text:73B721C1 3B F7 cmp esi, edi .text:73B721C3 74 1C jz short loc_73B721E1 .text:73B721C3 .text:73B721C5 FF 75 20 push [ebp+arg_18] ; int .text:73B721C8 89 7B 24 mov [ebx+24h], edi .text:73B721CB 57 push edi ; int .text:73B721CC 57 push edi ; int .text:73B721CD 57 push edi ; int .text:73B721CE 68 46 24 00 00 push 2446h ; int .text:73B721D3 56 push esi ; int .text:73B721D4 53 push ebx ; ULONG .text:73B721D5 E8 D4 FF FF FF call _CVDecompress@28 ; CVDecompress(x,x,x,x,x,x,x) .text:73B721D5 .text:73B721DA 56 push esi ; hMem .text:73B721DB FF 15 40 10 B7 73 call ds:__imp__LocalFree@4 ; LocalFree(x) .text:73B721DB .text:73B721E1 .text:73B721E1 loc_73B721E1: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+15↑j .text:73B721E1 33 C0 xor eax, eax .text:73B721E3 83 7D 10 20 cmp [ebp+arg_8], 20h ; ' ' .text:73B721E7 0F 82 00 02 00 00 jb loc_73B723ED .text:73B721E7 .text:73B721ED 8B 75 0C mov esi, [ebp+arg_4] .text:73B721F0 8A 66 01 mov ah, [esi+1] .text:73B721F3 0F B6 4E 03 movzx ecx, byte ptr [esi+3] .text:73B721F7 8A 46 02 mov al, [esi+2] .text:73B721FA C1 E0 08 shl eax, 8 .text:73B721FD 0B C1 or eax, ecx .text:73B721FF 39 45 10 cmp [ebp+arg_8], eax .text:73B72202 0F 8C EC 01 00 00 jl loc_73B723F4 .text:73B72202 .text:73B72208 8A 0E mov cl, [esi] .text:73B7220A 88 4D 13 mov byte ptr [ebp+arg_8+3], cl .text:73B7220D 8D 4D F0 lea ecx, [ebp+pulResult] .text:73B72210 51 push ecx ; pulResult .text:73B72211 6A 0A push 0Ah ; ulSubtrahend .text:73B72213 50 push eax ; ulMinuend .text:73B72214 E8 6D FF FF FF call _ULongSub@12 ; ULongSub(x,x,x) .text:73B72214 .text:73B72219 85 C0 test eax, eax .text:73B7221B 0F 8C D3 01 00 00 jl loc_73B723F4 .text:73B7221B .text:73B72221 33 C0 xor eax, eax .text:73B72223 8A 66 08 mov ah, [esi+8] .text:73B72226 83 C6 0A add esi, 0Ah .text:73B72229 89 7D EC mov [ebp+var_14], edi .text:73B7222C 89 75 E8 mov [ebp+var_18], esi .text:73B7222F 89 75 F4 mov [ebp+var_C], esi .text:73B72232 8A 46 FF mov al, [esi-1] .text:73B72235 3B C7 cmp eax, edi .text:73B72237 89 45 E4 mov [ebp+var_1C], eax .text:73B7223A 0F 8E AA 01 00 00 jle loc_73B723EA .text:73B7223A .text:73B72240 89 7D FC mov [ebp+var_4], edi .text:73B72240 .text:73B72243 .text:73B72243 loc_73B72243: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+236↓j .text:73B72243 8B 45 F0 mov eax, [ebp+pulResult] .text:73B72246 83 F8 16 cmp eax, 16h .text:73B72249 0F 82 9B 01 00 00 jb loc_73B723EA .text:73B72249 .text:73B7224F 0F B6 56 03 movzx edx, byte ptr [esi+3] .text:73B72253 33 C9 xor ecx, ecx .text:73B72255 8A 6E 01 mov ch, [esi+1] .text:73B72258 8A 4E 02 mov cl, [esi+2] .text:73B7225B C1 E1 08 shl ecx, 8 .text:73B7225E 0B CA or ecx, edx .text:73B72260 3B C1 cmp eax, ecx .text:73B72262 89 4D F8 mov [ebp+ulMinuend], ecx .text:73B72265 0F 82 7F 01 00 00 jb loc_73B723EA .text:73B72265 .text:73B7226B 8A 06 mov al, [esi] .text:73B7226D 3C 10 cmp al, 10h .text:73B7226F 74 08 jz short loc_73B72279 .text:73B7226F .text:73B72271 3C 11 cmp al, 11h .text:73B72273 0F 85 57 01 00 00 jnz loc_73B723D0 .text:73B72273 .text:73B72279 .text:73B72279 loc_73B72279: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+C1↑j .text:73B72279 8D 45 08 lea eax, [ebp+arg_0] .text:73B7227C 50 push eax ; pulResult .text:73B7227D 6A 0C push 0Ch ; ulSubtrahend .text:73B7227F FF 75 F8 push [ebp+ulMinuend] ; ulMinuend .text:73B72282 E8 FF FE FF FF call _ULongSub@12 ; ULongSub(x,x,x) .text:73B72282 .text:73B72287 85 C0 test eax, eax .text:73B72289 0F 8C 65 01 00 00 jl loc_73B723F4 .text:73B72289 .text:73B7228F 33 C0 xor eax, eax .text:73B72291 8A 66 08 mov ah, [esi+8] .text:73B72294 33 C9 xor ecx, ecx .text:73B72296 8A 6E 04 mov ch, [esi+4] .text:73B72299 8A 46 09 mov al, [esi+9] .text:73B7229C 8A 4E 05 mov cl, [esi+5] .text:73B7229F 2B C1 sub eax, ecx .text:73B722A1 66 0F AF 43 2E imul ax, [ebx+2Eh] .text:73B722A6 89 45 0C mov [ebp+arg_4], eax .text:73B722A9 8B 45 FC mov eax, [ebp+var_4] .text:73B722AC 3B C7 cmp eax, edi .text:73B722AE 74 21 jz short loc_73B722D1 .text:73B722AE .text:73B722B0 80 7D 13 00 cmp byte ptr [ebp+arg_8+3], 0 .text:73B722B4 75 1B jnz short loc_73B722D1 .text:73B722B4 .text:73B722B6 80 3E 11 cmp byte ptr [esi], 11h .text:73B722B9 75 16 jnz short loc_73B722D1 .text:73B722B9 .text:73B722BB 8B 4B 1C mov ecx, [ebx+1Ch] .text:73B722BE 8D 3C 01 lea edi, [ecx+eax] .text:73B722C1 B9 00 08 00 00 mov ecx, 800h .text:73B722C6 8D B7 00 E0 FF FF lea esi, [edi-2000h] .text:73B722CC F3 A5 rep movsd .text:73B722CE 8B 75 E8 mov esi, [ebp+var_18] .text:73B722CE .text:73B722D1 .text:73B722D1 loc_73B722D1: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+100↑j .text:73B722D1 ; CVDecompress(x,x,x,x,x,x,x)+106↑j .text:73B722D1 ; CVDecompress(x,x,x,x,x,x,x)+10B↑j .text:73B722D1 8B 7D F4 mov edi, [ebp+var_C] .text:73B722D4 8B 43 20 mov eax, [ebx+20h] .text:73B722D7 83 C7 0C add edi, 0Ch .text:73B722DA 03 45 FC add eax, [ebp+var_4] .text:73B722DD 8D 4E 0C lea ecx, [esi+0Ch] .text:73B722E0 89 43 38 mov [ebx+38h], eax .text:73B722E3 8B 45 20 mov eax, [ebp+arg_18] .text:73B722E6 89 4D E8 mov [ebp+var_18], ecx .text:73B722E9 89 43 3C mov [ebx+3Ch], eax .text:73B722EC E9 BE 00 00 00 jmp loc_73B723AF .text:73B722EC .text:73B722F1 ; --------------------------------------------------------------------------- .text:73B722F1 .text:73B722F1 loc_73B722F1: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+205↓j .text:73B722F1 0F B6 41 03 movzx eax, byte ptr [ecx+3] .text:73B722F5 33 D2 xor edx, edx .text:73B722F7 8A 71 01 mov dh, [ecx+1] .text:73B722FA 8A 51 02 mov dl, [ecx+2] .text:73B722FD C1 E2 08 shl edx, 8 .text:73B72300 0B D0 or edx, eax .text:73B72302 39 55 08 cmp [ebp+arg_0], edx .text:73B72305 89 55 E0 mov [ebp+var_20], edx .text:73B72308 0F 82 AB 00 00 00 jb loc_73B723B9 .text:73B72308 .text:73B7230E 0F B6 01 movzx eax, byte ptr [ecx] .text:73B72311 83 C0 E0 add eax, 0FFFFFFE0h ; switch 19 cases .text:73B72314 83 F8 12 cmp eax, 12h .text:73B72317 77 7D ja short def_73B72320 ; jumptable 73B72320 default case, cases 40-47 .text:73B72317 .text:73B72319 0F B6 80 10 24 B7 73 movzx eax, ds:byte_73B72410[eax] .text:73B72320 FF 24 85 F8 23 B7 73 jmp ds:jpt_73B72320[eax*4] ; switch jump .text:73B72320 .text:73B72327 ; --------------------------------------------------------------------------- .text:73B72327 .text:73B72327 loc_73B72327: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+172↑j .text:73B72327 ; DATA XREF: .text:jpt_73B72320↓o .text:73B72327 FF 73 30 push dword ptr [ebx+30h] ; jumptable 73B72320 cases 32,33,36,37 .text:73B7232A FF 73 34 push dword ptr [ebx+34h] .text:73B7232D FF 73 38 push dword ptr [ebx+38h] .text:73B72330 57 push edi .text:73B72331 FF 13 call dword ptr [ebx] .text:73B72331 .text:73B72333 EB 61 jmp short def_73B72320 ; jumptable 73B72320 default case, cases 40-47 .text:73B72333 .text:73B72335 ; --------------------------------------------------------------------------- .text:73B72335 .text:73B72335 loc_73B72335: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+172↑j .text:73B72335 ; DATA XREF: .text:jpt_73B72320↓o .text:73B72335 FF 73 30 push dword ptr [ebx+30h] ; jumptable 73B72320 cases 34,35,38,39 .text:73B72338 8B 43 38 mov eax, [ebx+38h] .text:73B7233B FF 73 34 push dword ptr [ebx+34h] .text:73B7233E 05 00 10 00 00 add eax, 1000h .text:73B72343 50 push eax .text:73B72344 57 push edi .text:73B72345 FF 53 04 call dword ptr [ebx+4] .text:73B72345 .text:73B72348 EB 4C jmp short def_73B72320 ; jumptable 73B72320 default case, cases 40-47 .text:73B72348 .text:73B7234A ; --------------------------------------------------------------------------- .text:73B7234A .text:73B7234A loc_73B7234A: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+172↑j .text:73B7234A ; DATA XREF: .text:jpt_73B72320↓o .text:73B7234A FF 75 0C push [ebp+arg_4] ; jumptable 73B72320 case 48 .text:73B7234D 83 C2 FC add edx, 0FFFFFFFCh .text:73B72350 FF 75 1C push [ebp+arg_14] .text:73B72353 8D 47 04 lea eax, [edi+4] .text:73B72356 FF 75 18 push [ebp+arg_10] .text:73B72359 FF 75 14 push [ebp+arg_C] .text:73B7235C 52 push edx .text:73B7235D 50 push eax .text:73B7235E 53 push ebx .text:73B7235F FF 53 08 call dword ptr [ebx+8] .text:73B7235F .text:73B72362 EB 32 jmp short def_73B72320 ; jumptable 73B72320 default case, cases 40-47 .text:73B72362 .text:73B72364 ; --------------------------------------------------------------------------- .text:73B72364 .text:73B72364 loc_73B72364: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+172↑j .text:73B72364 ; DATA XREF: .text:jpt_73B72320↓o .text:73B72364 FF 75 0C push [ebp+arg_4] ; jumptable 73B72320 case 49 .text:73B72367 83 C2 FC add edx, 0FFFFFFFCh .text:73B7236A FF 75 1C push [ebp+arg_14] .text:73B7236D 8D 47 04 lea eax, [edi+4] .text:73B72370 FF 75 18 push [ebp+arg_10] .text:73B72373 FF 75 14 push [ebp+arg_C] .text:73B72376 52 push edx .text:73B72377 50 push eax .text:73B72378 53 push ebx .text:73B72379 FF 53 10 call dword ptr [ebx+10h] .text:73B72379 .text:73B7237C EB 18 jmp short def_73B72320 ; jumptable 73B72320 default case, cases 40-47 .text:73B7237C .text:73B7237E ; --------------------------------------------------------------------------- .text:73B7237E .text:73B7237E loc_73B7237E: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+172↑j .text:73B7237E ; DATA XREF: .text:jpt_73B72320↓o .text:73B7237E FF 75 0C push [ebp+arg_4] ; jumptable 73B72320 case 50 .text:73B72381 83 C2 FC add edx, 0FFFFFFFCh .text:73B72384 FF 75 1C push [ebp+arg_14] .text:73B72387 8D 47 04 lea eax, [edi+4] .text:73B7238A FF 75 18 push [ebp+arg_10] .text:73B7238D FF 75 14 push [ebp+arg_C] .text:73B72390 52 push edx .text:73B72391 50 push eax .text:73B72392 53 push ebx .text:73B72393 FF 53 0C call dword ptr [ebx+0Ch] .text:73B72393 .text:73B72396 .text:73B72396 def_73B72320: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+169↑j .text:73B72396 ; CVDecompress(x,x,x,x,x,x,x)+172↑j .text:73B72396 ; CVDecompress(x,x,x,x,x,x,x)+185↑j .text:73B72396 ; CVDecompress(x,x,x,x,x,x,x)+19A↑j .text:73B72396 ; CVDecompress(x,x,x,x,x,x,x)+1B4↑j .text:73B72396 ; CVDecompress(x,x,x,x,x,x,x)+1CE↑j .text:73B72396 ; DATA XREF: .text:jpt_73B72320↓o .text:73B72396 8B 55 E0 mov edx, [ebp+var_20] ; jumptable 73B72320 default case, cases 40-47 .text:73B72399 8B 4D E8 mov ecx, [ebp+var_18] .text:73B7239C 33 C0 xor eax, eax .text:73B7239E 03 CA add ecx, edx .text:73B723A0 40 inc eax .text:73B723A1 03 FA add edi, edx .text:73B723A3 3B D0 cmp edx, eax .text:73B723A5 89 4D E8 mov [ebp+var_18], ecx .text:73B723A8 76 02 jbe short loc_73B723AC .text:73B723A8 .text:73B723AA 8B C2 mov eax, edx .text:73B723AA .text:73B723AC .text:73B723AC loc_73B723AC: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+1FA↑j .text:73B723AC 29 45 08 sub [ebp+arg_0], eax .text:73B723AC .text:73B723AF .text:73B723AF loc_73B723AF: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+13E↑j .text:73B723AF 83 7D 08 04 cmp [ebp+arg_0], 4 .text:73B723B3 0F 83 38 FF FF FF jnb loc_73B722F1 .text:73B723B3 .text:73B723B9 .text:73B723B9 loc_73B723B9: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+15A↑j .text:73B723B9 0F BF 45 0C movsx eax, word ptr [ebp+arg_4] .text:73B723BD 0F AF 45 20 imul eax, [ebp+arg_18] .text:73B723C1 01 45 1C add [ebp+arg_14], eax .text:73B723C4 FF 45 EC inc [ebp+var_14] .text:73B723C7 81 45 FC 00 20 00 00 add [ebp+var_4], 2000h .text:73B723CE 33 FF xor edi, edi .text:73B723CE .text:73B723D0 .text:73B723D0 loc_73B723D0: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+C5↑j .text:73B723D0 8B 45 F8 mov eax, [ebp+ulMinuend] .text:73B723D3 01 45 F4 add [ebp+var_C], eax .text:73B723D6 29 45 F0 sub [ebp+pulResult], eax .text:73B723D9 03 F0 add esi, eax .text:73B723DB 8B 45 E4 mov eax, [ebp+var_1C] .text:73B723DE 39 45 EC cmp [ebp+var_14], eax .text:73B723E1 89 75 E8 mov [ebp+var_18], esi .text:73B723E4 0F 8C 59 FE FF FF jl loc_73B72243 .text:73B723E4 .text:73B723EA .text:73B723EA loc_73B723EA: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+8C↑j .text:73B723EA ; CVDecompress(x,x,x,x,x,x,x)+9B↑j .text:73B723EA ; CVDecompress(x,x,x,x,x,x,x)+B7↑j .text:73B723EA 33 C0 xor eax, eax .text:73B723EC 40 inc eax .text:73B723EC .text:73B723ED .text:73B723ED loc_73B723ED: ; CODE XREF: CVDecompress(x,x,x,x,x,x,x)+39↑j .text:73B723ED ; CVDecompress(x,x,x,x,x,x,x)+248↓j .text:73B723ED 5F pop edi .text:73B723EE 5E pop esi .text:73B723EF 5B pop ebx .text:73B723F0 C9 leave .text:73B723F1 C2 1C 00 retn 1Ch
|