游戏安全实验室 首页 活动 查看内容

【答案推荐】预赛PC进阶版

发布于:2017-8-4 14:08   |    80123次阅读 作者: 管理员    |   原作者: 欧阳旭   |   来自: 原创

​感谢PC组欧阳旭提供的答题过程






找到按钮响应


因为是 MFC 程序,使用 xspy,拿到 Go 按钮响应函数,并反汇编


xspy

反汇编

check函数


get4mgetkey,较简单可以直接参考 keygen 代码

KeyChain::setkey

里面用到 x[100] 数组表示大数,x[99] 为有效数字长度,x[98] 为符号,0 为正数,45('-')/48('0') 为负数,这里很奇怪,运算中是 45 表示负数,但后面的解析部分又是 48 表示,怀疑是作者 bug。用动态调试从输入输出确定每个函数的运算规则。


gen_pqgen_e,较简单可直接参考 keygen 代码

KeyChain::sign



x64encode 可以参考 keygen 中的逆过程

checksign

 sign 返回的 16 字节,每8字节转成,64位整数 x1x2,与之前的 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


分享到:
踩0 赞0

收藏

上一篇:【答案推荐】预赛android标准版

下一篇:【答案推荐】预赛android进阶版

相关阅读
最新评论
B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部