Расчехляйте свои визоры!

Тема в разделе "WASM.RESEARCH", создана пользователем Rel, 18 фев 2022.

  1. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    f13nd, нифига себе ты быстро, я только открыл в Ида семпл. А чем ты пользуешься, сугубо гидрой или в отладчике смотришь?

    Rel, прикол в том , что семпл палится виндефом как какое-то семейство малвари. Это на тему адекватности аверов.
     
  2. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Я вообще-то еще и работал когда он запостил :acute: Как руки дошли. Нет, тупо оллидебаггер, я ж не крякер вообще.
     
    TrashGen и M0rg0t нравится это.
  3. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.191
    Адрес:
    подполье
    мы вон с поцонами в баню сходили в честь праздничка. а тут уже всё да? ну, вот моё участие - в этом сообщении
     
  4. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.191
    Адрес:
    подполье
    f13nd, стряхиваю три слоя абстрактно-виртуализированной пыли с чорной шапки-петушка и передаю её Вам!
     
  5. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Через карты не решается, если каждое условное ветвление инвертировать(^1), это ничего не даёт :)

    Код (Text):
    1. ; Jcc  41
    2. ; Ip/FlowIp
    3.  
    4. $      4082F8
    5. $+4    4082FA
    6. $+8    408445
    7. $+C    40843B
    8. $+10   408440
    9. $+14   408442
    10. $+18   408445
    11. $+1C   408447
    12. $+20   4084AC
    13. $+24   4084AE
    14. $+28   407ACC
    15. $+2C   407AD2
    16. $+30   407AD9
    17. $+34   407ADF
    18. $+38   407AF0
    19. $+3C   407B5B
    20. $+40   407B65
    21. $+44   407B67
    22. $+48   407B70
    23. $+4C   407B94
    24. $+50   407ACC
    25. $+54   407BDF
    26. $+58   4084BC
    27. $+5C   4084BE
    28. $+60   401C02
    29. $+64   401C04
    30. $+68   408706
    31. $+6C   408708
    32. $+70   40870C
    33. $+74   408713
    34. $+78   408729
    35. $+7C   40872B
    36. $+80   4077B1
    37. $+84   4077B3
    38. $+88   4077CD
    39. $+8C   4077CF
    40. $+90   407293
    41. $+94   4072A4
    42. $+98   4072A9
    43. $+9C   4072AF
    44. $+A0   4072A9
    45. $+A4   4072AB
    46. $+A8   40720B
    47. $+AC   40720D
    48. $+B0   407659
    49. $+B4   40765B
    50. $+B8   4076F1
    51. $+BC   4076F3
    52. $+C0   407E97
    53. $+C4   407E99
    54. $+C8   4016C1
    55. $+CC   4016C3
    56. $+D0   409969
    57. $+D4   409936
    58. $+D8   401BC8
    59. $+DC   401BD0
    60. $+E0   401BDA
    61. $+E4   401BDC
    62. $+E8   401BC8
    63. $+EC   401BCA
    64. $+F0   401BCC
    65. $+F4   401BE8
    66. $+F8   401BEC
    67. $+FC   401BEE
    68. $+100  40995F
    69. $+104  4099BF
    70. $+108  4099CA
    71. $+10C  4099A3
    72. $+110  40242A
    73. $+114  402451
    74. $+118  4099AE
    75. $+11C  4099BE
    76. $+120  4099CA
    77. $+124  4099CC
    78. $+128  4099CE
    79. $+12C  4099D0
    80. $+130  4099D4
    81. $+134  4099D6
    82. $+138  4099E5
    83. $+13C  409A28
    84. $+140  4013A3
    85. $+144  40149B
    Врядле как то автоматикой можно решить, без разбора логики. Аналогично как классический км - вычисление хэш функции от строки, затем его проверка на валидность и ветвление на адрес функции от хэша. Такое было у TrashGen, надо было угадать куда должно передаваться управление..
     
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Это типа cfg или как оно там, тупо последовательность адресов куда передавалось управление. Что ты в этой филькиной грамоте хотел увидеть? Чисто технически можно было бы по многократным примерно равномерным повторениям одних и тех же конкретных иструкций на конкретном месте догадаться, что там хеш считается. Но это как бы слегка мазохизм и действие ради действия.
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    > Это типа cfg или как оно там

    Последовательность условий не выполненных до ввода. Может не быть условного ветвления, а быть условная выборка - cmov, но такой нет ни одной.

    Если нет вычисления хэша, то такое работает на большинстве семплов.
     
  8. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    А зачем тебе условия выполненные/не выполненные до ввода? Там ведь что с хешем что без самое интересное после ввода происходить должно.

    ЗЫ: я-то думал, нафига там вся эта свистопляска вокруг z-бита несчастного:
    Код (Text):
    1. $74F1 CMP EDX,EAX
    2. $74F3 SETE DL
    3. ...
    4. $1A19 MOV EBX,EDX
    5. ...
    6. $1A32 CMP BL,1
    7. ...
    8. $1A3D SBB EDI,EDI
    9. ...
    10. $1A47 AND EDI,00000035
    11. ...
    12. $1A59 SUB EDI,1B
    13. ...
    14. ;eax=просто_адова_помойка
    15. ...
    16. $1A6A LEA EBX,[EAX+1]
    17. $1A6D XOR EDI,EBX
    18. ...
    А оно оказывается метод противодействия визорам, в который я не уперся ни разу.
     
  9. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    > не выполненные до ввода?

    Выделяются после ввода, до ввода лог не ведётся. Вот например у тебя 4074F3 setc, если закартировать setc, то после ввода в логе будет одна 407712, тк 4074F3 вызывается до ввода.

    > метод противодействия визорам

    Причём тут визоры, трешевая лента. Функция вообще обратима ?
     
  10. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Откуда мне знать? Смысл в том, чтобы знать как можно меньше, выясняется только нужная для решения инфа. Мне в процессе показалось, что это md5, ибо 128 бит там крутятся, но вообще было пофигу.
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

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

    Ultimatum CrackMe
    - выбрал по названию, типо сложный должен быть.. Листаю карту с конца и ищу ветвления, которые идут после сравнения значений, отличных от 0/1.

    Код (Text):
    1. $+248 0040214F <---
    2. $+24C 00402161
    3. $+250 004023A0
    4. $+254 004023A2
    5. $+258 004023C6
    6. $+25C 004023CC
    7. $+260 004023D3
    8. $+264 004023DD
    9. $+268 004023E3
    10. $+26C 004023E9
    11. $+270 004023E9
    12. $+274 004023EB
    13. $+278 004023ED
    14. $+27C 004023F3
    15. $+280 00402407
    16. $+284 00402409
    17. $+288 00402410
    18. $+28C 00402412
    19. $+290 0040242C
    20. $+294 00402433
    21. $+298 004023E3
    22. $+29C 00402479
    23. $+2A0 004024BE
    24. $+2A4 004024C0
    25. $+2A8 00402410
    26. $+2AC 00402424
    27. $+2B0 004048EA
    28. $+2B4 004048EC
    29. $+2B8 00000000
    - на этой инструкции в стеке пасс:

    Код (Text):
    1. 0012FF44 00429968 ASCII "Password: "
    2. 0012FF48 00155B10
    3. 0012FF4C 00155C38 ASCII "VGhpcyBpcyB0aGUgY29ycmVjdCBwYXNza2V5LCB3ZWxsIGRvbmUh"
    Creeper215's Easy CrackMe
    - аналогично, 3-е ветвление в карте с конца это проверка функции от пасса(нужно поменять условие):

    Код (Text):
    1. $+250 00407FE5
    2. $+254 00407FE7
    3. $+258 00407FFF
    4. $+25C 00408014
    5. $+260 00405575
    6. $+264 00405584
    7. $+268 00401029 <---
    8. $+26C 0040102B
    9. $+270 0040320E
    10. $+274 00403222
    11. $+278 00410B54
    12. $+27C 00410B56
    13. $+280 00000000
    Код (Text):
    1. 00401022    cmp dword ptr ss:[ebp-4],1111F3F
    2. 00401029    je short 0040103A
    На что они надеются собирая такие easy", которые за десяток секунд решаются..

    Mojtaba's Crackme!
    - на VB. В карте 6 условных ветвлений:

    Код (Text):
    1. $    004020CE app.004020CE
    2. $+4  004020E2 app.004020E2
    3. $+8  0040212F app.0040212F <---
    4. $+C  004021F4 app.004021F4
    5. $+10 004021F6 app.004021F6
    6. $+14 00402208 app.00402208
    7. $+18 010F532F
    8. $+1C 010F5331
    9. $+20 0040221D app.0040221D
    10. $+24 0040222E app.0040222E
    11. $+28 00402253 app.00402253
    12. $+2C 00402264 app.00402264
    13. $+30 00000000
    Проверка на 2-м:
    Код (Text):
    1. 0040212C    cmp di,bx
    2. 0040212F    je 004021F4
    Можно дальше пойти и найти пасс. Для этого посмотреть карту процедурных ветвлений.

    Код (Text):
    1. $+40 004020F6 app.004020F6
    2. $+44 004022D0 Entry address
    3. $+48 734E6D92 MSVBVM60.734E6D92
    4. $+4C 0040231A app.0040231A <---
    5. $+50 0040231F app.0040231F
    - просто пролистав лог:
    Код (Text):
    1. 00402306    mov dword ptr ss:[ebp-28],00401E68     ; UNICODE "8YL4-H4LL-HLAH-WH6R-1K6C"
    2. 0040230D    mov dword ptr ss:[ebp-30],8
    3. 00402314    call dword ptr ds:[<&MSVBVM60.__vbaVarCopy ]
    4. 0040231A    push 0040232C
    Это всё просто тк хэш функций нет. А как с ними быть я хз. "crk" пасс.
     

    Вложения:

    • crm.7z
      Размер файла:
      549,7 КБ
      Просмотров:
      120
    Последнее редактирование: 26 фев 2022
  12. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Я так и не понял чем тебе хеширование не угодило. Найденные тобой ветвления во всех трех примерах находятся самым очевидным детским search for -> referenced strings. У бонифация условное ветвление, которое ты бы нашел, так выглядит (при zf=0 после сравнения хешей получается 0x13^0x09):
    Код (Text):
    1. $7563 MOV AL,BYTE PTR SS:[EBP-14]
    2. $7566 XOR AL,BYTE PTR SS:[EBP-13]
    3. $7569 CMP AL,1A
    4. $756B JNE SHORT $7570
    Но оно как бы обслуживает далеко не только это сравнение, это вроде бы должно быть очевидно, если применяется виртуализация.
     
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    > во всех трех примерах находятся самым очевидным

    Можно jit посмотреть, что бы было не очевидно.

    OffsetJud's Crackme

    Код (Text):
    1. $    033E0B63
    2. $+4  033E0B6A
    3. $+8  033E0B9B <---
    4. $+C  033E0BCB
    5. $+10 033E0BDB
    6. $+14 033E0BF4
    7. $+18 00D5B6C7
    8. $+1C 00D5B6DB
    9. $+20 00CB280A
    10. $+24 00CB2810
    11. $+28 00CB281E
    12. $+2C 00CB2824
    13. $+30 00CB2849
    14. $+34 00CB284B
    15. $+38 00CB2876
    16. $+3C 00CB2878
    17. $+40 00CB2880
    18. $+44 00CB2882
    19. $+48 00000000
    - то же самое, разве что сборка в буферах нужно искать сигнатурно, тк хз где в исходном образе соответствие. Но если глянуть среду на найденном бранче, то данные для ввода хардкод:

    scr.png

    - как это решать без декомпилера ?

    > не только это сравнение

    Так ведь в принципе условных ветвлений может небыть вообще, проверка валидности хэша, а затем переход к Ip = f(hash). Например Ip = md5(str) + C. Вот и как такое решать, хотя бы сформулировать метод обнаружения хэш-функции.
     

    Вложения:

    • OffsetJud.7z
      Размер файла:
      23,4 КБ
      Просмотров:
      117
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Если вдруг кому интересно, то во второй крекмише (как и в первой) простая стековая ВМ, без добавления мусора псевдо-код второй крекмиши выглядит так (я еще себе дизасм запилил, чтобы смотреть, как это все компилится и проще было ошибки искать, если накосячу, добавил пару комментов, чтобы было понятнее):
    Код (Text):
    1.  
    2. # Проверка на патч JMPF
    3. # (сравниваются два рандомных неравных числа)
    4. 0000 PUSHI 2907363183 (0xAD4AD76F)
    5. 0010 PUSHI 75249493 (0x047C3755)
    6. 0020 EQ  
    7. 0022 JMPF  0147
    8. 0032 PUSHS "Please don't patch my opcode handlers, bro!"
    9. 0082 ECHO
    10. 0084 PUSHS "This is so rude of you, please don't, bro!"
    11. 0133 ECHO
    12. 0135 HALT # Инструкция завершает ВМ
    13. 0137 JMP   9999 # На всякий случай, если бы мне еще и HALT решили запатчить
    14. # Основная логика
    15. 0147 PUSHS "Enter password, bro: "
    16. 0175 ECHO
    17. 0177 INPUT
    18. 0179 STORE index:0
    19. # Начинаем хеш считать
    20. 0183 PUSHI 1630981612 (0x6136CDEC)
    21. 0193 STORE index:1
    22. 0197 LOAD  index:0
    23. 0201 SLEN
    24. 0203 STORE index:2
    25. 0207 PUSHI 0 (0x00000000)
    26. 0217 STORE index:3
    27. 0221 LOAD  index:3
    28. 0225 LOAD  index:2
    29. 0229 LT  
    30. 0231 JMPF  0345
    31. 0241 LOAD  index:1
    32. 0245 PUSHI 2870014623 (0xAB10F29F)
    33. 0255 MUL  
    34. 0257 STORE index:4
    35. 0261 LOAD  index:0
    36. 0265 LOAD  index:3
    37. 0269 ORD  
    38. 0271 STORE index:5
    39. 0275 LOAD  index:4
    40. 0279 LOAD  index:5
    41. 0283 ADD  
    42. 0285 PUSHI 16777215 (0x00FFFFFF)
    43. 0295 AND  
    44. 0297 STORE index:6
    45. 0301 LOAD  index:1
    46. 0305 LOAD  index:6
    47. 0309 ADD  
    48. 0311 STORE index:1
    49. 0315 LOAD  index:3
    50. 0319 PUSHI 1 (0x00000001)
    51. 0329 ADD  
    52. 0331 STORE index:3
    53. 0335 JMP   0221
    54. # Сравнение хеша с заранее просчитанным
    55. 0345 LOAD  index:1
    56. 0349 PUSHI 1747247142 (0x6824E026)
    57. 0359 EQ  
    58. 0361 JMPF  0448 # Изначально предполагал патч здесь
    59. 0371 PUSHS "Password is valid, bro!"
    60. 0401 ECHO
    61. 0403 PUSHS "You are real cracker, bro!"
    62. 0436 ECHO
    63. 0438 JMP   0518
    64. 0448 PUSHS "Password is invalid, bro!"
    65. 0480 ECHO
    66. 0482 PUSHS "Better luck next time, bro!"
    67. 0516 ECHO
    68. 0518 HALT
    69.  
    Компилится псевдо-код из такого кода с помощью моего макроса virtualize, который обходит ast-дерево, компилит дерево в байткод и заменяет его вызовом ВМ (специально сделал исходный кодец без каких-то высокоуровневых конструкций, чтобы проще было компилить, hash_seed - псевдослучайный при каждой сборке, cp_hash_string - тот же хеш, но вычисляется макросом при компиляции еще до виртуализации, компиляция без каких-то оптимизаций байт-кода):
    Код (Text):
    1.  
    2. proc lowered_function() {. virtualize .} =
    3.     echo("Enter password, bro: ")
    4.     var password = read_line(stdin)
    5.    
    6.     var xhash = hash_seed
    7.     var slen = len(password)
    8.     var i = 0
    9.  
    10.     while i < slen:
    11.         let v1 = xhash * 0xab10f29f'u32
    12.         let v2 = ord(password[i]).uint32
    13.         let v3 = (v1 + v2) and 0xffffff'u32
    14.         xhash = xhash + v3
    15.         i = i + 1
    16.  
    17.     if xhash == cp_hash_string("TestDatVmStuff"):
    18.         echo("Password is valid, bro!")
    19.         echo("You are real cracker, bro!")
    20.     else:
    21.         echo("Password is invalid, bro!")
    22.         echo("Better luck next time, bro!")
    23.  
     
  15. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Большая часть криптографии не имеет математического смысла. Если есть сдвиги (особенно циклические) больше чем на 3 бита, если есть конъюнкции/дизъюнкции/строгие дизъюнкции с длинными битовыми полями, то как бы очевидно, что это криптография.
    Код (Text):
    1. private void button1_Click(object sender, EventArgs e)
    2. {
    3.     bool flag = this.textBox1.Text == "kekstra" && this.textBox2.Text == "topkek";
    4.     if (flag)
    5.     {
    6.         MessageBox.Show("Congratz negro!", "Get some bitches on yo dick");
    7.     }
    8.     else
    9.     {
    10.         MessageBox.Show("You are a dumb ass and you'll never learn reverse engineering :'(", "What a failure!");
    11.     }
    12. }
    Хз. Наверное очень грустно дотнет без декомпилера решать. Хотя секундочку:
    Код (Text):
    1. seg000:0081 ldarg.0
    2. seg000:0082 ldfld    class [System.Windows.Forms]System.Windows.Forms.TextBox crackmeTVLPA.Form1::textBox1
    3. seg000:0087 callvirt instance string [System.Windows.Forms]System.Windows.Forms.Control::get_Text()
    4. seg000:008C ldstr    aKekstra       // "kekstra"
    5. seg000:0091 call     bool [mscorlib]System.String::op_Equality(string, string)
    6. seg000:0096 brfalse.s loc_AF
    7. seg000:0098 ldarg.0
    8. seg000:0099 ldfld    class [System.Windows.Forms]System.Windows.Forms.TextBox crackmeTVLPA.Form1::textBox2
    9. seg000:009E callvirt instance string [System.Windows.Forms]System.Windows.Forms.Control::get_Text()
    10. seg000:00A3 ldstr    aTopkek        // "topkek"
    11. seg000:00A8 call     bool [mscorlib]System.String::op_Equality(string, string)
    12. seg000:00AD br.s     loc_B0
    13. seg000:00AF
    14. seg000:00AF                         // CODE XREF: crackmeTVLPA.Form1__button1_Click+16↑j
    15. seg000:00AF ldc.i4.0
    16. seg000:00B0
    17. seg000:00B0                         // CODE XREF: crackmeTVLPA.Form1__button1_Click+2D↑j
    18. seg000:00B0 stloc.0
    19. seg000:00B1 ldloc.0
    20. seg000:00B2 brfalse.s loc_C8
    21. seg000:00B4 nop
    22. seg000:00B5 ldstr    aCongratzNegro // "Congratz negro!"
    23. seg000:00BA ldstr    aGetSomeBitches // "Get some bitches on yo dick"
    24. seg000:00BF call     valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string)
    25. seg000:00C4 pop
    26. seg000:00C5 nop
    27. seg000:00C6 br.s     loc_DA
    28. seg000:00C8
    29. seg000:00C8                         // CODE XREF: crackmeTVLPA.Form1__button1_Click+32↑j
    30. seg000:00C8 nop
    31. seg000:00C9 ldstr    aYouAreADumbAss // "You are a dumb ass and you'll never lea"...
    32. seg000:00CE ldstr    aWhatAFailure  // "What a failure!"
    33. seg000:00D3 call     valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string)
    34. seg000:00D8 pop
    35. seg000:00D9 nop
    36. seg000:00DA
    37. seg000:00DA                         // CODE XREF: crackmeTVLPA.Form1__button1_Click+46↑j
    38. seg000:00DA ret
    Тоже можно.
     
    Indy_ нравится это.
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Для крипты и вирты автоматика бесполезна. Если тем же инструментом прогнать Rel, семпл, вот что получается:

    Код (Text):
    1. $     kernel32.7C872ADA
    2. $+4   app.004082F3
    3. $+8   app.00408305
    4. $+C   app.00408443
    5. $+10  app.00408447
    6. $+14  app.0040849C
    7. $+18  app.004084B0
    8. $+1C  Entry address
    9. $+20  app.00401CF0
    10. $+24  app.00407ABA
    11. $+28  app.00407AA4
    12. $+2C  app.00407B9C
    13. $+30  app.00407BEC
    14. $+34  app.004084B5
    15. $+38  app.004018C4
    16. $+3C  app.004084C6
    17. $+40  app.004084CF
    18. $+44  Entry address
    19. $+48  msvcrt.77C1C2E3
    20. $+4C  app.00401C12
    21. $+50  app.00401C13
    22. $+54  app.004084D4
    23. $+58  app.004084D7
    24. $+5C  app.004086FF
    25. $+60  app.0040705D
    26. $+64  app.00408741
    27. $+68  app.00407188
    28. $+6C  app.00408759
    29. $+70  app.004019BB
    30. $+74  app.00408763
    31. $+78  app.004018C4
    32. $+7C  app.0040876B
    33. $+80  app.00409998 <---
    34. $+84  app.00407786
    35. $+88  app.0040162A
    36. $+8C  app.004077A0
    37. $+90  app.004073F8
    38. $+94  app.004077AA
    39. $+98  app.004016AE
    40. $+9C  app.004077BD
    41. $+A0  app.00402652
    42. $+A4  app.004072CB
    43. $+A8  app.004072D9
    44. $+AC  app.004077DD
    45. $+B0  app.004070F1
    46. $+B4  app.004077FA
    47. $+B8  app.004019BB
    48. $+BC  app.00407805
    49. $+C0  app.00409998 <---
    50. $+C4  app.004071E5
    51. $+C8  app.0040162A
    52. $+CC  app.004071FD
    53. $+D0  app.004016AE
    54. $+D4  app.00407204
    55. $+D8  app.0040162A
    56. $+DC  app.0040721E
    57. $+E0  app.004070F1
    58. $+E4  app.00407244
    59. $+E8  app.00407188
    60. $+EC  app.0040726E
    61. $+F0  app.004019BB
    62. $+F4  app.00407279
    63. $+F8  app.00409998 <---
    64. $+FC  app.00407618
    65. $+100 app.0040162A
    66. $+104 app.00407633
    67. $+108 app.0040162A
    68. $+10C app.0040763B
    69. $+110 app.0040162A
    70. $+114 app.00407642
    71. $+118 app.004073F8
    72. $+11C app.00407652
    73. $+120 app.004073F8
    74. $+124 app.0040766A
    75. $+128 app.00401AFF
    76. $+12C app.0040767F
    77. $+130 app.00407188
    78. $+134 app.0040768E
    79. $+138 app.00401B0D
    80. $+13C app.00407698
    81. $+140 app.00401B0D
    82. $+144 app.004076A0
    83. $+148 app.00401B0D
    84. $+14C app.004076A8
    85. $+150 app.00409998 <---
    86. $+154 app.004076B0
    87. $+158 app.0040162A
    88. $+15C app.004076CB
    89. $+160 app.0040162A
    90. $+164 app.004076D3
    91. $+168 app.0040162A
    92. $+16C app.004076DA
    93. $+170 app.004073F8
    94. $+174 app.004076EA
    95. $+178 app.004073F8
    96. $+17C app.00407702
    97. $+180 app.00401A9C
    98. $+184 app.0040771D
    99. $+188 app.00407188
    100. $+18C app.0040772C
    101. $+190 app.00401B0D
    102. $+194 app.00407736
    103. $+198 app.00401B0D
    104. $+19C app.0040773E
    105. $+1A0 app.00401B0D
    106. $+1A4 app.00407746
    107. $+1A8 app.00409998 <---
    108. $+1AC app.00407E4A
    109. $+1B0 app.0040162A
    110. $+1B4 app.00407E62
    111. $+1B8 app.0040162A
    112. $+1BC app.00407E78
    113. $+1C0 app.0040162A
    114. $+1C4 app.00407E80
    115. $+1C8 app.004073F8
    116. $+1CC app.00407E90
    117. $+1D0 app.004073F8
    118. $+1D4 app.00407EAF
    119. $+1D8 app.00407DB2
    120. $+1DC app.00407EBE
    121. $+1E0 app.00401AFF
    122. $+1E4 app.00407ED9
    123. $+1E8 app.00407188
    124. $+1EC app.00407EE8
    125. $+1F0 app.00401B0D
    126. $+1F4 app.00407EF3
    127. $+1F8 app.004019BB
    128. $+1FC app.00407EFB
    129. $+200 app.004018C4
    130. $+204 app.00407F03
    131. $+208 app.00401B0D
    132. $+20C app.00407F0B
    133. $+210 app.00409998 <--- ORD
    134. $+214 app.004016AF
    135. $+218 app.0040167A
    136. $+21C app.004016BA
    137. $+220 app.00409998 <---
    138. $+224 app.004015FB
    139. $+228 app.004019BB
    140. $+22C app.00409940
    141. $+230 app.00409943
    142. $+234 Entry address
    143. $+238 app.004019BB
    144. $+23C app.00401BE5
    145. $+240 msvcrt.77C1C2E3
    146. $+244 app.00401BF6
    147. $+248 app.00401BFC
    148. $+24C app.00409948
    149. $+250 app.00401BFC
    150. $+254 app.00409950
    151. $+258 app.004019BB
    152. $+25C app.00409958
    153. $+260 app.004099A7
    154. $+264 Entry address
    155. $+268 app.00402456
    156. $+26C app.004099AC
    157. $+270 msvcrt.77C1C2E3
    158. $+274 app.004099DE
    159. $+278 app.00409A32
    160. $+27C app.00410AF3
    161. $+280 app.00410AFE
    162. $+284 app.00401396
    163. $+288 app.0040149E
    164. $+28C Entry address
    165. $+290
    - выделяется цикл вирты и стабы их 7. Карта строится после ввода, то стабы при инит. скипаются.

    PUSHI
    EQ
    JMPF
    PUSHS
    ECHO
    INPUT

    Должно остаться 9:

    STORE
    LOAD
    SLEN
    LT
    MUL
    ORD
    ADD
    AND
    JMP

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

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Ну короче ты изобрел велосипед с квадратными колесами, я понял.
     
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

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

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Ну вот все 4 семпла, которые ты показал, вообще никаких визоров не требовали, разобраться в них буквально за минуту можно. Кто впустую потратил время?
     
  20. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    f13nd,

    Так сложность значение имеет лишь для ручного разбора. Два более сложных - net/vb ты ведь отладчиком не решил, для первого использовал декомп. Для вб тоже декомп нужен ?

    Я глянул псевдокод #134, очень калк спекки напоминает - стек, индексные регистры..

    Код (Text):
    1.     i0 = S$
    2.     i1 = 0x6136CDEC
    3.     i2 = LEN(i0)
    4.     i3 = 0
    5. #221:
    6.     LT(i2, i3) -> #345
    7.     i4 = 0xAB10F29F * i1
    8.     i5 = i0 | i3
    9.     i6 = (i4 + i5) & 0x00FFFFFF
    10.     i1 = i1 + i6
    11.     i3 = i3 + 1
    12.     > #221
    Если упростить, получается:
    Код (Text):
    1.     i1 = 0x6136CDEC
    2.     !i3
    3. #221:
    4.     LT(LEN(S$), i3) -> #345
    5.     i1 + ((0xAB10F29F * i1 + (S$ | i3)) & 0x00FFFFFF)
    6.     i3 ++
    7.     > #221
    - функция необратима. На что рел надеялся, те как строку искать, вечным брутом ?