это работало так:
есть сервер и есть клиент.
сервер задает клиенту вопрос, три переменных: a1, a2, a3
клиент должен правильно ответить серверу: result
если ответ серверу пришел верный, значит клиент настоящий.
сейчас это не работает, что то в клиенте изменили, скорее всего не алгоритм
я могу отправить настоящему клиенту любые a1, a2, a3, и получить верный result
также могу запросить a1,a2,a3 у настоящего сервера, послать ему result и узнать верно ли я ответил.
могу это все делать программно.
вопрос: возможно ли востановить Arr1, Arr2, const1, const2 без реверса оригинального клиента?
[Ответ]
MadFish 13:44 12.10.2009
Ну люди и MD5 ломают, так что этот хешек и подавно сломать можно. Вот только муторно, дорого и нафик никому не нужно [Ответ]
Сообщение от xxx-men:
это работало так:
есть сервер и есть клиент.
сервер задает клиенту вопрос, три переменных: a1, a2, a3
клиент должен правильно ответить серверу: result
если ответ серверу пришел верный, значит клиент настоящий.
сейчас это не работает, что то в клиенте изменили, скорее всего не алгоритм
я могу отправить настоящему клиенту любые a1, a2, a3, и получить верный result
также могу запросить a1,a2,a3 у настоящего сервера, послать ему result и узнать верно ли я ответил.
могу это все делать программно.
вопрос: возможно ли востановить Arr1, Arr2, const1, const2 без реверса оригинального клиента?
ну и тупо отправляй оригинальному клиенту запрос, дожидайся ответа, а когда они договорятся - влезай на линию[Ответ]
xxx-men 18:25 12.10.2009
Сообщение от alexz:
ну и тупо отправляй оригинальному клиенту запрос, дожидайся ответа, а когда они договорятся - влезай на линию
оригинальный содержит "ошибки" разработчика, да и какбы не труЪ будет.
2) a1^a2 div 0x20a и a1^a3 div 0x20a мы можем всегда посчитать. это будет х1 и х2
Сообщение от :
DWORD k1 = Arr11[x1] ;
DWORD k2 = Arr12[x2] ;
DWORD k3 = k1 + k2;
result = k3 ^ Arr2[(a1 + k3) % 0x20a];
3)
k3 = Arr11[x1] + Arr12[x2] можно заменить одним длинным массивом ArrX[0x20a][0x20a];
вот и получается:
Сообщение от :
DWORD a1;
DWORD x;
DWORD result;
DWORD arrX[0x20a * 0x20a];
DWORD arr2[0x20a];
result = arrX[x] ^ arr2[ (arrX[x]+a1) % 0x20a ];
x= x1 + 0x20a * x2;
х можно вычеслить легко.
[Ответ]
MadFish 19:30 12.10.2009
1 согласен хорь на здоровье
2 тоже согласен (хотя нафиг вводить х1 и х2 когда они равны и равны а2)
3 ни понял. сумма 2 массивов а и b есть массив c где с[i]=a[i]+ b[i] а не суперпозиция массивов или я тут что-то не улавливаю? (что будет элеметами ArrX[0x20a][0x20a] ???? чему равен например ArrX[10][10]? )
Сообщение от xxx-men:
x= x1 + 0x20a * x2;
х можно вычеслить легко.
1)
от а1 и а3 можем безболезненно избавиться полагая что a1=0 a2=a3 а если они меньше 522 то можно смело отбросить постоянное спотыкание на % 0x20a. мы получим полное покрытие массива Arr1 и соответственно все возможные константы к2, к2, к3 и соответственно резулт
2) хоть убей не пойму как ты собираешься получить "заранее просчитаный" массив Arr11[] ,Arr12[] если неизвестны константы const1, const2 -> arrX тоже получить не удасться (чему равны элементы???) те в данном случае нет ни массивов ни констант а только результат, я правильно понимаю ?
Сообщение от xxx-men:
ArrX[10][10] = arr11[10] + arr12[10] , при условии что a1^a2 % 0x20a == 10 и a1^a2 % 0x20a == 10
Сообщение от MadFish:
2) хоть убей не пойму как ты собираешься получить "заранее просчитаный"
DWORD k1 = Arr1[a2] ^ const1;
DWORD k2 = Arr1[a2] ^ const2;
DWORD k3 = k1 + k2;
мы не знаем Arr1.
мы знаем что для каждой a2 есть свое k3 и неебед.
значит можно k3 представить как функцию k3=f(a2) или как массив k3 = arrX[a2];
[Ответ]
MadFish 20:08 12.10.2009
Сообщение от xxx-men:
мы не знаем Arr1.
мы знаем что для каждой a2 есть свое k3 и неебед.
значит можно k3 представить как функцию k3=f(a2) или как массив k3 = arrX[a2];.
да ради бога, только что это дает в итоге? массив НЕИЗВЕСТНЫХ значений. и че с ним делать?
математически решение я не вижу (но собственно я и не математик)
можно попытаться алгоритмически продавить. "предполагать" разбиение резулта на 2 числа, такое что первое из них, являясь суммой двух слагаемых, разбиваемых на хоры константа1 и число и константа2 и тоже самое число, давало бы постоянные константы1 и константы2. но имхо можно сделать проще, ща подумаю.
[Ответ]
xxx-men 20:19 12.10.2009
Сообщение от MadFish:
массив НЕИЗВЕСТНЫХ значений. и че с ним делать?
у нас изначально тоже был массив неизвесных значений.
только теперь алгоритм получается проще.
a2=a3 это часный случай моего двумерного массива, вот он у тебя и получается линейный.
Сообщение от MadFish:
можно попытаться алгоритмически продавить. "предполагать" разбиение резулта на 2 числа, такое что первое из них, являясь суммой двух слагаемых, разбиваемых на хоры константа1 и число и константа2 и число, давало бы постоянные константы1 и константы2
Сообщение от xxx-men:
может "забить" на константы?
неполучится когда константы будут "постоянными" это будет "признаком" что мы похоже нашли правильное разбиение. это своиство по любому надо будет использовать. но я думаю что с вот этим
блин,
DWORD k3 = arrX[a2]; // все, ппц , некуда проще.
мы arr1 и константы незнаем, но они нам тут и не нужны
[Ответ]
MadFish 20:39 12.10.2009
ну и как ты раскрутишь веревку в обратную сторону? допустим я тебе скажу к3 =118. и че?
сдается мне есть какая-то простая зависимость между к1 и к2. ведь по идее это тупое накладывание одной и тойже маски на 2 константы.... маска одна и таже, константы не меняются. чета такое должно быть...
[Ответ]
xxx-men 20:43 12.10.2009
ну для начала надо раскрутить это: result = k3 ^ Arr2[(a1 + k3) % 0x20a];
зная k3 это можно будет легко сделать.
[Ответ]
MadFish 20:51 12.10.2009
не путай причину и следствие!!!
есть резулт = 154 мы можем предположить что к3=118 а Arr2[118] =236 че дальше?
мы тут с тобой своими выкладками весь народ распугаем гггыыыыыыыыы
[Ответ]
xxx-men 21:04 12.10.2009
Сообщение от MadFish:
есть резулт = 154 мы можем предположить что к3=118 а Arr2[118] =236 че дальше?
например, можно добится чтобы k3 было постоянно, а а1 менялось....
и получить массив arr2 перексореный на неизвесную константу.
...потом взять "следующюю" k3 и получить массив arr2 перексоренный и смещенный на другую константу [Ответ]
xxx-men, опять путаешь теплое с мягким. при разных значениях а2 (ну или а1 если тебе так больше нравиться) значение k3 МОЖЕТ менятся а вот значение const1 и const2 ПОСТОЯННО. если мы как раз и найдем такие постоянные константы при которох все будет верно это и будет признак того что мы правильно "предположили" к3 и соответственно правильно нашли значения массивов Arr1 и Arr2... блин все-таки должна быть простая зависимость между к1 и к2. чета я туплю [Ответ]
xxx-men 21:21 12.10.2009
Сообщение от olexus:
xxx-men, решения нет. тупо брутфорсить.
нифига, должно сростись.
Сообщение от MadFish:
при разных значениях а2 (ну или а1 если тебе так больше нравиться) значение k3 МОЖЕТ менятся
как говорят в нашей церковно-приходской школе "обОснуй" !!!
[Ответ]
xxx-men 21:29 12.10.2009
Сообщение от MadFish:
"обОснуй"
в нашей говорят "обоснуй или непоцан"
если
a1=0, a2=0, a3=0; k3 = X;
a1=1, a2=1, a3=1; k3 = X;
a1=2, a2=2, a3=2; k3 = X;
a1=3, a2=3, a3=3; k3 = X, дада, оно опять равно Х
....дальше продолжать?
теперь имеем формулу: result = X ^ Arr2[(a1 + X) % 0x20a]; , где a1 равно 1,2,3,4,5,6,7,8,9,10......
Сообщение от xxx-men:
если
a1=0, a2=0, a3=0; k3 = X;
допустим
Сообщение от :
a1=1, a2=1, a3=1; k3 = X;
а это с какого перепугу?
с чего ты взял что значение массива Arr1[0] == Arr1[1] ну или хотябы Arr1[0] ^ const1+Arr1[0] ^ const2==Arr1[1] ^ const1+Arr1[1] ^ const2 ?????
[Ответ]
MadFish 21:38 12.10.2009
так я совсем туплю пока лезит в голову только одно
ищем минимальные const1 и const2 такие чтобы
k1 ^ const1 =k2 ^ const2;
как нашли соответственно Arr1[idx]=k2 ^ const2 но ты поспрашивай еще у математиков, мож поизящнее чего предложат.
[Ответ]
xxx-men 21:40 12.10.2009
Сообщение от MadFish:
с чего ты взял что значение массива Arr1[0] == Arr1[1] ну или хотябы Arr1[0] ^ const1+Arr1[0] ^ const2==Arr1[1] ^ const1+Arr1[1] ^ const2 ?????
откуда ты взял [1] ?
a1 ^ a2 = a1^ a3 = 0, значит и вытягивать из массива Arr1 мы будем всегда первый элемент. значит k3 у нас будет константой.
[Ответ]
olexus 21:42 12.10.2009
MadFish, для получения индекса a-шки ксорятся, те индекс всегда при a1=a2=a3 будет 0
[Ответ]
xxx-men 21:45 12.10.2009
Сообщение от olexus:
те индекс всегда при a1=a2=a3 будет 0
если очень захотеть, то индекс будет всегда 666, при любых a1....
[Ответ]