1. IDA 反编译后结果如下代码。
见后面。
2. 分析发现使用了gmp运算库,做了sig 加载, 但是在main里,大部分不识别。
于是打开gmp文档, 结合文档,推断函数功能, 确定了大部分的函数:
https://gmplib.org/gmp-man-6.1.2.pdf
发现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:
https://en.wikipedia.org/wiki/Wiener's_attack
python 代码, g到一份如下:
https://github.com/pablocelayes/rsa-wiener-attack
结合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
http://tools.pediy.com/windows/Cryptography/calculator/rdlp/RDLP.rar
方法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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课