发布于:2017-8-4 14:08 | 93075次阅读 作者: 管理员 | 原作者: 欧阳旭 | 来自: 原创
感谢PC组欧阳旭提供的答题过程 找到按钮响应 因为是 MFC 程序,使用 xspy,拿到 Go 按钮响应函数,并反汇编 xspy 反汇编 check函数 get4m、getkey,较简单可以直接参考 keygen 代码 KeyChain::setkey 里面用到 x[100] 数组表示大数,x[99] 为有效数字长度,x[98] 为符号,0 为正数,45('-')/48('0') 为负数,这里很奇怪,运算中是 45 表示负数,但后面的解析部分又是 48 表示,怀疑是作者 bug。用动态调试从输入输出确定每个函数的运算规则。 gen_pq、gen_e,较简单可直接参考 keygen 代码 KeyChain::sign x64encode 可以参考 keygen 中的逆过程 checksign 将 sign 返回的 16 字节,每8字节转成,64位整数 x1、x2,与之前的 m1-m4 做校验 幂模求底 后记 在 keygen 测试中,发现有些随机生成的 user 过不了,比如 2c80-f988-6ec0-73a8-f40c-bfc4-998d-3992 38a2-37b4-e81f-9014-4e49-50fc-c02d-5200 之后发现是程序的大数计算本身bug, powmod(2, 6090213376, 6090213377) 的结果应该是 1,但是程序的结果是 6090213378,比 m 还要大,调试到 powmod 最后的一步 div 时, 47065546320986625544 %6090213377 竟然是 6090213378。 |
最新评论
发表评论