уменьшить размер exe до 1.5кб

Тема в разделе "WASM.BEGINNERS", создана пользователем ola_la, 27 окт 2008.

  1. ola_la

    ola_la New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2008
    Сообщения:
    3
    всем привет

    понадобилась вдруг маленькая прожка, которая бы паковала данные, переданные ей параметром из командной строки и слала их пингом на заданный ип. в силу обстоятельств прога должна быть совсем небольшого размера -примерно 1.5к. порыскав по инету, нашел почти что нужный мне код, неного подправил и получил следующее:
    Код (Text):
    1. .586            
    2. .model flat,stdcall      
    3. option casemap:none      
    4. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\masm32.inc
    8. include \masm32\include\ws2_32.inc
    9. include \masm32\include\iphlpapi.inc
    10.  
    11. includelib \masm32\lib\kernel32.lib
    12. includelib \masm32\lib\masm32.lib
    13. includelib \masm32\lib\ws2_32.lib
    14. includelib \masm32\lib\iphlpapi.lib
    15. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    16. ICMP_ECHO_REPLYTA STRUCT
    17.    Address          DWORD      ?
    18.    Status           DWORD      ?
    19.    RoundTripTime    DWORD      ?
    20.    DataSize         WORD       ?
    21.    Reserved         WORD       ?
    22.    DataPointer      DWORD      ?
    23.    Options          ICMP_OPTIONS  <?>
    24.    zData            BYTE 250 dup (?)
    25. ICMP_ECHO_REPLYTA ENDS
    26. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    27. .data
    28.    CRLF      db   13,10,0
    29. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    30. .data?
    31.    hIcmp      HANDLE      ?      
    32.    hLib      HANDLE      ?      
    33.    dwAddress   DWORD      ?      
    34.    nHops      DWORD      ?
    35.  
    36.    HostBuffer   db   256 dup(?)      
    37.    OutBuffer   db   256 dup(?)      
    38.    DataBuffer   db   512 dup(?)  
    39.  
    40.    wsadata      WSADATA      <?>      
    41.    icmpOptions   ICMP_OPTIONS   <?>      
    42.    icmpReply   ICMP_ECHO_REPLYTA <?>      
    43. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    44. .code
    45. Start:        
    46.    invoke WSAStartup,202h,ADDR wsadata  
    47.    .if eax!=0            
    48.       jmp @Exit
    49.    .endif
    50.  
    51.    invoke GetCL,1,ADDR HostBuffer      
    52.    .if (eax!=1)              
    53.       jmp @Exit            
    54.    .endif
    55.  
    56.    invoke GetCL,2,ADDR DataBuffer  
    57.    .if (eax!=1)            
    58.       jmp @Exit            
    59.    .endif
    60.  
    61.    invoke inet_addr,ADDR HostBuffer
    62.    .if eax==INADDR_NONE        
    63.       invoke gethostbyname,ADDR HostBuffer      
    64.       .if eax==0              
    65.          jmp @Exit
    66.       .endif
    67.       mov eax,[eax+12]  
    68.       mov eax,[eax]      
    69.       mov eax,[eax]      
    70.    .endif
    71.    mov dwAddress,eax      
    72.    invoke IcmpCreateFile      
    73.    mov hIcmp,eax        
    74.  
    75.       mov icmpOptions.Ttl,255  
    76.       mov icmpOptions.Tos,0  
    77.       mov icmpOptions.Flags,0  
    78.       mov icmpOptions.OptionsSize,0  
    79.       mov icmpOptions.OptionsData,0  
    80.      
    81.       invoke IcmpSendEcho,hIcmp,dwAddress,ADDR DataBuffer,SIZEOF DataBuffer,ADDR icmpOptions,ADDR icmpReply,SIZEOF ICMP_ECHO_REPLYTA+SIZEOF ICMP_OPTIONS,5000  
    82.  
    83.    invoke IcmpCloseHandle,hIcmp  
    84.    
    85. @Exit:  
    86.    invoke WSACleanup      
    87.    invoke ExitProcess,0      
    88. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    89.  
    90. end Start
    откомпилирована masm32, программа весит 3кб, но все равно для моего случая это слишком много. пробовал удалять ненужный код (читать ответ пинга мне вобщем-то не надо), но все равно размер 3072 байта, в асме я совсем не силец. посмотрев хекс редактором, обнаружил в ехе множество нулей, наверное все это дело можно как-то еще свернуть! спасибо!
     
  2. ola_la

    ola_la New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2008
    Сообщения:
    3
    ужал опцией линковщика /MERGE:.rdata=.text до 2кб, хватило))
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Упакуй fsg2
     
  4. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    ребилд его.
     
  5. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    1.4кб

    Код (Text):
    1. .586            
    2. .model flat,stdcall      
    3. option casemap:none      
    4. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\masm32.inc
    8. include \masm32\include\ws2_32.inc
    9. include \masm32\include\iphlpapi.inc
    10.  
    11. includelib \masm32\lib\kernel32.lib
    12. includelib \masm32\lib\masm32.lib
    13. includelib \masm32\lib\ws2_32.lib
    14. includelib \masm32\lib\iphlpapi.lib
    15. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    16. ICMP_ECHO_REPLYTA STRUCT
    17.    Address          DWORD      ?
    18.    Status           DWORD      ?
    19.    RoundTripTime    DWORD      ?
    20.    DataSize         WORD       ?
    21.    Reserved         WORD       ?
    22.    DataPointer      DWORD      ?
    23.    Options          ICMP_OPTIONS  <?>
    24.    zData            BYTE 250 dup (?)
    25. ICMP_ECHO_REPLYTA ENDS
    26. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    27. .code
    28.    CRLF      db   13,10,0
    29.    hIcmp      HANDLE      ?      
    30.    hLib      HANDLE      ?      
    31.    dwAddress   DWORD      ?      
    32.    nHops      DWORD      ?
    33.  
    34. Start proc  
    35.             LOCAL HostBuffer[256]: byte
    36.             LOCAL OutBuffer[256]: byte
    37.             LOCAL DataBuffer[512]: byte
    38.             LOCAL   wsadata: WSADATA
    39.             LOCAL   icmpOptions: ICMP_OPTIONS
    40.             LOCAL   icmpReply: ICMP_ECHO_REPLYTA
    41.  
    42.    invoke WSAStartup,202h,ADDR wsadata  
    43.    .if eax!=0            
    44.       jmp @Exit
    45.    .endif
    46.  
    47.    invoke GetCL,1,ADDR HostBuffer      
    48.    .if (eax!=1)              
    49.       jmp @Exit            
    50.    .endif
    51.  
    52.    invoke GetCL,2,ADDR DataBuffer  
    53.    .if (eax!=1)            
    54.       jmp @Exit            
    55.    .endif
    56.  
    57.    invoke inet_addr,ADDR HostBuffer
    58.    .if eax==INADDR_NONE        
    59.       invoke gethostbyname,ADDR HostBuffer      
    60.       .if eax==0              
    61.          jmp @Exit
    62.       .endif
    63.       mov eax,[eax+12]  
    64.       mov eax,[eax]      
    65.       mov eax,[eax]      
    66.    .endif
    67.    mov dwAddress,eax      
    68.    invoke IcmpCreateFile      
    69.    mov hIcmp,eax        
    70.  
    71.       mov icmpOptions.Ttl,255  
    72.       mov icmpOptions.Tos,0  
    73.       mov icmpOptions.Flags,0  
    74.       mov icmpOptions.OptionsSize,0  
    75.       mov icmpOptions.OptionsData,0  
    76.      
    77.       invoke IcmpSendEcho,hIcmp,dwAddress,ADDR DataBuffer,SIZEOF DataBuffer,ADDR icmpOptions,ADDR icmpReply,SIZEOF ICMP_ECHO_REPLYTA+SIZEOF ICMP_OPTIONS,5000  
    78.  
    79.    invoke IcmpCloseHandle,hIcmp  
    80.    
    81. @Exit:  
    82.    invoke WSACleanup      
    83.    invoke ExitProcess,0      
    84. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    85. Start endp
    86.  
    87. end Start
    88.  
    89.  
    90. \masm32\bin\ml /c /coff /Cp %file%.asm
    91. \masm32\bin\Link /SUBSYSTEM:WINDOWS  /SECTION:.text,EWR  /align:16  %file%.obj
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Код (Text):
    1.       .if eax==0              
    2.          jmp @Exit
    3.       .endif
    +5 :)

    http://wasm.ru/forum/viewtopic.php?pid=177629#p177629
     
  7. ola_la

    ola_la New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2008
    Сообщения:
    3
    fsg2 очень здорово упаковал, но прога в нужном месте работать отказалась, хотя на моем компе и на другом, подобном первому все было хорошо. воспользовавшсь инструкциями litrovith"а ужал прогу без упаковщика и все ништяяк)) спасибо) слава асму и людям его изучающим!
     
  8. driver

    driver New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    302
    прверьте fsg2 хорошим антвирусом, мой говорит там троян
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    ola_la прикрепи к сообщению свой не сжатый exe-файл, наверное его можно еще уменьшить
    .if eax!=0
    jmp @Exit
    .endif
    можно заменить на test eax,eax / jnz @Exit

    .if (eax!=1)
    jmp @Exit
    .endif
    можно заменить на dec eax / jnz @Exit /inc eax
     
  10. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    ola_la
    интересно а как принять так отосланные данные из этого DataBuffer ?
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    litrovith, ola_la в какой dll находятся функции IcmpCreateFile, IcmpSendEcho, IcmpCloseHandle?
     
  12. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Mikl___
    icmp.dll
     
  13. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Ну все, теперь ждите экзешник в 150 байт, Mikl___ за дело взялся ))
     
  14. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    попробовал чтото накодить в фасме - там гдето 0x100 байт импорта и 0x100 байт кода. Ну и заголовок тоже гдето 0x100 байт. 150 байт никак не получится)
     
  15. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    GoldFinch + прилепить туда 4-х байтовый досстюб, + выравнивание == 4... и твои триста можно уменьшить.
    На самом деле, про 150 байт - это я с потолка взял.
     
  16. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    я ж говорю, секция кода 256 байт, секция импорта 256 байт, и весь заголовок 256 байт
    уменьшить можно только перемешивая код с заголовком и заменив статический импорт на динамический с хешами
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    размер exe 897 GoldFinch как всегда прав -- заголовок - 196 байт (0C4h), код - 431 байт (1AFh), импорт 270 байт (10Eh) -- сорц и ехе в аттаче. Увы, под руками не было рабочего экзешника ola_la (автор к сожалению не откликнулся) написано по его тексту без осмысления как это все должно работать, поэтому не судите строго, можно еще уменьшить процедуру GetCl или затолкать ее в dll.
     
  18. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Mikl___
    На висле вылетает ошибка инициализации приложения 0xc0000018
     
  19. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    KeSqueer Скорее всего из-за выравнивания.
     
  20. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Под XP вроде бы работает
    KeSqueer, загляните пожалуйста в Сам себе Iczelion, там начиная с #121 по той же технологии переделаные уроки Iczelion'a -- будут ли они работать под Вистой?