Re | 首次遇见符号修复 gmp库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33438733/article/details/79968964

前言

第一次遇见符号修复,于是就记录下来了。

分析

首先拿到题目,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的切换,遇到问题,解决问题的过程和方法!生活很美好!

参考文章

https://blog.csdn.net/liboyang71/article/details/77152577
https://blog.csdn.net/TinyMore/article/details/68921884

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页