обратный алгоритм

Тема в разделе "WASM.RESEARCH", создана пользователем Avoidik, 24 июл 2005.

  1. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    Всем привет!

    Значит проблема вот в чём, не могу создать обратный алгоритм (туплю наверно), есть программа которая

    проверяет регистрацию следующим образом: серийник из 9-ти цифр (и только цифр), первые из которых четыре известных,

    остальные пять неизвестны, этот составной серийник должен делится нацело на 11 (т.е. остаток должен

    быть нуль). Вроде всё просто, а выход никак не могу найти. Помогите плиз.
     
  2. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
  3. aSL

    aSL New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    43
    Адрес:
    Russia
    Логично утвержать, что из последовательности 11 подряд идущих чисел одно является искомым....
     
  4. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    Stiver, да вообщем-то проблема в этом, но есть и другая:



    серийник вида: 1234xxxxx, где xxxxx - любое число, до деления и после деления на 11, перед серийником должна присутствовать последовательность 1234
     
  5. OLS

    OLS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2005
    Сообщения:
    322
    Адрес:
    Russia
    Пойдем с конца :



    1) дано (1)(2)(3)(4)(x)(y)(z)(t) * 11 = (1)(2)(3)(4)(?)(?)(?)(?)(?)



    2) перемножаем левую часть :

    (1)(2)(3)(4)(x)(y)(z)(t) * 11 = (1)(3)(5)(6)(4+x)(x+y)(y+z)(z+t)(t)

    (без учета переносов)



    3) максимально возможный перенос - (1)(3)(5)(8)(?)(?)(?)(?)(?)





    Наводит на мысли ?
     
  6. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    9999999*11=109999989<123400000

    если умножить максимальное семизначное число будет меньше, чем надо

    12340000*11=12340000*10+12340000=135740000>123400000

    если умножить минимальное восьмизначное число, подходящее под описание (лидирующие 1234*) будет больше, чем надо

    вывод: нет решения
     
  7. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    OLS

    Zerro Crash



    1234 дано скорее всего в качестве примера, реальные числа другие, хотя:



    Avoidik



    Ты уверен, что сохраняться должны первые 4 цифры? При умножении на 11 в принципе можно сохранить только одну первую цифру.
     
  8. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    OLS, не наводит :\

    Zerro Crash & Stiver, число 1234 дано ошибочно, на самом деле я выяснил, что первые четыре цифры должны быть 5127, 5128 или 5129 (и именно первые 4-е), если судить по проверке Zerro Crash, то в таком случае решение есть
     
  9. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    9999999*11=109999989<512700000

    если умножить максимальное семизначное число будет меньше, чем надо

    51270000*11=563970000>512900000

    если умножить минимальное восьмизначное число, подходящее под описание (лидирующие 512?*) будет больше, чем надо

    вывод: нет решения



    гы
     
  10. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    Zerro Crash, что-то не стыкуется, т.к. для этой программы есть кейген, следовательно и решение есть
     
  11. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    Avoidik



    вот и я о чем.. может там не 11? или алгоритм другой? так как ты сказал - сам видишь, логика неопровержима
     
  12. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    алгоритм проверки упрощённый донельзя:



    есть текстовый буфер с серийником 512900000, далее этот текстовый серийник конвертируется во float (st0), потом st0 запихивается в dword, далее dword делится на 11, если остаток ноль, то программа зарегистрирована, если не ноль, то нет
     
  13. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    Avoidik

    серийник конвертируется во float (st0), потом st0 запихивается в dword

    _______________



    а поподробнее про эту махинацию?

    что значит "конвертируется"?


    Код (Text):
    1. data db "512900000",0
    2. start:
    3. fbld  offset data
    4. fstp  eax
    5. div   11
    6. test  edx,edx
    7. jz    ok
    8. jmp   invalid_serial




    так?
     
  14. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    конвертируется в смысле: был серийник в текстовом виде 512900000, а стал в st0 512900000.0