1 default rel 2 %define XMMWORD 3 %define YMMWORD 4 %define ZMMWORD 5 section .text code align=64 6 7 ALIGN 16 8 9 global rc4_md5_enc 10 11 rc4_md5_enc: 12 mov QWORD[8+rsp],rdi ;WIN64 prologue 13 mov QWORD[16+rsp],rsi 14 mov rax,rsp 15 $L$SEH_begin_rc4_md5_enc: 16 mov rdi,rcx 17 mov rsi,rdx 18 mov rdx,r8 19 mov rcx,r9 20 mov r8,QWORD[40+rsp] 21 mov r9,QWORD[48+rsp] 22 23 24 cmp r9,0 25 je NEAR $L$abort 26 push rbx 27 push rbp 28 push r12 29 push r13 30 push r14 31 push r15 32 sub rsp,40 33 $L$body: 34 mov r11,rcx 35 mov r12,r9 36 mov r13,rsi 37 mov r14,rdx 38 mov r15,r8 39 xor rbp,rbp 40 xor rcx,rcx 41 42 lea rdi,[8+rdi] 43 mov bpl,BYTE[((-8))+rdi] 44 mov cl,BYTE[((-4))+rdi] 45 46 inc bpl 47 sub r14,r13 48 mov eax,DWORD[rbp*4+rdi] 49 add cl,al 50 lea rsi,[rbp*4+rdi] 51 shl r12,6 52 add r12,r15 53 mov QWORD[16+rsp],r12 54 55 mov QWORD[24+rsp],r11 56 mov r8d,DWORD[r11] 57 mov r9d,DWORD[4+r11] 58 mov r10d,DWORD[8+r11] 59 mov r11d,DWORD[12+r11] 60 jmp NEAR $L$oop 61 62 ALIGN 16 63 $L$oop: 64 mov DWORD[rsp],r8d 65 mov DWORD[4+rsp],r9d 66 mov DWORD[8+rsp],r10d 67 mov r12d,r11d 68 mov DWORD[12+rsp],r11d 69 pxor xmm0,xmm0 70 mov edx,DWORD[rcx*4+rdi] 71 xor r12d,r10d 72 mov DWORD[rcx*4+rdi],eax 73 and r12d,r9d 74 add r8d,DWORD[r15] 75 add al,dl 76 mov ebx,DWORD[4+rsi] 77 add r8d,3614090360 78 xor r12d,r11d 79 movzx eax,al 80 mov DWORD[rsi],edx 81 add r8d,r12d 82 add cl,bl 83 rol r8d,7 84 mov r12d,r10d 85 movd xmm0,DWORD[rax*4+rdi] 86 87 add r8d,r9d 88 pxor xmm1,xmm1 89 mov edx,DWORD[rcx*4+rdi] 90 xor r12d,r9d 91 mov DWORD[rcx*4+rdi],ebx 92 and r12d,r8d 93 add r11d,DWORD[4+r15] 94 add bl,dl 95 mov eax,DWORD[8+rsi] 96 add r11d,3905402710 97 xor r12d,r10d 98 movzx ebx,bl 99 mov DWORD[4+rsi],edx 100 add r11d,r12d 101 add cl,al 102 rol r11d,12 103 mov r12d,r9d 104 movd xmm1,DWORD[rbx*4+rdi] 105 106 add r11d,r8d 107 mov edx,DWORD[rcx*4+rdi] 108 xor r12d,r8d 109 mov DWORD[rcx*4+rdi],eax 110 and r12d,r11d 111 add r10d,DWORD[8+r15] 112 add al,dl 113 mov ebx,DWORD[12+rsi] 114 add r10d,606105819 115 xor r12d,r9d 116 movzx eax,al 117 mov DWORD[8+rsi],edx 118 add r10d,r12d 119 add cl,bl 120 rol r10d,17 121 mov r12d,r8d 122 pinsrw xmm0,WORD[rax*4+rdi],1 123 124 add r10d,r11d 125 mov edx,DWORD[rcx*4+rdi] 126 xor r12d,r11d 127 mov DWORD[rcx*4+rdi],ebx 128 and r12d,r10d 129 add r9d,DWORD[12+r15] 130 add bl,dl 131 mov eax,DWORD[16+rsi] 132 add r9d,3250441966 133 xor r12d,r8d 134 movzx ebx,bl 135 mov DWORD[12+rsi],edx 136 add r9d,r12d 137 add cl,al 138 rol r9d,22 139 mov r12d,r11d 140 pinsrw xmm1,WORD[rbx*4+rdi],1 141 142 add r9d,r10d 143 mov edx,DWORD[rcx*4+rdi] 144 xor r12d,r10d 145 mov DWORD[rcx*4+rdi],eax 146 and r12d,r9d 147 add r8d,DWORD[16+r15] 148 add al,dl 149 mov ebx,DWORD[20+rsi] 150 add r8d,4118548399 151 xor r12d,r11d 152 movzx eax,al 153 mov DWORD[16+rsi],edx 154 add r8d,r12d 155 add cl,bl 156 rol r8d,7 157 mov r12d,r10d 158 pinsrw xmm0,WORD[rax*4+rdi],2 159 160 add r8d,r9d 161 mov edx,DWORD[rcx*4+rdi] 162 xor r12d,r9d 163 mov DWORD[rcx*4+rdi],ebx 164 and r12d,r8d 165 add r11d,DWORD[20+r15] 166 add bl,dl 167 mov eax,DWORD[24+rsi] 168 add r11d,1200080426 169 xor r12d,r10d 170 movzx ebx,bl 171 mov DWORD[20+rsi],edx 172 add r11d,r12d 173 add cl,al 174 rol r11d,12 175 mov r12d,r9d 176 pinsrw xmm1,WORD[rbx*4+rdi],2 177 178 add r11d,r8d 179 mov edx,DWORD[rcx*4+rdi] 180 xor r12d,r8d 181 mov DWORD[rcx*4+rdi],eax 182 and r12d,r11d 183 add r10d,DWORD[24+r15] 184 add al,dl 185 mov ebx,DWORD[28+rsi] 186 add r10d,2821735955 187 xor r12d,r9d 188 movzx eax,al 189 mov DWORD[24+rsi],edx 190 add r10d,r12d 191 add cl,bl 192 rol r10d,17 193 mov r12d,r8d 194 pinsrw xmm0,WORD[rax*4+rdi],3 195 196 add r10d,r11d 197 mov edx,DWORD[rcx*4+rdi] 198 xor r12d,r11d 199 mov DWORD[rcx*4+rdi],ebx 200 and r12d,r10d 201 add r9d,DWORD[28+r15] 202 add bl,dl 203 mov eax,DWORD[32+rsi] 204 add r9d,4249261313 205 xor r12d,r8d 206 movzx ebx,bl 207 mov DWORD[28+rsi],edx 208 add r9d,r12d 209 add cl,al 210 rol r9d,22 211 mov r12d,r11d 212 pinsrw xmm1,WORD[rbx*4+rdi],3 213 214 add r9d,r10d 215 mov edx,DWORD[rcx*4+rdi] 216 xor r12d,r10d 217 mov DWORD[rcx*4+rdi],eax 218 and r12d,r9d 219 add r8d,DWORD[32+r15] 220 add al,dl 221 mov ebx,DWORD[36+rsi] 222 add r8d,1770035416 223 xor r12d,r11d 224 movzx eax,al 225 mov DWORD[32+rsi],edx 226 add r8d,r12d 227 add cl,bl 228 rol r8d,7 229 mov r12d,r10d 230 pinsrw xmm0,WORD[rax*4+rdi],4 231 232 add r8d,r9d 233 mov edx,DWORD[rcx*4+rdi] 234 xor r12d,r9d 235 mov DWORD[rcx*4+rdi],ebx 236 and r12d,r8d 237 add r11d,DWORD[36+r15] 238 add bl,dl 239 mov eax,DWORD[40+rsi] 240 add r11d,2336552879 241 xor r12d,r10d 242 movzx ebx,bl 243 mov DWORD[36+rsi],edx 244 add r11d,r12d 245 add cl,al 246 rol r11d,12 247 mov r12d,r9d 248 pinsrw xmm1,WORD[rbx*4+rdi],4 249 250 add r11d,r8d 251 mov edx,DWORD[rcx*4+rdi] 252 xor r12d,r8d 253 mov DWORD[rcx*4+rdi],eax 254 and r12d,r11d 255 add r10d,DWORD[40+r15] 256 add al,dl 257 mov ebx,DWORD[44+rsi] 258 add r10d,4294925233 259 xor r12d,r9d 260 movzx eax,al 261 mov DWORD[40+rsi],edx 262 add r10d,r12d 263 add cl,bl 264 rol r10d,17 265 mov r12d,r8d 266 pinsrw xmm0,WORD[rax*4+rdi],5 267 268 add r10d,r11d 269 mov edx,DWORD[rcx*4+rdi] 270 xor r12d,r11d 271 mov DWORD[rcx*4+rdi],ebx 272 and r12d,r10d 273 add r9d,DWORD[44+r15] 274 add bl,dl 275 mov eax,DWORD[48+rsi] 276 add r9d,2304563134 277 xor r12d,r8d 278 movzx ebx,bl 279 mov DWORD[44+rsi],edx 280 add r9d,r12d 281 add cl,al 282 rol r9d,22 283 mov r12d,r11d 284 pinsrw xmm1,WORD[rbx*4+rdi],5 285 286 add r9d,r10d 287 mov edx,DWORD[rcx*4+rdi] 288 xor r12d,r10d 289 mov DWORD[rcx*4+rdi],eax 290 and r12d,r9d 291 add r8d,DWORD[48+r15] 292 add al,dl 293 mov ebx,DWORD[52+rsi] 294 add r8d,1804603682 295 xor r12d,r11d 296 movzx eax,al 297 mov DWORD[48+rsi],edx 298 add r8d,r12d 299 add cl,bl 300 rol r8d,7 301 mov r12d,r10d 302 pinsrw xmm0,WORD[rax*4+rdi],6 303 304 add r8d,r9d 305 mov edx,DWORD[rcx*4+rdi] 306 xor r12d,r9d 307 mov DWORD[rcx*4+rdi],ebx 308 and r12d,r8d 309 add r11d,DWORD[52+r15] 310 add bl,dl 311 mov eax,DWORD[56+rsi] 312 add r11d,4254626195 313 xor r12d,r10d 314 movzx ebx,bl 315 mov DWORD[52+rsi],edx 316 add r11d,r12d 317 add cl,al 318 rol r11d,12 319 mov r12d,r9d 320 pinsrw xmm1,WORD[rbx*4+rdi],6 321 322 add r11d,r8d 323 mov edx,DWORD[rcx*4+rdi] 324 xor r12d,r8d 325 mov DWORD[rcx*4+rdi],eax 326 and r12d,r11d 327 add r10d,DWORD[56+r15] 328 add al,dl 329 mov ebx,DWORD[60+rsi] 330 add r10d,2792965006 331 xor r12d,r9d 332 movzx eax,al 333 mov DWORD[56+rsi],edx 334 add r10d,r12d 335 add cl,bl 336 rol r10d,17 337 mov r12d,r8d 338 pinsrw xmm0,WORD[rax*4+rdi],7 339 340 add r10d,r11d 341 movdqu xmm2,XMMWORD[r13] 342 mov edx,DWORD[rcx*4+rdi] 343 xor r12d,r11d 344 mov DWORD[rcx*4+rdi],ebx 345 and r12d,r10d 346 add r9d,DWORD[60+r15] 347 add bl,dl 348 mov eax,DWORD[64+rsi] 349 add r9d,1236535329 350 xor r12d,r8d 351 movzx ebx,bl 352 mov DWORD[60+rsi],edx 353 add r9d,r12d 354 add cl,al 355 rol r9d,22 356 mov r12d,r10d 357 pinsrw xmm1,WORD[rbx*4+rdi],7 358 359 add r9d,r10d 360 psllq xmm1,8 361 pxor xmm2,xmm0 362 pxor xmm2,xmm1 363 pxor xmm0,xmm0 364 mov edx,DWORD[rcx*4+rdi] 365 xor r12d,r9d 366 mov DWORD[rcx*4+rdi],eax 367 and r12d,r11d 368 add r8d,DWORD[4+r15] 369 add al,dl 370 mov ebx,DWORD[68+rsi] 371 add r8d,4129170786 372 xor r12d,r10d 373 movzx eax,al 374 mov DWORD[64+rsi],edx 375 add r8d,r12d 376 add cl,bl 377 rol r8d,5 378 mov r12d,r9d 379 movd xmm0,DWORD[rax*4+rdi] 380 381 add r8d,r9d 382 pxor xmm1,xmm1 383 mov edx,DWORD[rcx*4+rdi] 384 xor r12d,r8d 385 mov DWORD[rcx*4+rdi],ebx 386 and r12d,r10d 387 add r11d,DWORD[24+r15] 388 add bl,dl 389 mov eax,DWORD[72+rsi] 390 add r11d,3225465664 391 xor r12d,r9d 392 movzx ebx,bl 393 mov DWORD[68+rsi],edx 394 add r11d,r12d 395 add cl,al 396 rol r11d,9 397 mov r12d,r8d 398 movd xmm1,DWORD[rbx*4+rdi] 399 400 add r11d,r8d 401 mov edx,DWORD[rcx*4+rdi] 402 xor r12d,r11d 403 mov DWORD[rcx*4+rdi],eax 404 and r12d,r9d 405 add r10d,DWORD[44+r15] 406 add al,dl 407 mov ebx,DWORD[76+rsi] 408 add r10d,643717713 409 xor r12d,r8d 410 movzx eax,al 411 mov DWORD[72+rsi],edx 412 add r10d,r12d 413 add cl,bl 414 rol r10d,14 415 mov r12d,r11d 416 pinsrw xmm0,WORD[rax*4+rdi],1 417 418 add r10d,r11d 419 mov edx,DWORD[rcx*4+rdi] 420 xor r12d,r10d 421 mov DWORD[rcx*4+rdi],ebx 422 and r12d,r8d 423 add r9d,DWORD[r15] 424 add bl,dl 425 mov eax,DWORD[80+rsi] 426 add r9d,3921069994 427 xor r12d,r11d 428 movzx ebx,bl 429 mov DWORD[76+rsi],edx 430 add r9d,r12d 431 add cl,al 432 rol r9d,20 433 mov r12d,r10d 434 pinsrw xmm1,WORD[rbx*4+rdi],1 435 436 add r9d,r10d 437 mov edx,DWORD[rcx*4+rdi] 438 xor r12d,r9d 439 mov DWORD[rcx*4+rdi],eax 440 and r12d,r11d 441 add r8d,DWORD[20+r15] 442 add al,dl 443 mov ebx,DWORD[84+rsi] 444 add r8d,3593408605 445 xor r12d,r10d 446 movzx eax,al 447 mov DWORD[80+rsi],edx 448 add r8d,r12d 449 add cl,bl 450 rol r8d,5 451 mov r12d,r9d 452 pinsrw xmm0,WORD[rax*4+rdi],2 453 454 add r8d,r9d 455 mov edx,DWORD[rcx*4+rdi] 456 xor r12d,r8d 457 mov DWORD[rcx*4+rdi],ebx 458 and r12d,r10d 459 add r11d,DWORD[40+r15] 460 add bl,dl 461 mov eax,DWORD[88+rsi] 462 add r11d,38016083 463 xor r12d,r9d 464 movzx ebx,bl 465 mov DWORD[84+rsi],edx 466 add r11d,r12d 467 add cl,al 468 rol r11d,9 469 mov r12d,r8d 470 pinsrw xmm1,WORD[rbx*4+rdi],2 471 472 add r11d,r8d 473 mov edx,DWORD[rcx*4+rdi] 474 xor r12d,r11d 475 mov DWORD[rcx*4+rdi],eax 476 and r12d,r9d 477 add r10d,DWORD[60+r15] 478 add al,dl 479 mov ebx,DWORD[92+rsi] 480 add r10d,3634488961 481 xor r12d,r8d 482 movzx eax,al 483 mov DWORD[88+rsi],edx 484 add r10d,r12d 485 add cl,bl 486 rol r10d,14 487 mov r12d,r11d 488 pinsrw xmm0,WORD[rax*4+rdi],3 489 490 add r10d,r11d 491 mov edx,DWORD[rcx*4+rdi] 492 xor r12d,r10d 493 mov DWORD[rcx*4+rdi],ebx 494 and r12d,r8d 495 add r9d,DWORD[16+r15] 496 add bl,dl 497 mov eax,DWORD[96+rsi] 498 add r9d,3889429448 499 xor r12d,r11d 500 movzx ebx,bl 501 mov DWORD[92+rsi],edx 502 add r9d,r12d 503 add cl,al 504 rol r9d,20 505 mov r12d,r10d 506 pinsrw xmm1,WORD[rbx*4+rdi],3 507 508 add r9d,r10d 509 mov edx,DWORD[rcx*4+rdi] 510 xor r12d,r9d 511 mov DWORD[rcx*4+rdi],eax 512 and r12d,r11d 513 add r8d,DWORD[36+r15] 514 add al,dl 515 mov ebx,DWORD[100+rsi] 516 add r8d,568446438 517 xor r12d,r10d 518 movzx eax,al 519 mov DWORD[96+rsi],edx 520 add r8d,r12d 521 add cl,bl 522 rol r8d,5 523 mov r12d,r9d 524 pinsrw xmm0,WORD[rax*4+rdi],4 525 526 add r8d,r9d 527 mov edx,DWORD[rcx*4+rdi] 528 xor r12d,r8d 529 mov DWORD[rcx*4+rdi],ebx 530 and r12d,r10d 531 add r11d,DWORD[56+r15] 532 add bl,dl 533 mov eax,DWORD[104+rsi] 534 add r11d,3275163606 535 xor r12d,r9d 536 movzx ebx,bl 537 mov DWORD[100+rsi],edx 538 add r11d,r12d 539 add cl,al 540 rol r11d,9 541 mov r12d,r8d 542 pinsrw xmm1,WORD[rbx*4+rdi],4 543 544 add r11d,r8d 545 mov edx,DWORD[rcx*4+rdi] 546 xor r12d,r11d 547 mov DWORD[rcx*4+rdi],eax 548 and r12d,r9d 549 add r10d,DWORD[12+r15] 550 add al,dl 551 mov ebx,DWORD[108+rsi] 552 add r10d,4107603335 553 xor r12d,r8d 554 movzx eax,al 555 mov DWORD[104+rsi],edx 556 add r10d,r12d 557 add cl,bl 558 rol r10d,14 559 mov r12d,r11d 560 pinsrw xmm0,WORD[rax*4+rdi],5 561 562 add r10d,r11d 563 mov edx,DWORD[rcx*4+rdi] 564 xor r12d,r10d 565 mov DWORD[rcx*4+rdi],ebx 566 and r12d,r8d 567 add r9d,DWORD[32+r15] 568 add bl,dl 569 mov eax,DWORD[112+rsi] 570 add r9d,1163531501 571 xor r12d,r11d 572 movzx ebx,bl 573 mov DWORD[108+rsi],edx 574 add r9d,r12d 575 add cl,al 576 rol r9d,20 577 mov r12d,r10d 578 pinsrw xmm1,WORD[rbx*4+rdi],5 579 580 add r9d,r10d 581 mov edx,DWORD[rcx*4+rdi] 582 xor r12d,r9d 583 mov DWORD[rcx*4+rdi],eax 584 and r12d,r11d 585 add r8d,DWORD[52+r15] 586 add al,dl 587 mov ebx,DWORD[116+rsi] 588 add r8d,2850285829 589 xor r12d,r10d 590 movzx eax,al 591 mov DWORD[112+rsi],edx 592 add r8d,r12d 593 add cl,bl 594 rol r8d,5 595 mov r12d,r9d 596 pinsrw xmm0,WORD[rax*4+rdi],6 597 598 add r8d,r9d 599 mov edx,DWORD[rcx*4+rdi] 600 xor r12d,r8d 601 mov DWORD[rcx*4+rdi],ebx 602 and r12d,r10d 603 add r11d,DWORD[8+r15] 604 add bl,dl 605 mov eax,DWORD[120+rsi] 606 add r11d,4243563512 607 xor r12d,r9d 608 movzx ebx,bl 609 mov DWORD[116+rsi],edx 610 add r11d,r12d 611 add cl,al 612 rol r11d,9 613 mov r12d,r8d 614 pinsrw xmm1,WORD[rbx*4+rdi],6 615 616 add r11d,r8d 617 mov edx,DWORD[rcx*4+rdi] 618 xor r12d,r11d 619 mov DWORD[rcx*4+rdi],eax 620 and r12d,r9d 621 add r10d,DWORD[28+r15] 622 add al,dl 623 mov ebx,DWORD[124+rsi] 624 add r10d,1735328473 625 xor r12d,r8d 626 movzx eax,al 627 mov DWORD[120+rsi],edx 628 add r10d,r12d 629 add cl,bl 630 rol r10d,14 631 mov r12d,r11d 632 pinsrw xmm0,WORD[rax*4+rdi],7 633 634 add r10d,r11d 635 movdqu xmm3,XMMWORD[16+r13] 636 add bpl,32 637 mov edx,DWORD[rcx*4+rdi] 638 xor r12d,r10d 639 mov DWORD[rcx*4+rdi],ebx 640 and r12d,r8d 641 add r9d,DWORD[48+r15] 642 add bl,dl 643 mov eax,DWORD[rbp*4+rdi] 644 add r9d,2368359562 645 xor r12d,r11d 646 movzx ebx,bl 647 mov DWORD[124+rsi],edx 648 add r9d,r12d 649 add cl,al 650 rol r9d,20 651 mov r12d,r11d 652 pinsrw xmm1,WORD[rbx*4+rdi],7 653 654 add r9d,r10d 655 mov rsi,rcx 656 xor rcx,rcx 657 mov cl,sil 658 lea rsi,[rbp*4+rdi] 659 psllq xmm1,8 660 pxor xmm3,xmm0 661 pxor xmm3,xmm1 662 pxor xmm0,xmm0 663 mov edx,DWORD[rcx*4+rdi] 664 xor r12d,r10d 665 mov DWORD[rcx*4+rdi],eax 666 xor r12d,r9d 667 add r8d,DWORD[20+r15] 668 add al,dl 669 mov ebx,DWORD[4+rsi] 670 add r8d,4294588738 671 movzx eax,al 672 add r8d,r12d 673 mov DWORD[rsi],edx 674 add cl,bl 675 rol r8d,4 676 mov r12d,r10d 677 movd xmm0,DWORD[rax*4+rdi] 678 679 add r8d,r9d 680 pxor xmm1,xmm1 681 mov edx,DWORD[rcx*4+rdi] 682 xor r12d,r9d 683 mov DWORD[rcx*4+rdi],ebx 684 xor r12d,r8d 685 add r11d,DWORD[32+r15] 686 add bl,dl 687 mov eax,DWORD[8+rsi] 688 add r11d,2272392833 689 movzx ebx,bl 690 add r11d,r12d 691 mov DWORD[4+rsi],edx 692 add cl,al 693 rol r11d,11 694 mov r12d,r9d 695 movd xmm1,DWORD[rbx*4+rdi] 696 697 add r11d,r8d 698 mov edx,DWORD[rcx*4+rdi] 699 xor r12d,r8d 700 mov DWORD[rcx*4+rdi],eax 701 xor r12d,r11d 702 add r10d,DWORD[44+r15] 703 add al,dl 704 mov ebx,DWORD[12+rsi] 705 add r10d,1839030562 706 movzx eax,al 707 add r10d,r12d 708 mov DWORD[8+rsi],edx 709 add cl,bl 710 rol r10d,16 711 mov r12d,r8d 712 pinsrw xmm0,WORD[rax*4+rdi],1 713 714 add r10d,r11d 715 mov edx,DWORD[rcx*4+rdi] 716 xor r12d,r11d 717 mov DWORD[rcx*4+rdi],ebx 718 xor r12d,r10d 719 add r9d,DWORD[56+r15] 720 add bl,dl 721 mov eax,DWORD[16+rsi] 722 add r9d,4259657740 723 movzx ebx,bl 724 add r9d,r12d 725 mov DWORD[12+rsi],edx 726 add cl,al 727 rol r9d,23 728 mov r12d,r11d 729 pinsrw xmm1,WORD[rbx*4+rdi],1 730 731 add r9d,r10d 732 mov edx,DWORD[rcx*4+rdi] 733 xor r12d,r10d 734 mov DWORD[rcx*4+rdi],eax 735 xor r12d,r9d 736 add r8d,DWORD[4+r15] 737 add al,dl 738 mov ebx,DWORD[20+rsi] 739 add r8d,2763975236 740 movzx eax,al 741 add r8d,r12d 742 mov DWORD[16+rsi],edx 743 add cl,bl 744 rol r8d,4 745 mov r12d,r10d 746 pinsrw xmm0,WORD[rax*4+rdi],2 747 748 add r8d,r9d 749 mov edx,DWORD[rcx*4+rdi] 750 xor r12d,r9d 751 mov DWORD[rcx*4+rdi],ebx 752 xor r12d,r8d 753 add r11d,DWORD[16+r15] 754 add bl,dl 755 mov eax,DWORD[24+rsi] 756 add r11d,1272893353 757 movzx ebx,bl 758 add r11d,r12d 759 mov DWORD[20+rsi],edx 760 add cl,al 761 rol r11d,11 762 mov r12d,r9d 763 pinsrw xmm1,WORD[rbx*4+rdi],2 764 765 add r11d,r8d 766 mov edx,DWORD[rcx*4+rdi] 767 xor r12d,r8d 768 mov DWORD[rcx*4+rdi],eax 769 xor r12d,r11d 770 add r10d,DWORD[28+r15] 771 add al,dl 772 mov ebx,DWORD[28+rsi] 773 add r10d,4139469664 774 movzx eax,al 775 add r10d,r12d 776 mov DWORD[24+rsi],edx 777 add cl,bl 778 rol r10d,16 779 mov r12d,r8d 780 pinsrw xmm0,WORD[rax*4+rdi],3 781 782 add r10d,r11d 783 mov edx,DWORD[rcx*4+rdi] 784 xor r12d,r11d 785 mov DWORD[rcx*4+rdi],ebx 786 xor r12d,r10d 787 add r9d,DWORD[40+r15] 788 add bl,dl 789 mov eax,DWORD[32+rsi] 790 add r9d,3200236656 791 movzx ebx,bl 792 add r9d,r12d 793 mov DWORD[28+rsi],edx 794 add cl,al 795 rol r9d,23 796 mov r12d,r11d 797 pinsrw xmm1,WORD[rbx*4+rdi],3 798 799 add r9d,r10d 800 mov edx,DWORD[rcx*4+rdi] 801 xor r12d,r10d 802 mov DWORD[rcx*4+rdi],eax 803 xor r12d,r9d 804 add r8d,DWORD[52+r15] 805 add al,dl 806 mov ebx,DWORD[36+rsi] 807 add r8d,681279174 808 movzx eax,al 809 add r8d,r12d 810 mov DWORD[32+rsi],edx 811 add cl,bl 812 rol r8d,4 813 mov r12d,r10d 814 pinsrw xmm0,WORD[rax*4+rdi],4 815 816 add r8d,r9d 817 mov edx,DWORD[rcx*4+rdi] 818 xor r12d,r9d 819 mov DWORD[rcx*4+rdi],ebx 820 xor r12d,r8d 821 add r11d,DWORD[r15] 822 add bl,dl 823 mov eax,DWORD[40+rsi] 824 add r11d,3936430074 825 movzx ebx,bl 826 add r11d,r12d 827 mov DWORD[36+rsi],edx 828 add cl,al 829 rol r11d,11 830 mov r12d,r9d 831 pinsrw xmm1,WORD[rbx*4+rdi],4 832 833 add r11d,r8d 834 mov edx,DWORD[rcx*4+rdi] 835 xor r12d,r8d 836 mov DWORD[rcx*4+rdi],eax 837 xor r12d,r11d 838 add r10d,DWORD[12+r15] 839 add al,dl 840 mov ebx,DWORD[44+rsi] 841 add r10d,3572445317 842 movzx eax,al 843 add r10d,r12d 844 mov DWORD[40+rsi],edx 845 add cl,bl 846 rol r10d,16 847 mov r12d,r8d 848 pinsrw xmm0,WORD[rax*4+rdi],5 849 850 add r10d,r11d 851 mov edx,DWORD[rcx*4+rdi] 852 xor r12d,r11d 853 mov DWORD[rcx*4+rdi],ebx 854 xor r12d,r10d 855 add r9d,DWORD[24+r15] 856 add bl,dl 857 mov eax,DWORD[48+rsi] 858 add r9d,76029189 859 movzx ebx,bl 860 add r9d,r12d 861 mov DWORD[44+rsi],edx 862 add cl,al 863 rol r9d,23 864 mov r12d,r11d 865 pinsrw xmm1,WORD[rbx*4+rdi],5 866 867 add r9d,r10d 868 mov edx,DWORD[rcx*4+rdi] 869 xor r12d,r10d 870 mov DWORD[rcx*4+rdi],eax 871 xor r12d,r9d 872 add r8d,DWORD[36+r15] 873 add al,dl 874 mov ebx,DWORD[52+rsi] 875 add r8d,3654602809 876 movzx eax,al 877 add r8d,r12d 878 mov DWORD[48+rsi],edx 879 add cl,bl 880 rol r8d,4 881 mov r12d,r10d 882 pinsrw xmm0,WORD[rax*4+rdi],6 883 884 add r8d,r9d 885 mov edx,DWORD[rcx*4+rdi] 886 xor r12d,r9d 887 mov DWORD[rcx*4+rdi],ebx 888 xor r12d,r8d 889 add r11d,DWORD[48+r15] 890 add bl,dl 891 mov eax,DWORD[56+rsi] 892 add r11d,3873151461 893 movzx ebx,bl 894 add r11d,r12d 895 mov DWORD[52+rsi],edx 896 add cl,al 897 rol r11d,11 898 mov r12d,r9d 899 pinsrw xmm1,WORD[rbx*4+rdi],6 900 901 add r11d,r8d 902 mov edx,DWORD[rcx*4+rdi] 903 xor r12d,r8d 904 mov DWORD[rcx*4+rdi],eax 905 xor r12d,r11d 906 add r10d,DWORD[60+r15] 907 add al,dl 908 mov ebx,DWORD[60+rsi] 909 add r10d,530742520 910 movzx eax,al 911 add r10d,r12d 912 mov DWORD[56+rsi],edx 913 add cl,bl 914 rol r10d,16 915 mov r12d,r8d 916 pinsrw xmm0,WORD[rax*4+rdi],7 917 918 add r10d,r11d 919 movdqu xmm4,XMMWORD[32+r13] 920 mov edx,DWORD[rcx*4+rdi] 921 xor r12d,r11d 922 mov DWORD[rcx*4+rdi],ebx 923 xor r12d,r10d 924 add r9d,DWORD[8+r15] 925 add bl,dl 926 mov eax,DWORD[64+rsi] 927 add r9d,3299628645 928 movzx ebx,bl 929 add r9d,r12d 930 mov DWORD[60+rsi],edx 931 add cl,al 932 rol r9d,23 933 mov r12d,-1 934 pinsrw xmm1,WORD[rbx*4+rdi],7 935 936 add r9d,r10d 937 psllq xmm1,8 938 pxor xmm4,xmm0 939 pxor xmm4,xmm1 940 pxor xmm0,xmm0 941 mov edx,DWORD[rcx*4+rdi] 942 xor r12d,r11d 943 mov DWORD[rcx*4+rdi],eax 944 or r12d,r9d 945 add r8d,DWORD[r15] 946 add al,dl 947 mov ebx,DWORD[68+rsi] 948 add r8d,4096336452 949 movzx eax,al 950 xor r12d,r10d 951 mov DWORD[64+rsi],edx 952 add r8d,r12d 953 add cl,bl 954 rol r8d,6 955 mov r12d,-1 956 movd xmm0,DWORD[rax*4+rdi] 957 958 add r8d,r9d 959 pxor xmm1,xmm1 960 mov edx,DWORD[rcx*4+rdi] 961 xor r12d,r10d 962 mov DWORD[rcx*4+rdi],ebx 963 or r12d,r8d 964 add r11d,DWORD[28+r15] 965 add bl,dl 966 mov eax,DWORD[72+rsi] 967 add r11d,1126891415 968 movzx ebx,bl 969 xor r12d,r9d 970 mov DWORD[68+rsi],edx 971 add r11d,r12d 972 add cl,al 973 rol r11d,10 974 mov r12d,-1 975 movd xmm1,DWORD[rbx*4+rdi] 976 977 add r11d,r8d 978 mov edx,DWORD[rcx*4+rdi] 979 xor r12d,r9d 980 mov DWORD[rcx*4+rdi],eax 981 or r12d,r11d 982 add r10d,DWORD[56+r15] 983 add al,dl 984 mov ebx,DWORD[76+rsi] 985 add r10d,2878612391 986 movzx eax,al 987 xor r12d,r8d 988 mov DWORD[72+rsi],edx 989 add r10d,r12d 990 add cl,bl 991 rol r10d,15 992 mov r12d,-1 993 pinsrw xmm0,WORD[rax*4+rdi],1 994 995 add r10d,r11d 996 mov edx,DWORD[rcx*4+rdi] 997 xor r12d,r8d 998 mov DWORD[rcx*4+rdi],ebx 999 or r12d,r10d 1000 add r9d,DWORD[20+r15] 1001 add bl,dl 1002 mov eax,DWORD[80+rsi] 1003 add r9d,4237533241 1004 movzx ebx,bl 1005 xor r12d,r11d 1006 mov DWORD[76+rsi],edx 1007 add r9d,r12d 1008 add cl,al 1009 rol r9d,21 1010 mov r12d,-1 1011 pinsrw xmm1,WORD[rbx*4+rdi],1 1012 1013 add r9d,r10d 1014 mov edx,DWORD[rcx*4+rdi] 1015 xor r12d,r11d 1016 mov DWORD[rcx*4+rdi],eax 1017 or r12d,r9d 1018 add r8d,DWORD[48+r15] 1019 add al,dl 1020 mov ebx,DWORD[84+rsi] 1021 add r8d,1700485571 1022 movzx eax,al 1023 xor r12d,r10d 1024 mov DWORD[80+rsi],edx 1025 add r8d,r12d 1026 add cl,bl 1027 rol r8d,6 1028 mov r12d,-1 1029 pinsrw xmm0,WORD[rax*4+rdi],2 1030 1031 add r8d,r9d 1032 mov edx,DWORD[rcx*4+rdi] 1033 xor r12d,r10d 1034 mov DWORD[rcx*4+rdi],ebx 1035 or r12d,r8d 1036 add r11d,DWORD[12+r15] 1037 add bl,dl 1038 mov eax,DWORD[88+rsi] 1039 add r11d,2399980690 1040 movzx ebx,bl 1041 xor r12d,r9d 1042 mov DWORD[84+rsi],edx 1043 add r11d,r12d 1044 add cl,al 1045 rol r11d,10 1046 mov r12d,-1 1047 pinsrw xmm1,WORD[rbx*4+rdi],2 1048 1049 add r11d,r8d 1050 mov edx,DWORD[rcx*4+rdi] 1051 xor r12d,r9d 1052 mov DWORD[rcx*4+rdi],eax 1053 or r12d,r11d 1054 add r10d,DWORD[40+r15] 1055 add al,dl 1056 mov ebx,DWORD[92+rsi] 1057 add r10d,4293915773 1058 movzx eax,al 1059 xor r12d,r8d 1060 mov DWORD[88+rsi],edx 1061 add r10d,r12d 1062 add cl,bl 1063 rol r10d,15 1064 mov r12d,-1 1065 pinsrw xmm0,WORD[rax*4+rdi],3 1066 1067 add r10d,r11d 1068 mov edx,DWORD[rcx*4+rdi] 1069 xor r12d,r8d 1070 mov DWORD[rcx*4+rdi],ebx 1071 or r12d,r10d 1072 add r9d,DWORD[4+r15] 1073 add bl,dl 1074 mov eax,DWORD[96+rsi] 1075 add r9d,2240044497 1076 movzx ebx,bl 1077 xor r12d,r11d 1078 mov DWORD[92+rsi],edx 1079 add r9d,r12d 1080 add cl,al 1081 rol r9d,21 1082 mov r12d,-1 1083 pinsrw xmm1,WORD[rbx*4+rdi],3 1084 1085 add r9d,r10d 1086 mov edx,DWORD[rcx*4+rdi] 1087 xor r12d,r11d 1088 mov DWORD[rcx*4+rdi],eax 1089 or r12d,r9d 1090 add r8d,DWORD[32+r15] 1091 add al,dl 1092 mov ebx,DWORD[100+rsi] 1093 add r8d,1873313359 1094 movzx eax,al 1095 xor r12d,r10d 1096 mov DWORD[96+rsi],edx 1097 add r8d,r12d 1098 add cl,bl 1099 rol r8d,6 1100 mov r12d,-1 1101 pinsrw xmm0,WORD[rax*4+rdi],4 1102 1103 add r8d,r9d 1104 mov edx,DWORD[rcx*4+rdi] 1105 xor r12d,r10d 1106 mov DWORD[rcx*4+rdi],ebx 1107 or r12d,r8d 1108 add r11d,DWORD[60+r15] 1109 add bl,dl 1110 mov eax,DWORD[104+rsi] 1111 add r11d,4264355552 1112 movzx ebx,bl 1113 xor r12d,r9d 1114 mov DWORD[100+rsi],edx 1115 add r11d,r12d 1116 add cl,al 1117 rol r11d,10 1118 mov r12d,-1 1119 pinsrw xmm1,WORD[rbx*4+rdi],4 1120 1121 add r11d,r8d 1122 mov edx,DWORD[rcx*4+rdi] 1123 xor r12d,r9d 1124 mov DWORD[rcx*4+rdi],eax 1125 or r12d,r11d 1126 add r10d,DWORD[24+r15] 1127 add al,dl 1128 mov ebx,DWORD[108+rsi] 1129 add r10d,2734768916 1130 movzx eax,al 1131 xor r12d,r8d 1132 mov DWORD[104+rsi],edx 1133 add r10d,r12d 1134 add cl,bl 1135 rol r10d,15 1136 mov r12d,-1 1137 pinsrw xmm0,WORD[rax*4+rdi],5 1138 1139 add r10d,r11d 1140 mov edx,DWORD[rcx*4+rdi] 1141 xor r12d,r8d 1142 mov DWORD[rcx*4+rdi],ebx 1143 or r12d,r10d 1144 add r9d,DWORD[52+r15] 1145 add bl,dl 1146 mov eax,DWORD[112+rsi] 1147 add r9d,1309151649 1148 movzx ebx,bl 1149 xor r12d,r11d 1150 mov DWORD[108+rsi],edx 1151 add r9d,r12d 1152 add cl,al 1153 rol r9d,21 1154 mov r12d,-1 1155 pinsrw xmm1,WORD[rbx*4+rdi],5 1156 1157 add r9d,r10d 1158 mov edx,DWORD[rcx*4+rdi] 1159 xor r12d,r11d 1160 mov DWORD[rcx*4+rdi],eax 1161 or r12d,r9d 1162 add r8d,DWORD[16+r15] 1163 add al,dl 1164 mov ebx,DWORD[116+rsi] 1165 add r8d,4149444226 1166 movzx eax,al 1167 xor r12d,r10d 1168 mov DWORD[112+rsi],edx 1169 add r8d,r12d 1170 add cl,bl 1171 rol r8d,6 1172 mov r12d,-1 1173 pinsrw xmm0,WORD[rax*4+rdi],6 1174 1175 add r8d,r9d 1176 mov edx,DWORD[rcx*4+rdi] 1177 xor r12d,r10d 1178 mov DWORD[rcx*4+rdi],ebx 1179 or r12d,r8d 1180 add r11d,DWORD[44+r15] 1181 add bl,dl 1182 mov eax,DWORD[120+rsi] 1183 add r11d,3174756917 1184 movzx ebx,bl 1185 xor r12d,r9d 1186 mov DWORD[116+rsi],edx 1187 add r11d,r12d 1188 add cl,al 1189 rol r11d,10 1190 mov r12d,-1 1191 pinsrw xmm1,WORD[rbx*4+rdi],6 1192 1193 add r11d,r8d 1194 mov edx,DWORD[rcx*4+rdi] 1195 xor r12d,r9d 1196 mov DWORD[rcx*4+rdi],eax 1197 or r12d,r11d 1198 add r10d,DWORD[8+r15] 1199 add al,dl 1200 mov ebx,DWORD[124+rsi] 1201 add r10d,718787259 1202 movzx eax,al 1203 xor r12d,r8d 1204 mov DWORD[120+rsi],edx 1205 add r10d,r12d 1206 add cl,bl 1207 rol r10d,15 1208 mov r12d,-1 1209 pinsrw xmm0,WORD[rax*4+rdi],7 1210 1211 add r10d,r11d 1212 movdqu xmm5,XMMWORD[48+r13] 1213 add bpl,32 1214 mov edx,DWORD[rcx*4+rdi] 1215 xor r12d,r8d 1216 mov DWORD[rcx*4+rdi],ebx 1217 or r12d,r10d 1218 add r9d,DWORD[36+r15] 1219 add bl,dl 1220 mov eax,DWORD[rbp*4+rdi] 1221 add r9d,3951481745 1222 movzx ebx,bl 1223 xor r12d,r11d 1224 mov DWORD[124+rsi],edx 1225 add r9d,r12d 1226 add cl,al 1227 rol r9d,21 1228 mov r12d,-1 1229 pinsrw xmm1,WORD[rbx*4+rdi],7 1230 1231 add r9d,r10d 1232 mov rsi,rbp 1233 xor rbp,rbp 1234 mov bpl,sil 1235 mov rsi,rcx 1236 xor rcx,rcx 1237 mov cl,sil 1238 lea rsi,[rbp*4+rdi] 1239 psllq xmm1,8 1240 pxor xmm5,xmm0 1241 pxor xmm5,xmm1 1242 add r8d,DWORD[rsp] 1243 add r9d,DWORD[4+rsp] 1244 add r10d,DWORD[8+rsp] 1245 add r11d,DWORD[12+rsp] 1246 1247 movdqu XMMWORD[r13*1+r14],xmm2 1248 movdqu XMMWORD[16+r13*1+r14],xmm3 1249 movdqu XMMWORD[32+r13*1+r14],xmm4 1250 movdqu XMMWORD[48+r13*1+r14],xmm5 1251 lea r15,[64+r15] 1252 lea r13,[64+r13] 1253 cmp r15,QWORD[16+rsp] 1254 jb NEAR $L$oop 1255 1256 mov r12,QWORD[24+rsp] 1257 sub cl,al 1258 mov DWORD[r12],r8d 1259 mov DWORD[4+r12],r9d 1260 mov DWORD[8+r12],r10d 1261 mov DWORD[12+r12],r11d 1262 sub bpl,1 1263 mov DWORD[((-8))+rdi],ebp 1264 mov DWORD[((-4))+rdi],ecx 1265 1266 mov r15,QWORD[40+rsp] 1267 mov r14,QWORD[48+rsp] 1268 mov r13,QWORD[56+rsp] 1269 mov r12,QWORD[64+rsp] 1270 mov rbp,QWORD[72+rsp] 1271 mov rbx,QWORD[80+rsp] 1272 lea rsp,[88+rsp] 1273 $L$epilogue: 1274 $L$abort: 1275 mov rdi,QWORD[8+rsp] ;WIN64 epilogue 1276 mov rsi,QWORD[16+rsp] 1277 DB 0F3h,0C3h ;repret 1278 $L$SEH_end_rc4_md5_enc: 1279 EXTERN __imp_RtlVirtualUnwind 1280 1281 ALIGN 16 1282 se_handler: 1283 push rsi 1284 push rdi 1285 push rbx 1286 push rbp 1287 push r12 1288 push r13 1289 push r14 1290 push r15 1291 pushfq 1292 sub rsp,64 1293 1294 mov rax,QWORD[120+r8] 1295 mov rbx,QWORD[248+r8] 1296 1297 lea r10,[$L$body] 1298 cmp rbx,r10 1299 jb NEAR $L$in_prologue 1300 1301 mov rax,QWORD[152+r8] 1302 1303 lea r10,[$L$epilogue] 1304 cmp rbx,r10 1305 jae NEAR $L$in_prologue 1306 1307 mov r15,QWORD[40+rax] 1308 mov r14,QWORD[48+rax] 1309 mov r13,QWORD[56+rax] 1310 mov r12,QWORD[64+rax] 1311 mov rbp,QWORD[72+rax] 1312 mov rbx,QWORD[80+rax] 1313 lea rax,[88+rax] 1314 1315 mov QWORD[144+r8],rbx 1316 mov QWORD[160+r8],rbp 1317 mov QWORD[216+r8],r12 1318 mov QWORD[224+r8],r13 1319 mov QWORD[232+r8],r14 1320 mov QWORD[240+r8],r15 1321 1322 $L$in_prologue: 1323 mov rdi,QWORD[8+rax] 1324 mov rsi,QWORD[16+rax] 1325 mov QWORD[152+r8],rax 1326 mov QWORD[168+r8],rsi 1327 mov QWORD[176+r8],rdi 1328 1329 mov rdi,QWORD[40+r9] 1330 mov rsi,r8 1331 mov ecx,154 1332 DD 0xa548f3fc 1333 1334 mov rsi,r9 1335 xor rcx,rcx 1336 mov rdx,QWORD[8+rsi] 1337 mov r8,QWORD[rsi] 1338 mov r9,QWORD[16+rsi] 1339 mov r10,QWORD[40+rsi] 1340 lea r11,[56+rsi] 1341 lea r12,[24+rsi] 1342 mov QWORD[32+rsp],r10 1343 mov QWORD[40+rsp],r11 1344 mov QWORD[48+rsp],r12 1345 mov QWORD[56+rsp],rcx 1346 call QWORD[__imp_RtlVirtualUnwind] 1347 1348 mov eax,1 1349 add rsp,64 1350 popfq 1351 pop r15 1352 pop r14 1353 pop r13 1354 pop r12 1355 pop rbp 1356 pop rbx 1357 pop rdi 1358 pop rsi 1359 DB 0F3h,0C3h ;repret 1360 1361 1362 section .pdata rdata align=4 1363 ALIGN 4 1364 DD $L$SEH_begin_rc4_md5_enc wrt ..imagebase 1365 DD $L$SEH_end_rc4_md5_enc wrt ..imagebase 1366 DD $L$SEH_info_rc4_md5_enc wrt ..imagebase 1367 1368 section .xdata rdata align=8 1369 ALIGN 8 1370 $L$SEH_info_rc4_md5_enc: 1371 DB 9,0,0,0 1372 DD se_handler wrt ..imagebase 1373