1. IDA 反编译后结果如下代码。
见后面。
2. 分析发现使用了gmp运算库,做了sig 加载, 但是在main里,大部分不识别。
于是打开gmp文档, 结合文档,推断函数功能, 确定了大部分的函数:
a82K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4L8i4m8D9K9h3u0Q4x3X3g2G2M7X3N6Q4x3V1k6Y4L8i4m8Q4x3X3c8E0j5h3&6Q4x3X3b7$3i4K6u0W2x3g2)9J5k6e0u0Q4x3X3g2H3k6r3j5`.
发现2个大数,记为 N, E , 根据经验推理出大概的函数流程。考虑到可能采用RSA,
但是推理过程并未发现PowMod运算。考虑可能是取模 or 求商。
S1 + S2 一共70 bytes的 大写 Hex-Digits。
其中 S1 6 bytes, S2 64bytes。 S2恰好为N 长度的一半, 不妨记录为P。
要求 : N /P = Q, 并且S2是其中小的因子, P < Q 。
然后求得 Phi = (P - 1) * (Q - 1)
最后求 E模Phi 的逆 ,与 S1进行比较相等, 也就是 S1 * E = 1 mod (Phi)
3. 那么,结论就是
根据 E,N 求出 D, P 。 在RSA参数(N, E, D ) 中, 已知大指数E, 针对小指数D的攻击至少有两种方法。
方法1:
Wiener's attack 通用方法, 针对 D < N^0.25
该算法原理参考wiki:
baeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6W2L8W2)9J5k6i4N6A6K9$3W2H3k6h3c8A6j5g2)9J5k6h3!0J5k6#2)9J5c8Y4N6A6K9$3W2Q4x3V1k6i4K9h3g2F1k6i4u0Q4x3U0k6Q4x3U0x3K6z5g2)9K6b7Y4y4Q4y4h3k6S2N6s2c8S2j5$3D9`.
python 代码, g到一份如下:
3dfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6H3j5h3u0D9L8$3y4W2L8r3q4&6k6i4y4Q4x3V1k6J5M7$3q4Q4x3X3c8%4K9h3g2F1k6i4u0Q4x3X3c8S2N6s2c8S2j5$3D9`.
结合Wiener's_attack , 得到 D 。然后 通过 (N , E, D)来计算 P , Q。
特别说明: RDLP有这个功能, 只要把N , E填入, 点击 WIENER , 即可计算出 D 以及 P ,Q。
RDLP: RSA, Rabin, DSA/DSS Keygenerator and DLP Tool
参考:RDLP-Readme.txt 在压缩包RDLP.rar内
http://bbs.pediy.com/thread-66678.htm
77bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4c8G2L8$3I4K6i4K6u0W2M7r3g2V1K9i4W2Q4x3X3g2U0L8$3#2Q4x3V1k6%4K9h3&6V1L8%4N6K6i4K6u0r3b7%4u0&6M7s2c8G2k6%4u0S2M7r3S2&6i4K6u0r3j5$3q4D9j5%4g2D9j5i4c8G2M7W2)9J5c8Y4u0V1L8s2m8Q4x3V1k6d9c8p5I4b7i4K6u0W2M7X3q4J5
方法2:
考虑到小指数 d很小, E,N已知。 令 y = 2 , c = y^e mod N , 建立一个离散对数方程来求解d:
这里:
c= 17E73D7E3DCD777132626E613037545FCCDE058B667FF426A196093C98CF43017AF53EB957D9C
997411A1E4DD376B3AFE445567E294CD45DCB59FC3964C75E4A
n= 6248BC3AB92A33B000FDB88568F19727F92F79EB68FF6AD73203EFD20A3E331BE941C7AA28809
5F33BC4B255FD983114D480EFFBEE2E313E6218A57F9CCC8189
y= 2
建立离散对数方程:
c^d = y mod n
[培训]科锐逆向工程师培训第53期2025年7月8日开班!