Знаю на 100%,что он в проге используется, как его найти в теле программы? Пробовал PeID, он нашел т.н. IETF-768, IETF-1024 prime modulus и т.д. Я так понимаю - это может использоваться как большое простое "n" ... но проверить это не могу... Явно используется только здесь: Код (Text): .text:00028694 Diffie_Hellman___ ; DATA XREF: .rdata:off_57894o .text:00028694 STMFD SP!, {R4-R6,LR} .text:00028698 MOV R4, R0 .text:0002869C MOV R2, R1 .text:000286A0 LDR R5, =_IETF .text:000286A4 MOV R6, #0 .text:000286A8 LDR R0, [R5] .text:000286AC MOV R3, R6 .text:000286B0 CMP R0, #0 .text:000286B4 BEQ loc_286D8 .text:000286B8 MOV R1, R5 .text:000286BC .text:000286BC loc_286BC ; CODE XREF: Diffie_Hellman___+40j .text:000286BC LDR R0, [R0] .text:000286C0 CMP R0, R2 .text:000286C4 BCS loc_286D8 .text:000286C8 LDR R0, [R1,#4]! .text:000286CC ADD R3, R3, #1 .text:000286D0 CMP R0, #0 .text:000286D4 BNE loc_286BC .text:000286D8 .text:000286D8 loc_286D8 ; CODE XREF: Diffie_Hellman___+20j .text:000286D8 ; Diffie_Hellman___+30j .text:000286D8 LDR R0, [R5,R3,LSL#2]! .text:000286DC CMP R0, #0 .text:000286E0 BEQ loc_28700 .text:000286E4 MOV R1, R0 .text:000286E8 MOV R0, R4 .text:000286EC BL sub_28754 .text:000286F0 TST R0, #0xFF .text:000286F4 LDRNE R0, [R5] .text:000286F8 LDRNE R0, [R0] .text:000286FC LDMNEFD SP!, {R4-R6,PC} .text:00028700 .text:00028700 loc_28700 ; CODE XREF: Diffie_Hellman___+4Cj .text:00028700 MOV R0, R6 .text:00028704 LDMFD SP!, {R4-R6,PC} .text:00028704 ; End of function Diffie_Hellman___ .text:00028704 .text:00028704 ; --------------------------------------------------------------------------- .text:00028708 off_28708 DCD _IETF ; DATA XREF: Diffie_Hellman___+Cr В sub_28754 каких-либо супер-математических операций не заметил... Не его (алгоритма) ли это часть и есть ли другие способы его идентификации? P.s.: да и вообще интересно как на asm'e (лучше для ARM'a,но не критично) реализуются операции возведения в степень по модулю большого простого числа (подозреваю, что вопрос элементарный - если что, не пинайте )
Посмотри, например, здесь - http://www.macro.aaanet.ru/apnd_13.html (Ну и много еще где, ключевые слова для поиска "арифметика длинных чисел".) Только собственно возведение в степень в таких случаях не используют. Делаются последовательные операции умножения числа на себя по модулю, так как: g^a mod p = (...((g*g mod p)*g mod p)*g mod p ...)*g mod p В этом случае нет необходимости хранить ОГРОМНЫЕ промежуточные значения степеней и без того _длинных_ ;о) целых.
g^a по модулю p никогда не вычисляется умножением на g a-раз. Учите быстрый алгоритм возведения в степень.
Спасибо всем ответившим - пока изучаю найденные материалы... Есть ещё варианты? (по идентификации в частности...)
Да, все верно. (Упрощения в изложении всегда чреваты замечаниями... ;о)) Просто главное, что я хотел сказать, так это то, что никогда значение g^a не вычисляется полностью перед единственным взятием модуля в конце вычислений. На промежуточных этапах производится взятие промежуточного результата по модулю.