前言
第一次遇见符号修复,于是就记录下来了。
分析
首先拿到题目,emmm,全是IDA无法识别的函数,而且函数表特别多,说明程序去除了符号表,并且使用的是静态链接。所以需要手动修复符号表。全局搜索字符串可以看到gmp字样,猜测是使用了gmp的静态库。(当然可以使用nm ldd 等命令来进行查看)
获取gmp的静态库
网上搜索了一番没找到现成的静态库,所以只能字节编译了。
按着这里的步骤来。就可以成功的获取到libgmp.a
###生成sig签名文件
这里可以参考我写的另一篇博客
我在生成sig签名时遇到了一个问题,还好最终解决了。
提示我在aors.o模块中出现未知的重定位符。怎么办?
使用ar -d删除有问题的模块,直到不再报错。将生成的sig文件导入后,发现程序仍然很模糊!
但是相比一开始还是能隐约分辨出一些东西的!但是为什么仅仅识别出了一部分的gmp的函数呢?!这部分我放到后面。
分析算法
这里需要取了解一下gmp的库函数都是干什么的。基本上就是一个ras。得到p,q,e,n就可以解决了。。还好我对rsa也比较的了解。简单分析了一下
解题脚本
c=0x448EEEBA1CF31BA2E9E22A9E6F37AB2C70A2E19485E819A8CB5D897E65B01DB6E692DD6D0B30
e=65537
q=0x9703D6BF1C83E5283B493280E3023189C1FCEB
p=0xD0E7CDA746B95CC87A9950A39D517741673BB5
emm脚本写的太丑了,就不贴了!
解决问题
之后我便开始了解决问题的过程。一开始我以为是因为IDA68和IDA70的区别,于时我在两个版本下分别生成了sig文件。但是结果是一样的。我之前实在gcc-7.4的环境下编译的gmp,我想会不会是因为编译环境的不同造成的!于时我使用ubuntu14.04(gcc-4.8.4)再次编译gmp得到对应的.a文件。同样的生成sig文件,这时我发现,在生成pat文件时,没有报错。同样的导入到IDA中,发现更加匹配不上了,基本上没有改变!这时我大概想到问题的原因是gcc版本的不同!但是我不会更改gcc的版本,而且我总不可能每个版本都尝试一遍吧。所以我请教了一下出题人,他使用的是gcc-5.4,好吧,正好学一波如何切换gcc的版本。
总结
通过这次的题目,确实学到了很多东西!符号表的修复,gcc的切换,遇到问题,解决问题的过程和方法!生活很美好!
参考文章
Re | 首次遇见符号修复 gmp库
Re | 首次遇见符号修复 gmp库
今天的文章gmp是指什么_GMP是什么简称[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/62882.html