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

 eXeL@B —› Протекторы —› Декомпилятор ВМ
<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >>
Посл.ответ Сообщение


Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 03 марта 2010 12:33
· Личное сообщение · #1

Вашему вниманию предлагаются наработки по декомпиляции ВМ.
Проект на сегодняшний день для меня завершен, но жаль если результат "ляжет на полку", может кому-нибудь и пригодится. Предлагаю сначала ознакомиться с обзором, и если будет интерес то могу выложить и сам плагин, или здесь или в личку заинтересованным лицам, каким образом, пока ещё не решил...
Но если кто-либо ожидает увидеть "автоматическое чудо", то сразу скажу - его нет. Для того чтобы получить результат нужна ручная предварительная работа:
- с исследуемой программы должна быть снята упаковка
- точки входа в ВМ находятся вручную
- возможно неоднократное "жамкание" клавиш в OllyDbg, а возможно и модификация кода, чтобы попасть в нужное место, в зависимости от защищенной функции
- необходимо вручную прицепить к программе требуемый секцию
- запись результатов в файл это тоже ручная работа, но уже более приятная

Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии.

ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал.

9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar

-----
Everything is relative...





Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 14 апреля 2012 20:11
· Личное сообщение · #2

Vamit пишет:
некоторые версии/реализации вмпрота вообще меняют код в этих точках,

пример плиз




Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 14 апреля 2012 20:13
· Личное сообщение · #3

вообще-то наверное можно это сделать скриптом - то есть вытащить брекпойнты на поспонед метки




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 14 апреля 2012 22:36
· Личное сообщение · #4

r99
Вот было написано полтора года назад:

Создано: 3 ноября 2010 16:11:00 · Поправил: Vamit
· Личное сообщение · Правка · Стереть #6

Разобрана последняя опция ВмПротекта - Проверка целостности кода

Этот алгоритм запускается перед выходом из ВМ для вызова процедуры CALL. Сначала в стек помещаются три адреса (всё это делается под ВМ):
1. Адрес возврата в следующую секцию ВМ после отработки процедуры.
2. Адрес обфускированного кода в котором осуществляется вызов процедуры.
3. Адрес обфускированного кода в котором выполняется дешифрация ресистров CPU.
Делается это следующим образом (сокрытие констант не учитываю):
- адрес 1 непосредственно записывается в стек
- производится восстановление начального кода по этому адресу
Code:
01ABEDDC: rvm_хх = 0x01A1CB84 // адрес
01ABEE59: [rvm_хх] = 0x68
01ABEF49: [rvm_хх + 1] = 0x32A8E094
01ABF012: [rvm_хх + 5] = 0xE8
01ABF116: [rvm_хх + 6] = 0xFFFF9500

- адрес 2 непосредственно записывается в стек
- этот адрес модифицируется, если CRC неправильная или не модифицируется, если CRC правильная, следующим образом:
а). берется случайное число
Code:
01AB6B09: rdtsc
01AB6B8F: xor eax, 0xA221
01AB6CAE: div eax, 0x0056
01AB6D45: mul edx, 0x0009

б). берутся параметры проверки кода и считается CRC
Code:
01AB6E2E: svm_134 = 0x01A16F39 // адрес структур
01AB6E3F: rvm_0C = eax + svm_134 // адрес кодированного адреса проверяемого кода, eax из пункта а)
01AB6EFF: svm_143 = rvm_0C + 4 // адрес длины кода
01AB702E: svm_155 = xor [rvm_0C], 0x03447E8F // декодирование адреса проверяемого кода
01AB7050: svm_157 = crc svm_155, [svm_143] // параметры: адрес кода и его длина (байт)

в). к CRC прибавляется константа из структуры
Code:
01AB709B: svm_161 = rvm_0C + 5 // адрес константы
01AB70A6: svm_162 = svm_157 + [svm_161]

г). полученный результат svm_162 (при правильной CRC он равен нулю) прибавляется к адресу 2.
- повторяются все теже действия с адресом 2 для адреса 3 (значение адреса структур другое и конечно же случайное число другое)
- перед выходом из ВМ хешируются все регистры CPU
- осуществляется выход из ВМ на адрес 3
- выполнение кода по адресу 3 - расхеширование регистров
- выполнение кода по адресу 2 - вызов требуемой функции
- выполнение кода по адресу 1 - вход в новую секцию ВМ

Надеюсь написал понятно...

-----
Everything is relative...

А прога из которой это взято выкладывалась вместе со Свипером примерно в то же время.

-----
Everything is relative...


| Сообщение посчитали полезным: r99


Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 15 апреля 2012 08:46 · Поправил: r99
· Личное сообщение · #5

примерно такой скрипт мне помогает

cc94_09.07.2012_EXELAB.rU.tgz - vmm2bp.zip




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 30 сентября 2012 17:48
· Личное сообщение · #6

А если не дошло до создания секции финал, что тогда делать?

-----
Лучше быть одиноким, но свободным © $me





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 01 октября 2012 15:58
· Личное сообщение · #7

BoRoV
Тогда найти причину почему не дошло, в принципе функции можно декомпилить кусками (от входа в вм до выхода из неё), а затем эти куски склеивать вручную, конечно, всё это геморно, но при восстановлении кода одной проги мне попались под вмпротом MMX инструкции, которые Олькин асм/дизасм вообще не распознает - пришлось декомпилить кусками, но в итоге восстановленные функи получились работоспособными...
Ещё можно поиграть опциями декомпиля и границами секций вм и кода.

-----
Everything is relative...





Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 октября 2012 16:08
· Личное сообщение · #8

Vamit, а как это сделать если причиной того, что декомпиляция не доходит до создания финальной секции является то, что олька просто закрывается во время декомпиляции (это происходит не только у меня и не только на моей программе).

-----
Лучше быть одиноким, но свободным © $me


| Сообщение посчитали полезным: schokk_m4ks1k


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 01 октября 2012 17:40
· Личное сообщение · #9

Vamit
отпишись PM, уже месяц тебя вылавливаю...

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 10:16
· Личное сообщение · #10

Новая версия VMSweeper v1.5 beta 2

VmProtect
Добавлено:
1. Обработчик "пустого" выхода из ВМ.
2. Декомпиляция табличных переходов (switch конструкции).
3. Обработка невиртуализованной инструкции sbb.

BoRoV
Попробуй последнюю версию...

-----
Everything is relative...


| Сообщение посчитали полезным: -Sanchez-, VodoleY, NikolayD, crc1, sendersu, daFix, huckfuck, vnekrilov, schokk_m4ks1k, _ruzmaz_, SReg, BoRoV, Gideon Vi, tihiy_grom, obfuskator, kioresk, m0bscene, Ultras


Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 02 октября 2012 13:22
· Личное сообщение · #11

Vamit пишет:
Попробуй последнюю версию...

Уже лучше, олька не закрывается, но возникает следующее на той же ф-ии.
Олька подвисает, но в хелпе сказано, что нужно подождать в таком случае, ну я ждал, ждал, ждал и через час у меня закончилось терпение. Открываю лог, а там следующая картина:
Code:
  1. ...
  2. ++++++++++++++++++++++++++++++++++++
  3.   Section a07 remove rvm1 (zone 27)
  4. ++++++++++++++++++++++++++++++++++++
  5.  
  6. 00171C9C: rvm_00 = iEDI
  7. 00171D3E: [0x0065A010] = rvm_00
  8.  
  9.  
  10. ++++++++++++++++++++++++++++++++++++
  11.   Section a02 (zone 27)
  12. ++++++++++++++++++++++++++++++++++++
  13.  
  14.  
  15.  
  16. ++++++++++++++++++++++++++++++++++++
  17.   Section a02 (zone 27)
  18. ++++++++++++++++++++++++++++++++++++
  19. ...

И так еще ~300000 пустых секций.

-----
Лучше быть одиноким, но свободным © $me




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 02 октября 2012 15:03
· Личное сообщение · #12

Хоть кто нить может быть сможет показать, как это вообще работает,м?
Я уже даже молчу о том, что в реальной программе вы такого бреда не увидите

ff04_02.10.2012_EXELAB.rU.tgz - Project.rar




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 15:18
· Личное сообщение · #13

SReg
Хоть кто нить может быть сможет показать, как это вообще работает,м?
Не понял вопрос, что показать? Как защиту вешать? (сужу по твоей картинке)

-----
Everything is relative...




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 02 октября 2012 15:22
· Личное сообщение · #14

Vamit
как код вытащить из под вм, пусть даже(!) такими опциями

| Сообщение посчитали полезным: schokk_m4ks1k

Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 02 октября 2012 16:26
· Личное сообщение · #15

Vamit пишет:
Новая версия VMSweeper v1.5 beta 2

можно под пароль?

а то уже совсем оборзели Ав-ники

Infection detail:

-- File: GraphConverter\PMBtoGDL.exe, Enclosure: VMSweeper15beta2.rar, malicious code name: PAK_Generic.001
The uncleanable file is deleted.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 16:27
· Личное сообщение · #16

SReg
Всё уже 200 раз расписано:
1. Находим ОЕП
2. Брякаемся на ней, Analyze all VM reference
3. Берем Postponed точку, доходим до неё
4. Давим F1
5. Если вм будет распознана, то начнется декомпиляция
6. Дальнейщее зависит от умений обращаться со Свипером и понимания процесса виртуализации.

-----
Everything is relative...




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 02 октября 2012 16:36
· Личное сообщение · #17

Vamit
да в том-то и дело что умений обращаться со свипером нет

вот я попытался прогу у SReg'a декомпильнуть. Посмотрите, всё ли правильно я понял ?
Code:
  1. ++++++++++++++++++++++++++++++++++++
  2.   Section a12 final
  3. ++++++++++++++++++++++++++++++++++++
  4.  
  5. 001500BC: pushfd 
  6. 001500C2: test efl, 0x00000100  //  efl - это стало быть дворд на esp
  7. 00150231: jz 0x00150393 - прыгаем на метку
  8. 001502F9: push ebx
  9. 00150040: popfd 
  10. 0015038E: jmp 0x8782E608
  11. 00150393: label_150393:
  12. 00150457: popfd 
  13. 00150510: call 0x00408E14 - маркер начала виртуализации
  14. 00150519: nop 
  15. 001505BB: rvm_3C = [ebp + 0xFFFFFFFC]   // дворд на [ebp-4] = $100
  16. 001505E1: edx = [ebp + 0xFFFFFFF8]   // дворд  на [ebp-8] = $200
  17. 00150610: sub edx, [ebp + 0xFFFFFFFC] //  (b-a) = ($200-$100) = $100
  18. 001505EB: push [ebp + 0xFFFFFFF8 + rvm_3C]  // тут предположим что (b+a) = $200 + $100 = $300 и тупо ложим полученное $300 в стек  (но запись какая-то непонятная, так что я просто предположил это <img src="http://exelab.ruimg/smilies/s1.gif" border="0" align="" alt=""> )
  19. 00150040: popfd 
  20. 001506D9: iEAX = imul edx, efl   // $100 * дворд в стеке = $100 * $300 = $30000
  21. 001506EE: rvm_34 = iEFL    //   
  22. 001506F7: edx = iEDX         //   = что за 3 записи  - я хз
  23. 001506FD: eax = iEAX         //
  24. 0015071F: [ebp + 0xFFFFFFF4] = eax  // ложим в [ebp-$C] полученный ранее результат
  25. 00150815: call 0x00408E1C   //маркер конца виртуализации
  26. 0015081E: nop 
  27. 0015081E: jmp 0x00408E50   //прыгаем на нормальный код





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 16:36
· Личное сообщение · #18

sendersu
Не верь глазам своим, да, файл упакован, но чист...

-----
Everything is relative...





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 16:42 · Поправил: Vamit
· Личное сообщение · #19

tihiy_grom
Да, всё правильно, получен почти чистый исходный код, небольшая ручная доводка и всё ОК.

001506D9: iEAX = imul edx, efl // $100 * дворд в стеке = $100 * $300 = $30000
001506EE: rvm_34 = iEFL //
001506F7: edx = iEDX // = что за 3 записи - я хз
001506FD: eax = iEAX

mul/div инструкции имеют результаты (iREG) в нескольких регистрах, которые затем могут использоваться или нет, в лог пишутся все результаты, а далее видно, что используется только eax

да в том-то и дело что умений обращаться со свипером нет
Если нет, то они приобретаются только желанием, а иногда и нелегким трудом...

-----
Everything is relative...




Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 02 октября 2012 17:05
· Личное сообщение · #20

Vamit пишет:
Если нет, то они приобретаются только желанием, а иногда и нелегким трудом...


Полностью согласен с Vamit. Сам столкнулся с одной программой, при восстановлении кода которой возникли сложности. Несколько раз проконсультировался с Vamit. И, в итоге, кое-что получилось. Просто нужно терпение и понимание того, что делается



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 02 октября 2012 17:07
· Личное сообщение · #21

Vamit пишет:
Если нет, то они приобретаются только желанием, а иногда и нелегким трудом...

146% согласен

но вот эта запись ...
Code:
  1. push [ebp + 0xFFFFFFF8 + rvm_3C]

логичнее было предположить, что в стек просто пушится какой-то дворд по адресу, полученному из этих трёх слагаемых

и вот как догадаться что на самом деле это последовательность двух команд?
Code:
  1. add [ebp-8], rvm_3C
  2. push результат_сложения


где можно почитать что за команды выводит свипер в лог?




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 17:52
· Личное сообщение · #22

tihiy_grom
Я уже это говорил, но повторю - основная проблема Свипера - распознавание соответствия регистров вм и ЦПУ. Здесь push [ebp + 0xFFFFFFF8 + rvm_3C] Свипер определил, что результат операции попал в регистр флагов, но так как операция прямого присвоения флагам отсутствует то присвоением им делается через push/pop
001505EB: push [ebp + 0xFFFFFFF8 + rvm_3C]
00150040: popfd
на самом деле здесь используется другой регистр, но вот какой определить затруднительно, иногда вручную приходится определять регистры методом исключения уже используемых...
Короче, чтобы правильно (100%) восстановить код функции с учетом всех регистров нужно отбросить последние секции после Свипера и делать это самим (руками и головой), начиная с первой полной (включающей все зоны) секции - это Section a09 remove antidump, если она есть или любая другая перед зонами регистров в конце лога
Code:
  1. ----------------------------------------------------
  2.  
  3. *** Zone bounds: 00150040 - 0015422F ***
  4. *** Regs Associations (zone 0) ***
  5. regs  pic dum ecx eax efl ebp edx ebx edx edi esi dmp off 
  6. in    r14 r28 r04 r20 r10 r30 r2C r18 r34 r24 r38 r1C r00 
  7. out   -   -   r14 r08 r34 r10 r1C r30 r38 r3C r20 -   -   
  8. spec  +   +   -   -   -   -   -   -   +   -   -   +   +


Для правильного определения соответствия регистров нужно знать:
1. Все регистры на входе в вм (файл EntryExit1_xxxxx.map)
2. Все регистры на выходе из вм (файл EntryExit1_xxxxx.map)
3. Все регистры на любых переходах и метках (файл Trans1_xxxxx.map)
а также иногда заглядывать в файл Reloc1_xxxxx.map и прыгать из него в основной trc файл для определения "ложного" регистра на переходах.

вот небольшой кусочек последовательности ручного восстановления регистров

Code:
  1. ?? -> ?? -> 04    eax       последовательность push в антидампе
  2. ?? -> ?? -> 1C    edx       efl - eax - ecx - edx - ebx
  3. ?? -> ?? -> 14    ecx
  4. ?? -> ?? -> 30    ebx
  5. 0C -> 20          esi
  6. 18 -> 3C                  edi
  7. 24 -> 10          ebp
  8. ?? -> ?? -> 28    efl
  9.  
  10. 00153DF8: mov     eax, [ebp + 8]                              ;08 eax
  11. 00154230: call    00404630
  12.  
  13. 34 -> eax
  14. 10 -> edx
  15. 30 -> ecx
  16. 3C -> ebx
  17. 14 -> esi
  18. 24 -> edi
  19. 20 -> ebp
  20. 00 -> efl
  21.  
  22. 001543A4: movzx   eax, byte ptr [ebp + 0Ch]       ;08 eax
  23. 001544AC: test    eax, eax
  24. 001547A1: jz      00162E51
  25.  
  26. 00154901: lea     ecx, [ebp + 0FFFFFDF0h]                     ;30 ecx
  27. 00154918: push    ecx
  28. 001562A6: call    00409C60
  29.  
  30. 2C -> eax
  31. 28 -> edx
  32. 24 -> ecx
  33. 1C -> ebx
  34. 04 -> esi
  35. 38 -> edi
  36. 3C -> ebp
  37. 30 -> efl

цифры - индексы регистров rvm

но если ещё учесть, что не все инструкции (в зависимости от их модификаций) могут быть девиртуализованы Свипером, то нужно ещё знать все шаблоны девиртуализации инструкций, чтобы сделать её вручную.
Итог простой - с наскока эту вм даже с наличием инструмента не взять...

где можно почитать что за команды выводит свипер в лог?
Где-то в теме я расписывал что и в каком файле и в какой секции лежит...

-----
Everything is relative...




Ранг: 31.0 (посетитель), 70thx
Активность: 0.140
Статус: Участник

Создано: 02 октября 2012 18:00
· Личное сообщение · #23

Vamit пишет:
Где-то в теме я расписывал что и в каком файле и в какой секции лежит...

ты не мог бы продублировать, если не трудно конечно) спасибо)




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 октября 2012 18:11
· Личное сообщение · #24

schokk_m4ks1k
Отлистать 5 страниц, начиная с последней слабо? Даже искать ничего не нужно - статьи хорошо видно в тексте. С таким отношением о вмпроте можно забыть...
https://ssl.exelab.ru/f/action=vthread&forum=13&topic=15906&page=8#19

-----
Everything is relative...




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 02 октября 2012 21:11
· Личное сообщение · #25

Vamit пишет:
Не верь глазам своим, да, файл упакован, но чист...

верю 120%!!
но ведь АВ удаляет! и я лишь получаю уведомление.
удаляет прокси сервер + АВ что на нем пашет, на входе (не на моем компе конечно)
можно на будущее под пас?



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 01 ноября 2012 18:21 · Поправил: Kuzya69
· Личное сообщение · #26

А что делать если свипер ругается на:
" Incorrect handler address - 00471123 ! "
Посмотрев таблицу хендлеров действительно обнаружил 3 штуки. Причем начало хендлера по этому адресу, а продолжение в области ВМ,
ну и переход в главный цикл этой ВМ.




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 01 ноября 2012 19:40 · Поправил: Vamit
· Личное сообщение · #27

Kuzya69
Такое сообщение он выдает только в том случае, если адрес обработчика (00471123) не принадлежит ни сегменту кода ни сегменту вм. Задай правильно в Свипере границы сегментов и ругаться перестанет. В твоем случае этот адрес должен входить в сегмент кода.

-----
Everything is relative...




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 01 ноября 2012 20:01 · Поправил: Kuzya69
· Личное сообщение · #28

Vamit
Ну я по другому поступил. Нашел пустую зону в области ВМ. И перенес туда эти 5 строк из зоны основного
кода. А в таблице хенндлеров пересчитал адреса на эту пустую зону. Просто та зона и является зоной
кода. Пересекутся тогда.
Щас пытаюсь понять, что у меня получилось.
Трудно в первый раз разбираться в незнакомых аббревиатурах.
У меня кстати выскакивают такие сообщения по очереди, везде "да" надо отвечать?

c08b_01.11.2012_EXELAB.rU.tgz - Message Sweeper.JPG




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 01 ноября 2012 21:25
· Личное сообщение · #29

Kuzya69
Насчет сообщений, первое говорит о том, что Свипер обнаружил пакетный вызов функций (из одной виртуализованной вызывается другая виртуализованная без выхода из вм), если ответить "Да", то Свипер тело вызываемой функи декомпилирует и вставит внутрь вызывающей, если ответить нет то Свипер оформит вызов функи через call <адрес в вмпроте> и вызываемую декомпилить не будет. Но отдельно тело вызываемой (пакетной) функи в теле проги имеется, только найти его нужно будет самостоятельно, т.к. отдельно оно уже не вызывается.
Второе сообщение к Свиперу вообще не относится.

-----
Everything is relative...




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 01 ноября 2012 21:39 · Поправил: Kuzya69
· Личное сообщение · #30

Вроде больше и ошибок никаких не было, и перезагрузиться Свипер не предлагал. Вроде как все тип-топ.
Просто все стоит как-будто закончилось.
Но в логе последние только "Section a04".
Я так понимаю, надо Свипер как-то подтолкнуть, чтоб дальше декомпилил?
Или это надо теперь на "внутренний калл", на который ругался, свипер переключать, а потом продолжать эту вм декомпилить?




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 01 ноября 2012 21:46
· Личное сообщение · #31

Kuzya69
Я телекинезом не владею, скинь пару файлов (log и trc) от декомпилируемой функи.
Сообщение последнее в строке статуса какое?

-----
Everything is relative...



<< 1 ... 9 . 10 . 11 . 12 . 13 . 14 . 15 . 16 . 17 . 18 . 19 ... 23 . 24 . >>
 eXeL@B —› Протекторы —› Декомпилятор ВМ
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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