Сейчас на форуме: rmn, exp50848, _MBK_ (+8 невидимых)

 eXeL@B —› Основной форум —› ESET Confidence 2010 CrackMe
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 65.4 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 07 июня 2010 12:19
· Личное сообщение · #1

На конференции в Кракове был вот такой крякми:
2010.confidence.org.pl/esetcrackme.exe

Для запуска надо процессор с поддержкой: SSE2
Код проверки засунут в самодельную ВМ,
ребята из HISPASEC (virustotal) сделали серийник за 8 часов.



60f6_07.06.2010_CRACKLAB.rU.tgz - esetcrackme.exe




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 07 июня 2010 12:22 · Поправил: Coderess
· Личное сообщение · #2

Ооо, сейчас попробуем

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes





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

Создано: 07 июня 2010 12:33
· Личное сообщение · #3

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

ЗЫ у мну на него антивирь ругается

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




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 07 июня 2010 12:46
· Личное сообщение · #4

BoRoV пишет:
у мну антивирь

палишься




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

Создано: 07 июня 2010 12:52 · Поправил: BoRoV
· Личное сообщение · #5

вечное противостаяние каспера и нод, на всё нодовское ругается


много пикода как-то влом разбирать, ну хоть с битовыми инструкциями недавно прошол знакомство, а то бы и они пугали ))

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




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 07 июня 2010 13:30
· Личное сообщение · #6

Перевидите пожалуйста эту х*й*ю:


Hi resrever, I'm here to inform you that das ist nur ein Imitation und nicht richtig Prozedur~!!~!1`1`one!~!!~~!

Совсем забыл про Google. "это всего лишь имитация, а не правильный порядок".



Ранг: 65.4 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 07 июня 2010 13:37
· Личное сообщение · #7

лучше всего переводить на английский: "this is just an imitation and not correct procedure"



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 07 июня 2010 13:44
· Личное сообщение · #8

Ага, я уже заметил, что их там две.




Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 07 июня 2010 15:48
· Личное сообщение · #9

Там md2 хэш имени сравнивается, можно просто сбрутить, но это долго.

-----
Nulla aetas ad discendum sera




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 07 июня 2010 16:10
· Личное сообщение · #10

Flint
Нельзя сбрутить 128 бит. Там надо просто получить алгоритм преобразования серийника в строку, которая должна равняться хэшу.

BoRoV пишет:
много пикода

Это всего лишь обман, есть КОП для пропуска мусора.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 07 июня 2010 18:44
· Личное сообщение · #11

int пишет:
есть КОП для пропуска мусора


да не мусор там прокидывается, а группа команд если бит нулевой

например
Code:
  1. Move bit X1B1=>VB1 in V
  2. Check bit 1 in V and skip if zero
  3. Set bit 5 in V
  4. Compliment bit 5 in V
  5. Move bit X10B0=>VB1 in V
  6. Move bit VB5=>X10B0 in V
  7. Move bit B1=>B5 in V
  8. Move bit X10B1=>VB1 in V
  9. Move bit VB5=>X10B1 in V
  10. Move bit B1=>B5 in V
  11. Move bit X10B2=>VB1 in V
  12. Move bit VB5=>X10B2 in V
  13. Move bit B1=>B5 in V
  14. Move bit X10B3=>VB1 in V
  15. Move bit VB5=>X10B3 in V
  16. Move bit B1=>B5 in V
  17. Move bit X10B4=>VB1 in V
  18. Move bit VB5=>X10B4 in V
  19. Move bit B1=>B5 in V
  20. Move bit X10B5=>VB1 in V
  21. Move bit VB5=>X10B5 in V
  22. Move bit B1=>B5 in V
  23. Move bit X10B6=>VB1 in V
  24. Move bit VB5=>X10B6 in V
  25. Move bit B1=>B5 in V
  26. Move bit X10B7=>VB1 in V
  27. Move bit VB5=>X10B7 in V
  28. Move bit B1=>B5 in V
  29. Move bit X10B8=>VB1 in V
  30. Move bit VB5=>X10B8 in V
  31. Move bit B1=>B5 in V
  32. Move bit X10B9=>VB1 in V
  33. Move bit VB5=>X10B9 in V
  34. Move bit B1=>B5 in V
  35. Move bit X10B10=>VB1 in V
  36. Move bit VB5=>X10B10 in V
  37. Move bit B1=>B5 in V
  38. Move bit X10B11=>VB1 in V
  39. Move bit VB5=>X10B11 in V
  40. Move bit B1=>B5 in V
  41. Move bit X10B12=>VB1 in V
  42. Move bit VB5=>X10B12 in V
  43. Move bit B1=>B5 in V
  44. Move bit X10B13=>VB1 in V
  45. Move bit VB5=>X10B13 in V
  46. Move bit B1=>B5 in V
  47. Move bit X10B14=>VB1 in V
  48. Move bit VB5=>X10B14 in V
  49. Move bit B1=>B5 in V
  50. Move bit X10B15=>VB1 in V
  51. Move bit VB5=>X10B15 in V
  52. Move bit B1=>B5 in V
  53. Move bit X10B16=>VB1 in V
  54. Move bit VB5=>X10B16 in V
  55. Move bit B1=>B5 in V
  56. Move bit X10B17=>VB1 in V
  57. Move bit VB5=>X10B17 in V
  58. Move bit B1=>B5 in V
  59. Move bit X10B18=>VB1 in V
  60. Move bit VB5=>X10B18 in V
  61. Move bit B1=>B5 in V
  62. Move bit X10B19=>VB1 in V
  63. Move bit VB5=>X10B19 in V
  64. Move bit B1=>B5 in V
  65. Move bit X10B20=>VB1 in V
  66. Move bit VB5=>X10B20 in V
  67. Move bit B1=>B5 in V
  68. Move bit X10B21=>VB1 in V
  69. Move bit VB5=>X10B21 in V
  70. Move bit B1=>B5 in V
  71. Move bit X10B22=>VB1 in V
  72. Move bit VB5=>X10B22 in V
  73. Move bit B1=>B5 in V
  74. Move bit X10B23=>VB1 in V
  75. Move bit VB5=>X10B23 in V
  76. Move bit B1=>B5 in V
  77. Move bit X10B24=>VB1 in V
  78. Move bit VB5=>X10B24 in V
  79. Move bit B1=>B5 in V
  80. Move bit X10B25=>VB1 in V
  81. Move bit VB5=>X10B25 in V
  82. Move bit B1=>B5 in V
  83. Move bit X10B26=>VB1 in V
  84. Move bit VB5=>X10B26 in V
  85. Move bit B1=>B5 in V
  86. Move bit X10B27=>VB1 in V
  87. Move bit VB5=>X10B27 in V
  88. Move bit B1=>B5 in V
  89. Move bit X10B28=>VB1 in V
  90. Move bit VB5=>X10B28 in V
  91. Move bit B1=>B5 in V
  92. Move bit X10B29=>VB1 in V
  93. Move bit VB5=>X10B29 in V
  94. Move bit B1=>B5 in V
  95. Move bit X10B30=>VB1 in V
  96. Move bit VB5=>X10B30 in V
  97. Move bit B1=>B5 in V
  98. Move bit X10B31=>VB1 in V
  99. Move bit VB5=>X10B31 in V
  100. Move bit B1=>B5 in V


что преобразуется в
if(X[1] & (1 << 1)) {
X[10] <<= 1;
X[10] &= ~1;
}

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 07 июня 2010 18:54
· Личное сообщение · #12

OKOB
Да я уже понял сам, вообще я забил на крякми, есть чем заняться и без него.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 08 июня 2010 10:23
· Личное сообщение · #13

int пишет:
Hi resrever, I'm here to inform you that das ist nur ein Imitation und nicht richtig Prozedur~!!~!1`1`one!~!!~~!

странная фраза, половина на английском, половина на немецком, да ещё и с кучей ошибок
уж на русском бы тогда оставили

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 10 июня 2010 17:46 · Поправил: OKOB
· Личное сообщение · #14

Name: CRACKLAB FOREVER
RegNum: 355DFC764BAB52114D471089D54A6CCD

Кто нибудь еще трудится над... дабы я своими повествованиями не испортил праздник.

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 10 июня 2010 19:02 · Поправил: OKOB
· Личное сообщение · #15

Ядром и основной заморочкой крэкми является код под виртуальной машиной.

Общая характеристика виртуальной машины:
- команд - 8
- рабочие переменные - есть
- контекст - нет
- собственный стек - нет

Формат команд:
опкод команды - старшие 3 бита (15..13)
111-1110000000000
543-2109876543210
-----------------
000-xxxxxxxxxxxxx - без операндов
опкод 1,2,3 - унарная операция
001-xxxxxxxxxxIII - номер бита рабочей переменной V (2..0) III
010-xxxxxxxxxxIII
011-xxxxxxxxxxIII
опкод 4,5 - бинарная операция
100-xxxxOOOxxxIII - номер бита рабочей переменной V (2..0) III; номер бита рабочей переменной V (8..6) OOO
101-xxxxOOOxxxIII
опкод 6,7 - бинарная операция
110-XXXXXYYYYYIII - номер бита рабочей переменной V (2..0) III; смещение двойного слова в памяти относительно базы (12..8) ХХХХХ; номер бита двойного слова в памяти (7..3) YYYYY
111-XXXXXYYYYYIII

Команды:
0 - выбрасывание двойного слова из стека (esp+4) -> EXIT/ENDIF
1 - проверка состояния бита в рабочей переменной и проброс группы команд если бит 0 -> IF(V.bit)
2 - инверсия (дополнение) значения бита в рабочей переменной -> NOT V.bit
3 - установка значения бита в рабочей переменной в 1 -> SET V.bit
4 - логическое И значений битов в рабочей переменной -> AND V.bit2, V.bit1
5 - передача значения бита в рабочей переменной -> MOV V.bit2, V.bit1
6 - передача значения бита из памяти в рабочую переменную -> MOV V.bit1, X[].bit2
7 - передача значения бита из рабочей переменной в память -> MOV X[].bit2, V.bit1

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 10 июня 2010 21:08
· Личное сообщение · #16

=) млин выложил бы под паролем , а потом бы уже по запросу пароль скинул, тогда уже кейген и полный ход разбора в виде статьи давай)

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 10 июня 2010 21:31
· Личное сообщение · #17

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

mak пишет:
в виде статьи давай

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

Инфы этой ой как мало для получения номера ибо команд пикода там больше 195000, а разнообразие всего семь (описанные выше)

Так что заняться есть чем. Ожидаются предложения по методам распарсивания пикода.

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 10 июня 2010 22:08
· Личное сообщение · #18

Ну да согласен , толку от этого не много , но если уже прогнал вм пару раз и вникнул , то разбирать интереснее когда нет инфы по командам , тем более тут интерес большой , так как тут тип Hybrid Virtual Machine , куда входит MACRO и MICRO вариации , основные черты , малый набор команд , большое количество пикода , выполнение каждой команды в виде последовательности микро операций, также команда может выполнять много действий , зависит от реализации, это один из самый сложных типов вм, материала по этому вообще с гулькин нос , ну ладно уж) .. поэтому статью в народ =) ... это важная инфа , и классный крэкми.


Code:
  1. .text:004015C5 Load_Command:                           ; CODE XREF: Command_Table_Switch_VM+16j
  2. .text:004015C5                 xor     ByteCode, ByteCode ; ochistka mesta bytecoda
  3. .text:004015C7                 lodsw                   ; sagruska byte coda i raschet perehoda po nigney malenkoy tablise
  4. .text:004015C9                 mov     offset, ByteCode
  5. .text:004015CB                 mov     maske, ByteCode
  6. .text:004015CD                 shr     offset, 13      ; Rascodirovka Bytecoda 2 Rasa s MASK
  7. .text:004015D0                 and     maske, 7
  8. .text:004015D3                 call    Command_Table_Multi[offset*4]
  9. .text:004015DA                 jmp     short Load_Command
  10. .text:004015DA Command_Table_Switch_VM endp
  11. .text:004015DA
  12. .text:004015DA ; ---------------------------------------------------------------------- -----
  13. .text:004015DC Command_Table_Multi dd offset ADD_Stack ; DATA XREF: Command_Table_Switch_VM+Fr
  14. .text:004015DC                                         ; Call switch table used at 004015D3
  15. .text:004015E0                 dd offset BT_PROC
  16. .text:004015E4                 dd offset BTC
  17. .text:004015E8                 dd offset BTS
  18. .text:004015EC                 dd offset ByteCode_BTcomplexTableSwitch
  19. .text:004015F0                 dd offset ByteCode_BTcomplexTableSwitch
  20. .text:004015F4                 dd offset Decode_Buffer_Key
  21. .text:004015F8                 dd offset Decode_Buffer_Key


-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




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

Создано: 11 июня 2010 18:58 · Поправил: white_rabbit
· Личное сообщение · #19

Российский ESET опубликовал описание по теме у себя в блоге на хабре (http://habrahabr.ru/company/eset/blog/96263/).

white_rabbit
e967ddaa9381d3e4a00443e8c8867d80




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 11 июня 2010 20:22 · Поправил: OKOB
· Личное сообщение · #20

Глянул блог.

Порадовало.
Цитаты из блога
1) имеет в своем распоряжении 8 псевдорегистров, назовем их условно: rA, rB, rC, rD, rE, rF, rG, rH. Каждый регистр имеет размер 1 бит.

2) Мы дали название командам, похожие на уже знакомые нам аналоги из x86 ассемблера.

3) и далее команды типа mov rB,0ABh или mov 9, rG


4) также команда jz <имя_регистра> – команда условной передачи управления (если содержимое регистра равно 0, то осуществляется передача управления следующей процедуре (процедуры расположены в памяти последовательно)); которая не определяет адреса перехода, но содержит проверяемое условие (x86 jz - zero flag - условие косвенно в мнемонике, VM jz - переход если zero значение операнда).

5) ret — завершение работы виртуальной машины; а как-же подъем после выполнения тела IF

ЗЫ:
6) Набор поддерживаемых команд является следующим:
ret — завершение работы виртуальной машины;
set <имя_регистра> – установить значение регистра в единичное состояние;
jz <имя_регистра> – команда условной передачи управления (если содержимое регистра равно 0, то осуществляется передача управления следующей процедуре (процедуры расположены в памяти последовательно));
and <имя_регистра1>, < имя_регистра2> – логическая операция, результат сохраняется в первом регистре;
mov <имя_регистра1>, <имя_регистра2> – скопировать содержимое второго регистра в первый;
mov <имя_регистрa, <адрес> – скопировать содержимое памяти (бит) по заданному адресу в заданный регистр;
mov <адрес>, <имя_регистра> – скопировать содержимое заданного регистра (бит) по заданному адресу в памяти
пропущена одна команда с опкодом 2

7) Данная виртуальная машина осуществляет преобразование содержимого памяти, в соответствии с управляющей последовательностью (которую как раз и нужно найти), которая так же располагается в памяти:
начало памяти + 0x00: управляющая последовательность (16 байт)
начало памяти + 0x10: хэш-значение от введённого имени(16 байт)
начало памяти + 0x20: зашифрованное хэш-значение (16 байт)
начало памяти + 0x30: результат преобразования функции виртуальной машины (16 байт)

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

8) в формате команды откуда-то взялись биты 18..12; адрес блока памяти сдвинутый на 2 бита влево и это при команде в коде обработчика виртуальной машины lea ebx, dword_462884[ebx*4]. да к тому же маска для выделения поля команды 1F00h.
.text:00401685 and ebx, 1F00h
и как команда
.text:0040168E and eax, 0F8h
может выделить поле в команде --- биты 3..8???

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 11 июня 2010 20:34
· Личное сообщение · #21

OKOB пишет:
5) ret — завершение работы виртуальной машины; а как-же подъем после выполнения тела IF

Это одновременно ExitVM и EndIF, зачем придираться?

На счёт регистров - ну мало ли какая у них там трава.




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 11 июня 2010 20:49
· Личное сообщение · #22

Это еще не трава

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

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

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 12 июня 2010 00:11
· Личное сообщение · #23

ESET Russia:
Для более удобного разбора байт-кода команд выполняемых виртуальной машиной мы написали процессорный модуль для дизассемблера IDA Pro, который сильно упростил нам дальнейший анализ.

Из пушки по воробьям.

А мы обошлись скриптом ИДА.

Исполнять в ИДА после распаковки кода, например при остановке на входе в ВМ.

.text:004013F4 mov esi, offset PICODE
.text:004013F9 call VM_ENTRY

Будет сгенерирован листинг кода ВМ -- VM_CRME.LOG более 5 метров.


6ea3_11.06.2010_CRACKLAB.rU.tgz - !vm_crackme.idc

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 12 июня 2010 01:48
· Личное сообщение · #24

OKOB пишет:
мы написали процессорный модуль


на что, по видимому, и ушло семь часов из восьми




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 12 июня 2010 08:53
· Личное сообщение · #25

Gideon Vi пишет:
ушло семь часов из восьми


V0ldemAr пишет:
ребята из HISPASEC (virustotal) сделали серийник за 8 часов.


Поляки мне написали, когда я им отправил решение, что победители справились за 3,5 часа...

"Nice work We hope you enjoyed reversing this file.
The winners were Gynvael Coldwind and Jooru, it took them 3,5h to find a proper username and password."

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

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 65.4 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 12 июня 2010 10:43
· Личное сообщение · #26

OKOB пишет:
Поляки мне написали, когда я им отправил решение, что победители справились за 3,5 часа...


Я написал 8 часов потому что они двое делали, и на крнференции я слышал что они сделали за 4 часа, но если тебе так ответили пусть будет ;)




Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 16 июня 2010 12:01
· Личное сообщение · #27

И так мы имеем следующие три команды:
2 - инверсия (дополнение) значения бита в рабочей переменной -> NOT V.bit (в С нотации ~V.bit)
3 - установка значения бита в рабочей переменной в 1 -> SET V.bit
4 - логическое И значений битов в рабочей переменной -> AND V.bit2, V.bit1 (в С нотации V.bit2 & V.bit1)

Что из них можно еще накрутить?
1) CLEAR V.bit
CLEAR V.bit = ~(SET V.bit) = ~1 = 0

2) OR V.bit2, V.bit1
используем правила де Моргана (http://ru.wikipedia.org/wiki/Законы_де_Моргана)
OR V.bit2, V.bit1 = ~(~V.bit2 & ~V.bit1) = V.bit2 | V.bit1

3) XOR V.bit2, V.bit1
оно же сложение по модулю 2 (http://ru.wikipedia.org/wiki/Сумма_по_модулю_два)
XOR V.bit2, V.bit1 = (V.bit2 | V.bit1) & (~V.bit2 | ~V.bit1) = V.bit2 ^ V.bit1
используем уже описанное выше OR

4) SHL X[], 1
раскладка опрации на "микро"-команды в посте #11

5) ADD X2[], X1[]
при наличии сложения по модулю 2 не вопрос. CFp - перенос из предыдущего разряда в текущий
CFn - перенос из текущего разряда в следующий

bit2 = bit1 ^ bit2 ^ CFp
CFn = ((bit2 ^ bit1) & CFp) ^ (bit2 & bit1)

6) MUL X2[], X1[]
реализуется используя IF(V.bit), SHL и ADD

а уже из этих команд и собран весь алго проверки серийного номера

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 16 июня 2010 22:14
· Личное сообщение · #28

OKOB
Прикладываю мой вариант лога.
Команда CLEAR видна сразу:

SET (var.bit5)
NOT (var.bit5)

Далее команда OR тоже распознаётся легко:

NOT (var.bit1)
NOT (var.bit3)
AND (var.bit1), (var.bit3)
NOT (var.bit1)

Но я не врубаюсь с этим XOR...не могу найти последовательность микрокоманд подходящую. Ты не мог бы привести кусок лога (желательно моего - он более понятный )?

e919_16.06.2010_CRACKLAB.rU.tgz - eset_vm.rar

-----
the Power of Reversing team




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 17 июня 2010 00:39
· Личное сообщение · #29

DillerInc

В самом начале лога дважды:
XOR var.bit1, var.bit6
Code:
  1. MOV (var.bit4), (var.bit1)
  2. NOT (var.bit4)
  3. AND (var.bit4), (var.bit6)
  4. MOV (var.bit7), (var.bit6)
  5. NOT (var.bit7)
  6. AND (var.bit7), (var.bit1)
  7. MOV (var.bit1), (var.bit4)
  8. MOV (var.bit3), (var.bit7)
  9. NOT (var.bit1)
  10. NOT (var.bit3)
  11. AND (var.bit1), (var.bit3)
  12. NOT (var.bit1)

XOR var.bit2, var.bit1
Code:
  1. MOV (var.bit4), (var.bit2)
  2. NOT (var.bit4)
  3. AND (var.bit4), (var.bit1)
  4. MOV (var.bit7), (var.bit1)
  5. NOT (var.bit7)
  6. AND (var.bit7), (var.bit2)
  7. MOV (var.bit2), (var.bit4)
  8. MOV (var.bit3), (var.bit7)
  9. NOT (var.bit2)
  10. NOT (var.bit3)
  11. AND (var.bit2), (var.bit3)
  12. NOT (var.bit2)

Итого формула иная, чем дал OKOB - ¬((¬(A /\ ¬B)) /\ (¬(¬A /\ B))) = {закон де-Моргана} = (A /\ ¬B) \/ (¬A /\ B) = A B

Займитесь лучше вмпротом




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 17 июня 2010 12:05
· Личное сообщение · #30

int, благодарю.
Формула - ¬((¬(A ^ ¬B)) ^ (¬(¬A ^ B))) - то, что надо.

-----
the Power of Reversing team



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


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