Простой упаковщик

Тема в разделе "WASM.BEGINNERS", создана пользователем Nicholas_F, 10 май 2010.

  1. Nicholas_F

    Nicholas_F New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2010
    Сообщения:
    29
    Кто-нибудь знает ссылки на статьи типа "пешем простой упаковщик на С++/asm"? Пытаюсь разобраться и написать для примера свой, но что-то не идет процесс, сложно пока вникнуть. На примере было бы куда проще
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Nicholas_F
    сырцы UPX, Yoda и вообще гугли
    эсли бы это было просто, ты бы сейчас не спрашивал:)
     
  3. Nicholas_F

    Nicholas_F New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2010
    Сообщения:
    29
    Это точно)) Сырцы уже смотрю... спасибо.
    Буду рад любой дополнительной информации
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Пожали модуль(длл) лзетом, покриптовали и прицепили загрузчик http://cracklab.ru/f/index.php?action=vthread&forum=6&topic=16114 мой топик(я там зачемто сделал его доступным только после авторизации). Вот копия:
    Используем семпл из пакета Хатчессона лежащий в \MASM32\EXAMPLE8\MOB\CWS
    o Так как должна применяться релокация, а нормально к экзешникам она не применяется, то компилим с опцией /DLL.
    o Нотификация длл выполняется при захваченной кс LdrploaderLock. Всякое обращение к загрузчику из другого потока при захваченной этой кс приведёт к деадлоку. Поэтому не используем InitRoutine(), соответствеено компилим с опцией /NOENTRY.
    o Теперь нужен стартуп рантайм, вынесем его в экспорт с именем "Run", прежде поменяв в сурце имя "start" на "Run" и указав опцию линкеру /EXPORT:Run.
    После этого компилим и получаем cws.dll размером 0x19C00. Теперь жмём это посредством NTLZ(RtlCompressBuffer()) и получаем дамп размером 0x604F. Теперь шифруем, допустим простейшая битовая инверсия. Образ готов.
    Пишем небольшой стаб для загрузки, который расшифровывает образ, распаковывает, подгружает средствами тестируемого лодера и вызывает экспорт Run():
    Код (Text):
    1. .data
    2.          include Crypt.inc
    3. .code
    4.          include Ldr.inc
    5.  
    6. NTERR macro
    7.          .if Eax
    8.          Int 3
    9.          .endif
    10. endm
    11.  
    12. $Dll         CHAR "cws.dll",0
    13. $Run         CHAR "Run",0
    14.  
    15.          assume fs:nothing
    16. Entry proc
    17. Local ImageBase:PVOID, Startup:PVOID
    18. Local MapAddress:PVOID, MapSize:ULONG
    19. Local FinalUncompressedSize:ULONG
    20.          mov MapAddress,0
    21.          mov MapSize,19C00H
    22.          invoke ZwAllocateVirtualMemory, NtCurrentProcess, addr MapAddress, 0, addr MapSize, MEM_COMMIT, PAGE_READWRITE
    23.          NTERR
    24. ; Encrypt
    25.          mov ecx,604FH/4 + 1
    26. @@:
    27.          not dword ptr [offset gMap + ecx*4 - 4]
    28.          loop @b
    29. ; Unpack
    30.          invoke RtlDecompressBuffer, COMPRESSION_FORMAT_LZNT1, MapAddress, 19C00H, addr gMap, 604FH, addr FinalUncompressedSize
    31.          NTERR
    32.          lea eax,ImageBase
    33.          push eax
    34.          push 0
    35.          push offset $Dll
    36.          push MapAddress
    37.          xor eax,eax      ; #LDR_LOAD_DLL
    38.          Call LDR
    39.          NTERR
    40.          invoke ZwFreeVirtualMemory, NtCurrentProcess, addr MapAddress, addr MapSize, MEM_RELEASE
    41.          lea ecx,Startup
    42.          xor eax,eax
    43.          push ecx
    44.          push eax
    45.          push eax
    46.          push offset $Run
    47.          push ImageBase
    48.          inc eax ; #LDR_QUERY_ENTRY
    49.          Call LDR
    50.          NTERR
    51. ; Fix base.
    52.          mov eax,fs:[TEB.Peb]
    53.          mov ecx,ImageBase
    54.          push PEB.ImageBaseAddress[eax]
    55.          mov PEB.ImageBaseAddress[eax],ecx
    56.          Call Startup
    57. ; mov eax,fs:[TEB.Peb]
    58. ; pop PEB.ImageBaseAddress[eax]
    59.          ret
    60. Entry endp
    http://indy-vx.narod.ru/Bin/cws.zip
    Помним что приложение использует GetModuleHandle(NULL), а в этом случае возвращается база экзешника, определённая в PEB[+8]. Фиксим это загрузкой туда нашей базы.
    Конпилим и получае экзешник размером 0x7200. Запускаем и видим битмапу с регионом наложенным на окно:
    http://img651.imageshack.us/img651/2243/cwsb.png
    Аттачимся ольгой. Сразу ругается про отсутствие модуля на диске.
     
  5. Nicholas_F

    Nicholas_F New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2010
    Сообщения:
    29
    Ух... такая каша в голове. Есть исходник простого криптера на си/asm/дельфи с комментариями? Много всякой инфы, сейчас сложно все систематизировать и применить на практике
     
  6. zicker

    zicker Member

    Публикаций:
    0
    Регистрация:
    23 дек 2008
    Сообщения:
    132
    А поиском пользоваться слабо?
     
  7. Nicholas_F

    Nicholas_F New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2010
    Сообщения:
    29
    Мне исходник нужен. Говорю же, инфы море, это тоже читал.
     
  8. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Как раз инфы немного, а вот исходников - чёрт на катке не проедет,

    ИСХОДНИКИ > Работа с файлами
    http://www.wasm.ru/srclist.php?list=2
     
  9. Nicholas_F

    Nicholas_F New Member

    Публикаций:
    0
    Регистрация:
    8 апр 2010
    Сообщения:
    29
    Хохо! Весь инет облазил, а в "исходниках" даже не подумал искать)) Спасибо, JCronuz
     
  10. freyr

    freyr New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2010
    Сообщения:
    95
    тут еще можно посмотреть.