[TulaAnti&ViralClub] PRESENTS ...
MooN_BuG, Issue 4, Dec 1997                                           file 003

                           ЛИКБЕЗ ПО TURBO DEBUGER
                                                   by RedArc

     Иногда  бывает  очень  нужно  внести  какие-либо  изменения в исполняемую
программу. Разумеется, что для этого чаще всего используют Hiew. Ну а если Вам
необходимо   расшифровать   какой-либо   участок   программы   или   наоборот,
покриптовать,  то  очень  даже  может оказаться, что возможностей Hiew'а будет
недостаточно. Тогда придется писать соответствующую программу самим.
     Для  разборки зашифрованного тела вируса, особенно если в нем отсутствуют
препятствия  трассировке,  вполне можно заюзать старенький Turbo Debuger фирмы
Borland.  Я  от  различных людей слышал фразу, что "этот отладчик не позволяет
сохранять  измененный  код  в  файл".  Это  не  правда, просто эта возможность
глубоко упрятана под слоем окошек и менюшек.
     Разумеется,  что  для  получения  полнофункциональной EXE-программы после
отладчика нужно будет выполнить дополнительные шаги по созданию EXE Header. Ну
а  если  такой  файл был сегментированным, то дополнительных шагов нужно будет
сделать гораздо больше.
     Мы  рассмотрим  более  простую задачу - сохранение COM-программы из Turbo
Debuger. Для этого оказывается необходимо сделать всего то 8 шагов! Я надеюсь,
что   приведенная   ниже   информация  во  многом  облегчит  жизнь  начинающим
вирмейкерам, да и другим также будет полезной... ;)
     Для  лучшего  усвоения  материала  привожу  экранные копии работы в Turbo
Debuger по каждому шагу.



  1)  Запоминаем  длину "исследуемого объекта" в шестнадцатиричном формате,
например, используя калькулятор в DOS Navigator

=== Cut ===
┌────────────── C:\TEST ───────────────┐┌──── D:\...R\ONLY_FOR.YOU\VIR 167,024 ┐
│    Имя     │  Размер  │  Дата  │Время││    Имя     │  Размер  │  Дата  │Время│
│..          │ Каталог│ 6-03-97│21:28││VIRUS_A     │ Каталог│15-05-97│11:54│
│5000     com│     6,740│ 1-07-97│20:51││VIRUS_B     │ Каталог│15-05-97│11:54│
│5000     exe│╔═[■]══════════════ Калькулятор ═══════════════════╗5-05-97│11:54│
│5000com  lst│║                                                  ║5-05-97│11:54│
│howcatch 2  │║┌ Выражение ─────────────────────────────────┬───┐║5-05-97│11:54│
│            │║│ 6740                                       │▐▌│║5-05-97│11:54│
│            │║└────────────────────────────────────────────┴───┘║5-05-97│11:54│
│            │║  Форма:  ┌──────────────────────────────────────┐║5-05-97│11:54│
│            │║  () DEC │                                 6740 │║5-05-97│11:54│
│            │║  ( ) HEX │                                 1A54 │║5-05-97│11:54│
│            │║  ( ) BIN │                        1101001010100 │║5-05-97│11:54│
│            │║  ( ) OCT │                                15124 │║5-05-97│11:54│
│            │║  ( ) EXP │               6.74000000000000E+0003 │║5-05-97│11:54│
│            │║          └──────────────────────────────────────┘║5-05-97│11:54│
│            │║ Вычислить▄  Скопировать ▄  Закрыть ▄  Помощь ▄ ║5-05-97│11:54│
│            │║  ▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀ ║5-05-97│11:54│
│────────────┴╚══════════════════════════════════════════════════╝───────┴─────│
│5000.com          6,740  1-07-97 20:51││VIRUS_D       Каталог 15-05-97 11:54│
│          Файлы не отмечены           ││          Файлы не отмечены           │
│320,815,104 байт свободно на диске C: ││381,485,056 байт свободно на диске D: │
└[ A B C D E F G * ]───────────────────┘└[ A B C D E F G * ]───────────────────┘
=== Cut ===



  2)  Загружаем  "исследуемый"  объект  в TD, производим какие то действия,
делаем  активным  левое нижнее окно (Shift + ), где обычно распологается дамп
сегмента DS.

=== Cut ===
  Ё  File  Edit  View  Run  Breakpoints  Data  Options  Window  Help       READY
╔═[■]═CPU 80486═══════════════════════════════════════════════╤═══════1════[]═╗
║  cs:1488E80000         call   148B                         │  ax 0000   │c=0║
║  cs:148B 5E             pop    si                           │  bx 0000   │z=0║
║  cs:148C 83EE03         sub    si,0003                      │  cx 00FF   │s=0║
║  cs:148F 2E8984C706     mov    cs:[si+06C7],ax              │  dx 5F33   │o=0║
║  cs:1494 06             push   es                           │  si 0100   │p=0║
║  cs:1495 56             push   si                           │  di FFFE   │a=0║
║  cs:1496 33D2           xor    dx,dx                        │  bp 0000   │i=1║
║  cs:1498 B483           mov    ah,83                        │  sp FFFE   │d=0║
║  cs:149A CD21           int    21                           │  ds 5F33   │   ║
║  cs:149C 5E             pop    si                           │  es 5F33   │   ║
║  cs:149D 56             push   si                           │  ss 5F33   │   ║
║  cs:149E 81FA9019       cmp    dx,1990                      │  cs 5F33   │   ║
║  cs:14A2 746C           je     1510                         │  ip 1488   │   ║
║  cs:14A4 06             push   es                           │            │   ║
║  cs:14A5 0E             push   cs                           │            │   ║
╟─────────────────────────────────────────────────────────────┼────────────┴───╢
║  ds:0000 CD 20 FF 9F 00 9A F0 FE ═  Я ЪЁ■                     ss:0006 FEF0  ║
║  ds:0008 1D F0 E4 01 29 26 AE 01 Ёф)&о                   ■  ss:0004 9A00  ║
║  ds:0010 29 26 80 02 84 20 F2 11 )&АД Є                   ▒  ss:0002 9FFF  ║
║  ds:0018 01 01 01 00 02 FF FF FF                        ▒  ss:0000 20CD  ║
║  ds:0020 FF FF FF FF FF FF FF FF                              ss:FFFE0000  ║
╚■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╧═══════════════─┘
F1-Help F2-Bkpt F3-Mod F4-Here F5-Zoom F6-Next F7-Trace F8-Step F9-Run F10-Menu
=== Cut ===



  3)  Жмем  комбинацию  клавиш  Ctrl+G  и  вводим сегмент и смещение начала
блока,  который собираемся скидывать в файл. В качестве сегмента лучше указать
адрес  сегмента  кода  вируса,  а смещение блока - смещение кода вируса в этом
сегменте, например так:

=== Cut ===
  Ё  File  Edit  View  Run  Breakpoints  Data  Options  Window  Help      PROMPT
╔═[■]═CPU 80486═══════════════════════════════════════════════╤═══════1════[]═╗
║  cs:1488E80000         call   148B                         │  ax 0000   │c=0║
║  cs:148B 5E             pop    si                           │  bx 0000   │z=0║
║  cs:148C 83EE03         sub    si,0003                      │  cx 00FF   │s=0║
║  cs:148F 2E8984C706     mov    cs:[si+06C7],ax              │  dx 5F33   │o=0║
║  cs:1494 06             push   es                           │  si 0100   │p=0║
║  cs:1495 56             push   si                           │  di FFFE   │a=0║
║  cs:1496 33D2           xor    dx,dx                        │  bp 0000   │i=1║
║  cs:1498 B483           mov    ah,83                        │  sp FFFE   │d=0║
║  cs:149A CD21           int    21                           │  ds 5F33   │   ║
║  cs:149C 5E             pop    si                           │  es 5F33   │   ║
║  cs:149D 56             push   si                           │  ss 5F33   │   ║
║  cs:149E 81FA9019       cmp    dx,1990                      │  cs 5F33   │   ║
║  cs:14A2 746C           je     1510                         │  ip 1488   │   ║
║  cs:14A4 06             push   es                           │            │   ║
║  cs:14A5 0╔═[■]═Enter address to position to══════╗         │            │   ║
╟───────────║                                       ║─────────┼────────────┴───╢
║  ds:0000 C║  cs:100h                              ║           ss:0006 FEF0  ║
║  ds:0008 1║                                       ║         ■  ss:0004 9A00  ║
║  ds:0010 2║  OK ▄  Clip... ▄  Cancel ▄  Help ▄    ║         ▒  ss:0002 9FFF  ║
║  ds:0018 0║  ▀▀▀▀  ▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀    ║         ▒  ss:0000 20CD  ║
║  ds:0020 F╚═══════════════════════════════════════╝           ss:FFFE0000  ║
╚■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╧═══════════════─┘
 Enter item prompted for in dialog title
=== Cut ===



  4) Жмем комбинацию клавиш Alt+F10 для активизации PopUpMenu

=== Cut ===
  Ё  File  Edit  View  Run  Breakpoints  Data  Options  Window  Help       MENU
╔═[■]═CPU 80486═══════════════════════════════════════════════╤═══════1════[]═╗
║  cs:1488E80000         call   148B                         │  ax 0000   │c=0║
║  cs:148B 5E             pop    si                           │  bx 0000   │z=0║
║  cs:148C 83EE03         sub    si,0003                      │  cx 00FF   │s=0║
║  cs:148F 2E8984C706     mov    cs:[si+06C7],ax              │  dx 5F33   │o=0║
║  cs:1494 06             push   es                           │  si 0100   │p=0║
║  cs:1495 56             push   si                           │  di FFFE   │a=0║
║  cs:1496 33D2           xor    dx,dx                        │  bp 0000   │i=1║
║  cs:1498 B483           mov    ah,83                        │  sp FFFE   │d=0║
║  cs:149A CD21           int    21                           │  ds 5F33   │   ║
║  cs:149C 5E             pop    si                           │  es 5F33   │   ║
║  cs:149D ┌─────────────┐push   si                           │  ss 5F33   │   ║
║  cs:149E │ Goto...     │cmp    dx,1990                      │  cs 5F33   │   ║
║  cs:14A2 │ Search...   │je     1510                         │  ip 1488   │   ║
║  cs:14A4 │ Next        │push   es                           │            │   ║
║  cs:14A5 │ Change...   │push   cs                           │            │   ║
╟──────────│ Follow     │────────────────────────────────────┼────────────┴───╢
║  ds:0000 │ Previous    │9A F0 FE ═  Я ЪЁ■                     ss:0006 FEF0  ║
║  ds:0008 ├─────────────┤26 AE 01 Ёф)&о                   ■  ss:0004 9A00  ║
║  ds:0010 │ Display as │20 F2 11 )&АД Є                   ▒  ss:0002 9FFF  ║
║  ds:0018 │ Block      │FF FF FF                        ▒  ss:0000 20CD  ║
║  ds:0020 └─────────────┘FF FF FF                              ss:FFFE0000  ║
╚■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╧═══════════════─┘
 Manipulate a block of data
=== Cut ===



  5) Выбираем альтернативу Block

=== Cut ===
  Ё  File  Edit  View  Run  Breakpoints  Data  Options  Window  Help       MENU
╔═[■]═CPU 80486═══════════════════════════════════════════════╤═══════1════[]═╗
║  cs:1488E80000         call   148B                         │  ax 0000   │c=0║
║  cs:148B 5E             pop    si                           │  bx 0000   │z=0║
║  cs:148C 83EE03         sub    si,0003                      │  cx 00FF   │s=0║
║  cs:148F 2E8984C706     mov    cs:[si+06C7],ax              │  dx 5F33   │o=0║
║  cs:1494 06             push   es                           │  si 0100   │p=0║
║  cs:1495 56             push   si                           │  di FFFE   │a=0║
║  cs:1496 33D2           xor    dx,dx                        │  bp 0000   │i=1║
║  cs:1498 B483           mov    ah,83                        │  sp FFFE   │d=0║
║  cs:149A CD21           int    21                           │  ds 5F33   │   ║
║  cs:149C 5E             pop    si                           │  es 5F33   │   ║
║  cs:149D ┌─────────────┐push   si                           │  ss 5F33   │   ║
║  cs:149E │ Goto...     │cmp    dx,1990                      │  cs 5F33   │   ║
║  cs:14A2 │ Search...   │je     1510                         │  ip 1488   │   ║
║  cs:14A4 │ Next        │push   es                           │            │   ║
║  cs:14A5 │┌──────────┐ │push   cs                           │            │   ║
╟──────────││ Clear... ││────────────────────────────────────┼────────────┴───╢
║  ds:0000 ││ Move...  │ │9A F0 FE ═  Я ЪЁ■                     ss:0006 FEF0  ║
║  ds:0008 ├│ Set...   │─┤26 AE 01 Ёф)&о                   ■  ss:0004 9A00  ║
║  ds:0010 ││ Read...  ││20 F2 11 )&АД Є                   ▒  ss:0002 9FFF  ║
║  ds:0018 ││ Write... ││FF FF FF                        ▒  ss:0000 20CD  ║
║  ds:0020 └└──────────┘─┘FF FF FF                              ss:FFFE0000  ║
╚■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╧═══════════════─┘
 Write from a memory block to a disk file
=== Cut ===



  6)  В  открывшемся меню выбираем альтернативу Write и вводим имя файла, в
который будем скидывать дамп.

=== Cut ===
  Ё  File  Edit  View  Run  Breakpoints  Data  Options  Window  Help      PROMPT
╔═[■]═CPU 8048╔═[■]═══════════Enter write file name════════════════╗══1════[]═╗
║  cs:1488E80║                                                    ║0000   │c=0║
║  cs:148B 5E ║ File name                                          ║0000   │z=0║
║  cs:148C 83E║  damp.com                                 OK   ▄   ║00FF   │s=0║
║  cs:148F 2E8║                                         ▀▀▀▀▀▀▀▀   ║5F33   │o=0║
║  cs:1494 06 ║ Files              Directories                     ║0100   │p=0║
║  cs:1495 56 ║                     ..                  Cancel ▄   ║FFFE   │a=0║
║  cs:1496 33D║                                         ▀▀▀▀▀▀▀▀   ║0000   │i=1║
║  cs:1498 B48║                                                    ║FFFE   │d=0║
║  cs:149A CD2║                                          Help  ▄   ║5F33   │   ║
║  cs:149C 5E ║                                         ▀▀▀▀▀▀▀▀   ║5F33   │   ║
║  cs:149D 56 ║                                                    ║5F33   │   ║
║  cs:149E 81F║                                                    ║5F33   │   ║
║  cs:14A2 746║                                                    ║1488   │   ║
║  cs:14A4 06 ║                                                    ║       │   ║
║  cs:14A5 0E ║                                                    ║       │   ║
╟─────────────║                                                    ║───────┴───╢
║  ds:0000 CD ║                                                    ║0006 FEF0  ║
║  ds:0008 1D ║                                                    ║0004 9A00  ║
║  ds:0010 29 ║C:\TEST\                                            ║0002 9FFF  ║
║  ds:0018 01 ║                                                    ║0000 20CD  ║
║  ds:0020 FF ╚════════════════════════════════════════════════════╝FFFE0000  ║
╚■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╧═══════════════─┘
 Enter a file name
=== Cut ===



  7)  Вводим  смещение  начала  блока  дампа и длину блока. Лучше за начало
смещения  дампа  взять 100h, а за длину дампа размер файла в шестнадцатиричном
виде (который мы запомнили в пункте 1).

=== Cut ===
  Ё  File  Edit  View  Run  Breakpoints  Data  Options  Window  Help      PROMPT
╔═[■]═CPU 80486═══════════════════════════════════════════════╤═══════1════[]═╗
║  cs:1488E80000         call   148B                         │  ax 0000   │c=0║
║  cs:148B 5E             pop    si                           │  bx 0000   │z=0║
║  cs:148C 83EE03         sub    si,0003                      │  cx 00FF   │s=0║
║  cs:148F 2E8984C706     mov    cs:[si+06C7],ax              │  dx 5F33   │o=0║
║  cs:1494 06             push   es                           │  si 0100   │p=0║
║  cs:1495 56             push   si                           │  di FFFE   │a=0║
║  cs:1496 33D2           xor    dx,dx                        │  bp 0000   │i=1║
║  cs:1498 B483           mov    ah,83                        │  sp FFFE   │d=0║
║  cs:149A CD21           int    21                           │  ds 5F33   │   ║
║  cs:149C 5E             pop    si                           │  es 5F33   │   ║
║  cs:149D 56             push   si                           │  ss 5F33   │   ║
║  cs:149E 81FA9019       cmp    dx,1990                      │  cs 5F33   │   ║
║  cs:14A2 746C           je     1510                         │  ip 1488   │   ║
║  cs:14A4 06             push   es                           │            │   ║
║  cs:14A5 0E ╔═[■]══Enter memory address, count══════╗       │            │   ║
╟─────────────║                                       ║───────┼────────────┴───╢
║  ds:0000 CD ║  100h,1a54h                           ║         ss:0006 FEF0  ║
║  ds:0008 1D ║                                       ║       ■  ss:0004 9A00  ║
║  ds:0010 29 ║  OK ▄  Clip... ▄  Cancel ▄  Help ▄    ║       ▒  ss:0002 9FFF  ║
║  ds:0018 01 ║  ▀▀▀▀  ▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀    ║       ▒  ss:0000 20CD  ║
║  ds:0020 FF ╚═══════════════════════════════════════╝         ss:FFFE0000  ║
╚■▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒╧═══════════════─┘
 Enter item prompted for in dialog title
=== Cut ===



  8) Выходим из отладчика и... усе готово шеф! ;)