Сейчас на форуме: Magister Yoda (+5 невидимых)

 eXeL@B —› Основной форум —› Zend Guard и битые опкоды.
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 апреля 2009 11:57 · Поправил: Dusky
· Личное сообщение · #1

В силу некоторых нужд пытаюсь написать дизассемблер опкодов, способный корректно работать с файлами, закодированными Zend Guard 5.
За основу был взят Vulcan Logic Disasembler.

После того, как удалось его заставить отображать хоть какие-то опкоды (это было легко, достаточно было подправить его так, чтобы он обрабатывал опкоды с не заданным номером строки) получилась следующая картина (фрагмент):
Code:
  1. Branch analysis from position: 0
  2. filename:       ***/index.php
  3. function name:  (null)
  4. number of ops:  454
  5. compiled vars:  !0 = $loaded, !1 = $config, !2 = $baseuri, !3 = $proposedDocumentRoot, !4 = $realDocumentRoot, !5 = $matches, !6 = $response, !7 = $e, !8 = $layoutFile, !9 = $user, !10 = $c, !11 = $router, !12 = $view, !13 = $mode, !14 = $siteId, !15 = $module, !16 = $controller, !17 = $action, !18 = $params, !19 = $classes, !20 = $file
  6. line     #  op                           fetch          ext  return  operands
  7. ----------------------------------------------------------------------  ---------
  8.    0     0  NOP
  9.          1  <205>
  10.          2  NOP
  11.          3  DO_FCALL_BY_NAME                              1
  12.          4  NOP
  13.          5  NOP
  14.          6  <205>
  15.          7  NOP
  16.          8  <205>
  17.          9  NOP
  18.         10  DO_FCALL_BY_NAME                              1
  19.         11  NOP
  20.         12  DO_FCALL_BY_NAME                              2
  21.         13  NOP
  22.         14  NOP
  23.         15  <205>
  24.         16  NOP
  25.         17  DO_FCALL_BY_NAME                              1
  26.         18  NOP
  27.         19  NOP
  28.         20  <205>
  29.         21  NOP
  30.         22  <205>
  31.         23  NOP
  32.         24  DO_FCALL_BY_NAME                              1
  33.         25  NOP
  34.         26  DO_FCALL_BY_NAME                              2
  35.         27  NOP
  36.         28  NOP
  37.         29  <205>
  38.         30  NOP
  39.         31  NOP
  40.         32  NOP
  41.         33  NOP
  42.         34  NOP
  43.         35  NOP
  44.         36  DO_FCALL_BY_NAME                              1
  45.         37  <205>
  46.         38  NOP
  47.         39  NOP
  48.         40  DO_FCALL_BY_NAME                              2

И дальше в таком же духе. Очевидно, что Zend Guard как-то портит опкоды, заменяя большинство из них на нули, а потом как-то восстанавливая.
Для сравнения пример дизассемблирования не зашифрованного файла:
Code:
  1. Branch analysis from position: 0
  2. Return found
  3. filename:       ***/test.php
  4. function name:  (null)
  5. number of ops:  17
  6. compiled vars:  !0 = $fp
  7. line     #  op                           fetch          ext  return  operands
  8. ----------------------------------------------------------------------  ---------
  9.    2     0  FETCH_R                      global              $0      '_GET'
  10.          1  FETCH_DIM_R                                      $1      $0, 'q'
  11.          2  SEND_VAR                                                 $1
  12.          3  <200>                                            $2
  13.          4  CONCAT                                           ~3      $2, '.js'
  14.          5  SEND_VAL                                                 ~3
  15.          6  SEND_VAL                                                 'r'
  16.          7  <200>                                            $4
  17.          8  ASSIGN                                                   !0, $4
  18.    3     9  SEND_VAR                                                 !0
  19.         10  SEND_VAL                                                 100000
  20.         11  <200>                                            $6
  21.         12  SEND_VAR_NO_REF                                          $6
  22.         13  <200>                                            $7
  23.         14  ECHO                                                     $7
  24.    4    15  RETURN                                                   1
  25.         16* ZEND_HANDLE_EXCEPTION

Видно невооруженным взглядом, что картина совсем иная и куда более внятная.

Всвязи с этим вопрос, каким образом Zend Guard бьет опкоды и исходя из чего их восстанавливает?



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 04 апреля 2009 17:27
· Личное сообщение · #2

forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=28533&start=200#lt deZender



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 апреля 2009 18:07 · Поправил: Dusky
· Личное сообщение · #3

yanus0 ни один из проверенных мною дезендеров не смог нормально раскодировать зазенденный файл с классом - код функций они не декодируют вообще никакой. Этот скорее всего относится к их числу, поскольку перепробовал я все, что нашел в паблике.

Кроме того, это не суть. Я хочу разобраться в механизме этой защиты и написать свой дизассемблер/декомпилер, такой, чтобы мне было удобно им пользоваться. Можно считать, что это такой упражнение для ума, чтоб не разжижался черезчур.



Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 04 апреля 2009 19:15
· Личное сообщение · #4

на nulled.ws поспрашивай, там народ тоже извращался в этом направлении...



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 05 апреля 2009 08:59
· Личное сообщение · #5

yanus0
спасибо, попробую. Но вопрос все же остается открытым.


 eXeL@B —› Основной форум —› Zend Guard и битые опкоды.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати