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

 eXeL@B —› Основной форум —› F-Secure Reverse Engineering Challenge
<< . 1 . 2 . 3 . 4 .
Посл.ответ Сообщение

Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 01 августа 2008 18:01
· Личное сообщение · #1

Очередной конкурс по реверсингу от F-Secure.

В подарки за призовые места обещаны айподы и экскурсия по их лаборатории.

в общем, всем кому интересно: www.khallenge.com/



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

Создано: 23 сентября 2008 22:04
· Личное сообщение · #2

Добрый вечер.

Знаю, что уже прошло соревнование, но вот есть
некоторые вопросы, не пойму как решить
первый уровень FSC08_Level1.exe,
хотя знаю, что проверка здесь
Code:
  1. 6900108A  |. 2BC2           SUB EAX,EDX 
  2. 6900108C  |. 83F8 04        CMP EAX,4 
  3. 6900108F  |. 0F85 95000000  JNZ FSC08_Le.6900112A 
  4. 69001095  |. 0FB615 0231006>MOVZX EDX,BYTE PTR DS:[69003102] 
  5. 6900109C  |. A0 00310069    MOV AL,BYTE PTR DS:[69003100] 
  6. 690010A1  |. 3005 D4300069  XOR BYTE PTR DS:[690030D4],AL 
  7. 690010A7  |. 3015 D6300069  XOR BYTE PTR DS:[690030D6],DL 
  8. 690010AD  |. 3005 D8300069  XOR BYTE PTR DS:[690030D8],AL 
  9. 690010B3  |. 0FB615 0331006>MOVZX EDX,BYTE PTR DS:[69003103] 
  10. 690010BA  |. 0FB605 0131006>MOVZX EAX,BYTE PTR DS:[69003101] 
  11. 690010C1  |. 3015 D7300069  XOR BYTE PTR DS:[690030D7],DL 
  12. 690010C7  |. 3005 D9300069  XOR BYTE PTR DS:[690030D9],AL 
  13. 690010CD  |. 8A0D D5300069  MOV CL,BYTE PTR DS:[690030D5] 
  14. 690010D3  |. 0FB615 0231006>MOVZX EDX,BYTE PTR DS:[69003102] 
  15. 690010DA  |. 0FB605 0331006>MOVZX EAX,BYTE PTR DS:[69003103] 
  16. 690010E1  |. 320D 01310069  XOR CL,BYTE PTR DS:[69003101] 
  17. 690010E7  |. 3015 DA300069  XOR BYTE PTR DS:[690030DA],DL 
  18. 690010ED  |. 3005 DB300069  XOR BYTE PTR DS:[690030DB],AL 
  19. 690010F3  |. 80F9 61        CMP CL,61 
  20. 690010F6  |. 880D D5300069  MOV BYTE PTR DS:[690030D5],CL 
  21. 690010FC  |. 75 2C          JNZ SHORT FSC08_Le.6900112A 
  22. 690010FE  |. 803D D7300069 >CMP BYTE PTR DS:[690030D7],79 
  23. 69001105  |. 75 23          JNZ SHORT FSC08_Le.6900112A 
  24. 69001107  |. 803D D8300069 >CMP BYTE PTR DS:[690030D8],32 
  25. 6900110E  |. 75 1A          JNZ SHORT FSC08_Le.6900112A 
  26. 69001110  |. 803D DA300069 >CMP BYTE PTR DS:[690030DA],30 
  27. 69001117  |. 75 11          JNZ SHORT FSC08_Le.6900112A 
  28. 69001119  |. 68 D4300069    PUSH FSC08_Le.690030D4                   ; ASCII 07,".5)p vh"
  29. 6900111E  |. 68 C8200069    PUSH FSC08_Le.690020C8                   ; ASCII 0A,"Congratula"
  30. 69001123  |. FFD6           CALL ESI 
  31. 69001125  |. 83C4 08        ADD ESP,8 
  32. 69001128  |. EB 0A          JMP SHORT FSC08_Le.69001134 
  33. 6900112A  |> 68 08210069    PUSH FSC08_Le.69002108                   ; ASCII 0A,"Sorry, thi"
  34. 6900112F  |. FFD6           CALL ESI


Заранее спасибо.



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

Создано: 23 сентября 2008 22:10
· Личное сообщение · #3

Coderess написал:
Code:
  1. EDX = Key[3] 
  2. AL = Key[1]
  3. Table[1] = Table[1] xor Key[1] 
  4. Table[3] = Table[3] xor Key[3] 
  5. Table[5] = Table[5] xor Key[1] 
  6. EDX = 34 
  7. EAX = 32 
  8. Table[4] = Table[4] xor Key[4]
  9. Table[6] = Table[6] xor Key[2]
  10. CL = Table[2]
  11. EDX = 3 
  12. EAX = 4 
  13. Table[2] = Table[2] xor Key[2] 
  14. Table[7] = Table[7] xor Key[3] 
  15. Table[8] = Table[8] xor Key[4]
  16. Table[2] = CL(Table[2] = Table[2] xor Key[2])


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




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

Создано: 24 сентября 2008 00:41 · Поправил: mak
· Личное сообщение · #4

=) чего там считать то 3 символа даже не менялись а один там по ходу видно , берешь калькулятор и ксоришь на обратное значение, все лежит в открытом виде. Даже анализ не надо , сразу в конце по выходу с него. 3 подряд проверки ...их ксоришь и в начале один символ.

Вот они 79 32 30 .... обратно ксором их и будет те первые символы. Или они там не попорядку шли не помню , но не важно. 4 символ выше проверка массивная типо

Code:
  1. 690010FC  |. 75 2C          JNZ SHORT FSC08_Le.6900112A  
  2. 690010FE  |. 803D D7300069 >CMP BYTE PTR DS:[690030D7],79  
  3. 69001105  |. 75 23          JNZ SHORT FSC08_Le.6900112A  
  4. 69001107  |. 803D D8300069 >CMP BYTE PTR DS:[690030D8],32  
  5. 6900110E  |. 75 1A          JNZ SHORT FSC08_Le.6900112A  
  6. 69001110  |. 803D DA300069 >CMP BYTE PTR DS:[690030DA],30


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





Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 24 сентября 2008 10:20
· Личное сообщение · #5

Да первое простое, вот кто б про второе и третье рассказал бы

-----
Лень - это подсознательная мудрость




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

Создано: 24 сентября 2008 12:49
· Личное сообщение · #6

mak не пойму как можно ксорить чтобы получить исходные значения?




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

Создано: 24 сентября 2008 13:15
· Личное сообщение · #7

каждый символэто результат ксора =) берешь 79 и ксоришь на то что ксорится твои введенный буквы ...это как уравнение математики x=79xor( парметр ксора не помню смотри сам) , где х это буква твоя введенная. Следовательно чтобы получить х не твою букву а правильную нужно 79 проксорить на число для ксора и получишь хекс значение правильной буквы =) , порядок букв там тоже легко просмотреть.

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





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

Создано: 24 сентября 2008 19:27 · Поправил: OKOB
· Личное сообщение · #8

To TheGrow
Берем код уже приведенный тобой.
Code:
  1. .text:69001076                 mov     eax, offset buffer
  2. .text:6900107B                 add     esp, 10h
  3. .text:6900107E                 lea     edx, [eax+1]
  4. .text:69001081
  5. .text:69001081 next:
  6. .text:69001081                 mov     cl, [eax]
  7. .text:69001083                 add     eax, 1
  8. .text:69001086                 test    cl, cl
  9. .text:69001088                 jnz     short next
  10. .text:6900108A                 sub     eax, edx
  11. .text:6900108C                 cmp     eax, 4
  12. .text:6900108F                 jnz     __bad
  13. .text:69001095                 movzx   edx, buffer+2
  14. .text:6900109C                 mov     al, buffer
  15. .text:690010A1                 xor     _07_xor_psw1, al
  16. .text:690010A7                 xor     _35_xor_psw3, dl
  17. .text:690010AD                 xor     _70_xor_psw1__32, al
  18. .text:690010B3                 movzx   edx, buffer+3
  19. .text:690010BA                 movzx   eax, buffer+1
  20. .text:690010C1                 xor     _29_xor_psw4__79, dl
  21. .text:690010C7                 xor     _20_xor_psw2, al
  22. .text:690010CD                 mov     cl, _2E_xor_psw2__61
  23. .text:690010D3                 movzx   edx, buffer+2
  24. .text:690010DA                 movzx   eax, buffer+3
  25. .text:690010E1                 xor     cl, buffer+1
  26. .text:690010E7                 xor     _76_xor_psw3__30, dl
  27. .text:690010ED                 xor     _68_xor_psw4, al
  28. .text:690010F3                 cmp     cl, 61h
  29. .text:690010F6                 mov     _2E_xor_psw2__61, cl ; 0x2E^0x61=0x4F ('O')
  30. .text:690010FC                 jnz     short __bad
  31. .text:690010FE                 cmp     _29_xor_psw4__79, 79h ; 0x29^0x79=0x50 ('P')
  32. .text:69001105                 jnz     short __bad
  33. .text:69001107                 cmp     _70_xor_psw1__32, 32h ; 0x70^0x32=0x42 ('B')
  34. .text:6900110E                 jnz     short __bad
  35. .text:69001110                 cmp     _76_xor_psw3__30, 30h ; 0x76^0x30=0x46 ('F')
  36. .text:69001117                 jnz     short __bad
  37. .text:69001119                 push    offset _07_xor_psw1 ; 'BOFP'


Начинаем с определения источника (буфер ввода пароля) и результата (буфер строки для printf(%s)) всей этой каши с паролем.
Источник (.text:69001076 mov eax, offset buffer) и результат соответственно ( .text:69001119 push offset _07_xor_psw1). По пути видим, что наш пароль длиной 4 символа (.text:6900108C cmp eax, 4; .text:6900108F jnz __bad). Также можно видить, что наш "результат" имеет исходные значения.
Code:
  1. .data:690030D4 _07_xor_psw1    db 7
  2. .data:690030D5 _2E_xor_psw2__61 db 2Eh                 ; a
  3. .data:690030D6 _35_xor_psw3    db 35h
  4. .data:690030D7 _29_xor_psw4__79 db 29h                 ; y
  5. .data:690030D8 _70_xor_psw1__32 db 70h                 ; 2
  6. .data:690030D9 _20_xor_psw2    db 20h
  7. .data:690030DA _76_xor_psw3__30 db 76h                 ; 0
  8. .data:690030DB _68_xor_psw4    db 68h

Чтобы не держать их в голове внесем их в имя переменных (в виде _ХХ). Далее в это же имя будем добавлять действия совершаемые над этой переменной (например _29_xor_psw4__79 - начальное значение 29 далее xor с 4м символом пароля).
.text:690010B3 movzx edx, buffer+3
.text:690010C1 xor _29_xor_psw4__79, dl

И наконец опять же в имя в месте проверки добавляем проверяемое значение (для уже рассмотренного имени __79).
.text:690010FE cmp _29_xor_psw4__79, 79h
.text:69001105 jnz short __bad

Теперь все готово для получения пароля (операция xor обратимая).

_70_xor_psw1__32 -> 0x70^0x32=0x42 ('B')
_2E_xor_psw2__61 -> 0x2E^0x61=0x4F ('O')
_76_xor_psw3__30 -> 0x76^0x30=0x46 ('F')
_29_xor_psw4__79 -> 0x29^0x79=0x50 ('P')

Таким образом наш пароль BOFP.

-----
127.0.0.1, sweet 127.0.0.1





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

Создано: 30 сентября 2008 11:56
· Личное сообщение · #9

depler пишет:
Да первое простое, вот кто б про второе и третье рассказал бы


Вот по поводу второго расплылся на 13 страниц. Дольше писал чем реверсил.
Модераторы если посчитают достойным пересунут в статьи.

f7f5_30.09.2008_CRACKLAB.rU.tgz - FSC08_Level2-Tutor(rus)-iNC0DE.rar

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 30 сентября 2008 12:05 · Поправил: Hellspawn
· Личное сообщение · #10

OKOB пишет:
Вот по поводу второго расплылся на 13 страниц. Дольше писал чем реверсил.
Модераторы если посчитают достойным пересунут в статьи.


пробежался по статье, вполне достойно, но брутфорсер очень не оптимизированный, я своим сбрутил буквально за полтора часа, правда маска у меня была 9-ая ;)

-----
[nice coder and reverser]





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

Создано: 20 декабря 2008 14:47
· Личное сообщение · #11

А может кто-нибудь объяснить на пальцах, как повторить защиту от распаковки UPX как во втором?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





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

Создано: 20 декабря 2008 15:32
· Личное сообщение · #12

так там вроде tls callback, которого после снятия upx нету

-----
Nulla aetas ad discendum sera



<< . 1 . 2 . 3 . 4 .
 eXeL@B —› Основной форум —› F-Secure Reverse Engineering Challenge
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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