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

 eXeL@B —› Программирование —› Помогите с брутом.
. 1 . 2 . >>
Посл.ответ Сообщение

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

Создано: 07 декабря 2011 00:42
· Личное сообщение · #1

Приветствую форумчане!
Столкнулся со следующей проблемой:
Пытаюсь сгенить ключ "подписанный" 48-битной константой. Берется 12 бит от хвида и эти 48 бит константы, далее 64-битный буфер (4 бита - нули) шифруется константой, а затем полученным значением 32 раза шифруются начальные данные. Одному индексу соответствует один 64-битный хэш в таблице. Всего хэшей в таблице 4096 и для каждого нужно сбрутить свою 48-битную константу. Проблема в том, что брут занимает очень много времени. Сам я в оптимизации не силен, сократил операции до минимума и развернул циклы. Огромная просьба взглянуть на алго и помочь с оптимизацией или, если будет толк, переводом на CUDA.

Code:
  1. CreateKeyBody     macro
  2. local    i
  3.          i = 1
  4.          while i le 3
  5.                  rol edi,16
  6.                  sub di,09FB3h
  7.                  ror edi,16
  8.                  rol di,044h
  9.                  rol esi,16
  10.                  add si,0C5A2h
  11.                  ror esi,16
  12.                  rol di,04Bh
  13.                  add esi,0C5A29FB3h
  14.                  mov ecx,esi
  15.                  rol edi,cl
  16.                  rol edi,16
  17.                  add di,09FB3h
  18.                  ror edi,16
  19.                  xchg esi,edi
  20.                  i = i + 1
  21.          endm
  22. endm
  23.  
  24. CreateKey         macro
  25.          xor esi,0B63F2589h
  26.          xor edi,012E2B4A0h
  27.          CreateKeyBody
  28. endm
  29.  
  30. CryptDataBody     macro
  31. local    i
  32.          i = 1
  33.          while i le 3
  34.                  rol edx,16
  35.                  sub dx,di
  36.                  ror edx,16
  37.                  mov ecx,esi
  38.                  rol dx,cl
  39.                  mov ecx,edi
  40.                  shr ecx,16
  41.                  rol eax,16
  42.                  add ax,cx
  43.                  ror eax,16
  44.                  mov ecx,esi
  45.                  shr ecx,16
  46.                  rol dx,cl
  47.                  add eax,edi
  48.                  mov ecx,eax
  49.                  rol edx,cl
  50.                  rol edx,16
  51.                  add dx,di
  52.                  ror edx,16
  53.                  xchg eax,edx
  54.                  i = i + 1
  55.          endm
  56. endm
  57.  
  58. CryptData         macro
  59. local    i
  60.          i = 1
  61.          while i le 32
  62.                  xor eax,0B63F2589h
  63.                  xor edx,012E2B4A0h
  64.                  CryptDataBody
  65.                  i = i + 1
  66.          endm
  67. endm
  68.  
  69. Brute    proc
  70.          pushad
  71.          mov ebp,0
  72.          mov ebx,0
  73.          .repeat
  74.                  .repeat
  75.                         mov esi,ebx
  76.                         mov eax,esi
  77.                         mov edi,ebp
  78.                         mov edx,edi
  79.                         CreateKey
  80.                         CryptData
  81.                         mov edi,ebx
  82.                         and edi,0FFFh ;в edi индекс хэша
  83.                         mov ecx,edi
  84.                         shl edi,3
  85.                         add edi,offset HashTable
  86.                         .if eax == dword ptr [edi]
  87.                               .if edx == dword ptr [edi+4]
  88.                                    mov eax,ebx
  89.                                    mov edx,ebp
  90.                                    shrd eax,edx,12
  91.                                    shr edx,12
  92.                                    mov dword ptr [Salt+ecx*8],eax
  93.                                    mov word ptr [Salt+ecx*8+4],dx
  94.                               .endif
  95.                         .endif
  96.                         add ebx,1
  97.                  .until carry?
  98.                  add ebp,1
  99.          .until carry?
  100.          popad
  101.          ret
  102. Brute    endp





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 декабря 2011 07:00 · Поправил: PE_Kill
· Личное сообщение · #2

Убрал лишние ROT'ы:
Code:
  1. CreateKeyBody     macro
  2. local    i
  3.          i = 1
  4.          while i le 3
  5.                  sub edi,09FB30000h
  6.                  rol di,15
  7.                  add esi,08B449FB3h
  8.                  mov ecx,esi
  9.                  rol edi,cl
  10.                  add edi,09FB30000h
  11.                  xchg esi,edi
  12.                  i = i + 1
  13.          endm
  14. endm
  15.  
  16. CreateKey         macro
  17.          xor esi,0B63F2589h
  18.          xor edi,012E2B4A0h
  19.          CreateKeyBody
  20. endm
  21.  
  22. CryptDataBody     macro
  23. local    i
  24.          i = 1
  25.          while i le 3
  26.                  sub edx,ebx
  27.                  mov ecx,esi
  28.                  rol dx,cl
  29.                  add eax,ebp
  30.                  mov ecx,esi
  31.                  shr ecx,16
  32.                  rol dx,cl
  33.                  add eax,edi
  34.                  mov ecx,eax
  35.                  rol edx,cl
  36.                  add edx,ebx
  37.                  xchg eax,edx
  38.                  i = i + 1
  39.          endm
  40. endm
  41.  
  42. CryptData         macro
  43. local    i
  44.          i = 1
  45.          push ebx
  46.          push ebp
  47.          mov ebx,edi
  48.          shl ebx,16
  49.          mov ebp,edi
  50.          xor bp,bp
  51.          while i le 32
  52.                  xor eax,0B63F2589h
  53.                  xor edx,012E2B4A0h
  54.                  CryptDataBody
  55.                  i = i + 1
  56.          endm
  57.          pop ebp
  58.          pop ebx
  59. endm


Кстати, можно же сделать распределенный брут. Каждый возьмет себе по несколько хешей, да сбрутит.

PS Еще немного оптимизировал CreateKeyBody

-----
Yann Tiersen best and do not fuck




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

Создано: 07 декабря 2011 07:51
· Личное сообщение · #3

PE_Kill пишет:
Убрал лишние ROT'ы

Code:
  1. rol edi,16
  2. sub di,09FB3h
  3. ror edi,16

Code:
  1. sub edi,09FB30000h

Я как один раз так жестоко на%бался. При этой операции младшее слово не должно изменятся, твой вариант влияет на di.
Code:
  1. push ebx
  2. push ebp
  3. mov ebx,edi
  4. shl ebx,16
  5. mov ebp,edi
  6. xor bp,bp

разве push\pop быстрее нескольких rol? Может тогда для счетчика переменную на стэке завести и обращаться через esp?
PE_Kill пишет:
Кстати, можно же сделать распределенный брут. Каждый возьмет себе по несколько хешей, да сбрутит.

Было бы, конечно, хорошо, но мне бы не хотелось кого то уж сильно напрягать... Если кто то все же согласен помочь, прикрепляю таблицу хэшей. Я бручу в два потока с 8000000000000000 в сторону понижения и повышения. В сторону повышения сейчас 8000000C3E90277E, понижения - 7FFFFFF380963411. Это за ночь сбрутило. Как видно, скорость не ахти


b55c_07.12.2011_EXELAB.rU.tgz - Dump_00415118_00010000.bin



Ранг: 51.8 (постоянный), 58thx
Активность: 0.03=0.03
Статус: Участник

Создано: 07 декабря 2011 08:39
· Личное сообщение · #4

На первый взгляд, оба алгоритма (и для создания ключа, и для шифрования) обратимые => здесь не брут нужен, а обратные функции написать аккуратно.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 декабря 2011 09:01 · Поправил: PE_Kill
· Личное сообщение · #5

Olenevod пишет:
разве push\pop быстрее нескольких rol? Может тогда для счетчика переменную на стэке завести и обращаться через esp?

Я проверил -> быстрее. Там же не несколько rot, а цикл из 3 итераций в цикле из 32 итераций.

Olenevod пишет:
Я как один раз так жестоко на%бался. При этой операции младшее слово не должно изменятся, твой вариант влияет на di.

Гмм, при каких обстоятельствах? Младшие биты нули, а переполнение старших бит уходит в процессорные флаги.

ЗЫ. А что и ключи и данные инициализируются одним и тем же значением?

-----
Yann Tiersen best and do not fuck




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

Создано: 07 декабря 2011 11:29
· Личное сообщение · #6

Olenevod пишет:
Если кто то все же согласен помочь, прикрепляю таблицу хэшей

Есть 2-а i5 & quad ! Давай прогу и методу по запуску ! Запустим на удачу !




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 07 декабря 2011 14:35
· Личное сообщение · #7

Tyra +1
Могу тоже побрутить



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

Создано: 07 декабря 2011 16:11
· Личное сообщение · #8

Небудет ли это модификация RC5?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 декабря 2011 16:34
· Личное сообщение · #9

V0ldemAr чего бы? ГПСЧ нет, перестановок нет, и прочего тоже нет.

Насчет брута толпой. Если будет нормальный софт, где не надо юзать отладчик или компилятор, а просто в ини файле задал параметры, запустил, потом забрал результирующий файл, то могу подключить ~60-~80 квадров. Ну на софт тогда еще и ложится определение числа процов и распараллеливание на ядра.

-----
Yann Tiersen best and do not fuck




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

Создано: 07 декабря 2011 18:23
· Личное сообщение · #10

PE_Kill пишет:
Ну на софт тогда еще и ложится определение числа процов и распараллеливание на ядра.

Для начала и под один проц сойдёт, Так для проверки ! На Первый Раз можно пускать несколько копий с разными ini !




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 07 декабря 2011 18:51
· Личное сообщение · #11

Присоединюсь к бруту, если будет софтина с настройками в ini. i7

-----
Research For Food





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

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

Tyra ты явно в программировании не шаришь, ибо данный функционал решается на раз-два:
GetSystemInfo(SystemInfo);
CpuCount := SystemInfo.dwNumberOfProcessors;
for i := 1 to CpuCount do
CreateThread(...

-----
Yann Tiersen best and do not fuck




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

Создано: 07 декабря 2011 20:24
· Личное сообщение · #13

Я проверил -> быстрее.
Поверю твоему опыту.
Младшие биты нули, а переполнение старших бит уходит в процессорные флаги.
Утренний тупняк у меня.)
А что и ключи и данные инициализируются одним и тем же значением?
Тут не совсем понял вопрос. Данные шифруются своим собственным шифрованным значением, т.е. грубо говоря сами собой.

Спасибо всем откликнувшимся. Если честно, мне бы не хотелось кого то особо напрягать, т.к. брутить, возможно, придется не один раз и по разным алгоритмам. Но софтинку простенькую накидаю на всякий случай.)




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 07 декабря 2011 20:46
· Личное сообщение · #14

PE_Kill пишет:
Tyra ты явно в программировании не шаришь, ибо данный функционал решается на раз-два

Так а где привязка потоков к процессорам? Тогда уже надо аффинити маски заюзать. А то ведь все потоки могут на одном процессоре исполняться.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 08 декабря 2011 05:16
· Личное сообщение · #15

Если это не гипертрейдинг, то можно не заморачиваться.

-----
Yann Tiersen best and do not fuck




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

Создано: 08 декабря 2011 07:31
· Личное сообщение · #16

Выяснил что данные дополнительно шифруются 64-битной константой . Брут откладывается пока я не выдерну алгоритм и не расшифрую хэши, пока просто пропатчил проверку.
Вопрос к тем кто работал с видеокартами: есть смысл заморачиваться и писать брут на CUDA? Просто для меня написать что то на Си равносильно подвигу...



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

Создано: 08 декабря 2011 10:49
· Личное сообщение · #17

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




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

Создано: 08 декабря 2011 14:14
· Личное сообщение · #18

А CUDA только у NVidia?




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

Создано: 08 декабря 2011 14:20
· Личное сообщение · #19

-Sanchez- пишет:
А CUDA только у NVidia?


Да.
У ATI/AMD FireStream.

-----
127.0.0.1, sweet 127.0.0.1


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

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

Создано: 08 декабря 2011 16:59
· Личное сообщение · #20

-Sanchez- пишет:
А CUDA только у NVidia?

Нет. FirePro держит куду, точнее общий для них OpenCL.

Переписать под куду что ли... Можно еще сделать вариант для Core iX (SSE3), но это уже не ко мне...

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

Ошибаешься. Ноутбучная карточка 520M работает с той же скоростью, что и Core i7... Все зависит от задачи и от реализации алгоритма. Есть задачи, которые вообще нельзя распределитель на параллельные рассчетные узлы. Короче все не так однозначно.



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

Создано: 08 декабря 2011 18:24
· Личное сообщение · #21

Кстати если переписать на х64 или SSE то можно оптимировать получше так как все будет в регистрах и без обращения к памяти.



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

Создано: 08 декабря 2011 19:03
· Личное сообщение · #22

Olenevod
В общем ждем твоих сорсов, все оптимизируем и распределим на брата. Я уже жду не дождусь, когда моя видеокарта/проц снова будут жарить воздух)))

P.S. Все задачи, которые стояли, уже перебрутил.



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

Создано: 09 декабря 2011 01:24
· Личное сообщение · #23

Будет CUDA, могу GTX260 свой напрячь, если не перегреется, и E8500@3.7
Только было бы здорово, если бы брутфорсер было несложно запустить: времени сейчас совершенно нету, чтобы напильником обрабатывать.



Ранг: 22.5 (новичок), 18thx
Активность: 0.050
Статус: Участник

Создано: 09 декабря 2011 02:26
· Личное сообщение · #24

+1
GTX285




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 09 декабря 2011 04:41
· Личное сообщение · #25

GTX460

-----
Yann Tiersen best and do not fuck




Ранг: 146.7 (ветеран), 1thx
Активность: 0.070
Статус: Участник

Создано: 09 декабря 2011 08:42
· Личное сообщение · #26

поддержу...
Core i7 4Ghz + GTX285



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

Создано: 09 декабря 2011 11:52
· Личное сообщение · #27

{
CPU: 2 x
GPU: 1 x GTX460

CPU: 2(4) x
GPU: 1.5 x GTX9800GX2

Network (only on several hours)
CPU: 16 x
GPU: 4 x GTX460
}



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

Создано: 09 декабря 2011 11:59
· Личное сообщение · #28

GPU: GT 525M, Core i7 2670QM
GPU: GT 520M, Core i5 2410M

У кого-нибудь Core i7 Extreme есть?



Ранг: 123.0 (ветеран), 10thx
Активность: 0.060
Статус: Участник

Создано: 09 декабря 2011 12:49
· Личное сообщение · #29

Olenevod, пишите быстрее брутер, а то топик скоро превратится в парад конфигураций

-----
.[ rE! p0w4 ].


| Сообщение посчитали полезным: _ruzmaz_, -Sanchez-


Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 09 декабря 2011 14:28
· Личное сообщение · #30

cpu 2 ядра, есть 9800gt
так же могу поднапрячь пару одноядерников, и 1-у 8600 gt


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


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