记录一次so修复

        样本为 某60 的 libjiagu_a64.so。

        先用ida打开发现 导入表 和 导出表 都是空的,如下图:

ida识别出来的方法名也都是这样的:

用010editer打开看一下文件结构。

一看节就不对劲,并且没有符号表。

那既然这里都有问题,elf header肯的也是伪造的了。

先看一下这个so的elf header的内容。

 第一行没什么有用的信息,第二行看到程序入口点是0x2A70。

第三行section table header偏移是11A1F0。

第四行003A知道每个section大小是0x40,一共有6个section,0x003F知道最后一个section是.shstrtab。

先看看假的.shstrtab

很明显这个指向data数据是不对的,并且位于文件尾部属于section table的位置,

先把这16个字节删掉,然后在文件中找到正确的section_name 如下:

可以看到真正的.shstrtab的地址是 0x119B15 。

        同时这个正确的.shstrtab结尾 0x119BDD 就是section header table的开头,不过是否是真的先保持怀疑。        

        先计算一下一共有多少个section:0x11A35F - 0x119BDD = 0x782

        在除以efl头中描述的每一个section大小0x40。

        0x782 / 0x40 转为十进制相除 1922 / 64 = 30.03125

        发现除不尽有余数,那么0x119BDD也不是正确的section table header起始位置。

        那么 64 * 30 = 1920 (0x780) 就是真正段的大小。        

        所以修改一下elf header

        section table header 偏移改为 0x119BDD

        每个section table的大小改为1E

        .shstrtab改为1D

        保存刷新。显示如下:

       最后一步,根据最开始的信息修改.shstrtab。

        将s_offset修改为正确的地址:0x119B15

        将s_size 修改为所选正确数据区域大小: 200 也就 0xC8

        在上面改和下面改是一样的,下面改方便一点但是要注意进制转换。

        保存刷新重新读取:

最最最最后一步,去掉下面多余的,把真正的.shstrtab 下标为23的 和 section table的数量在elf header中修改。

00 00 00 00 40 00 38 00 06 00 40 00 1E 00 1D 00

改为

00 00 00 00 40 00 38 00 06 00 40 00 18 00 17 00

拖到ida里查看一下:

也都可以正常查看了。 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值