• 如何识别IDA反汇编中动态链接库中的函数


    在使用IDA静态反汇编时,如果正在逆向的文件中有动态链接库函数(比如调用了程序自定义so库中的函数),IDA只会显示一个地址,跟进去会发现是延迟绑定中关于plt的代码,无法知道具体调用了哪个函数,对于逆向起来很是麻烦,本文介绍如何识别这样的函数。

    按道理讲,虽然不能动态调试,静态分析不能看到运行时绑定的地址,但是具体动态链接的过程一定也是根据文件中的信息,所以静态也一定可以知道调用的是哪个函数,但是我没有发现如何使用IDA自动确定(如有高手麻烦留言告诉我),于是通过查阅《程序员的自我修养》动态链接相关内容,找到了识别动态链接库中函数的方法。需要识别的函数是sub_412160,如图所示:

    从汇编代码点进去会发现是plt相关代码,在ARM64中,@page是取页440000(4kb整数),@PAGEOFF是取页内偏移20,简单来讲这段应该是取出440020地址存储的数据放X17,然后跳转过去,到了got.plt中。

    这里面存的全是一样的地址,正如书中写的那样,都还没绑定具体运行时的地址,再跟两步发现到了地址是0的地方,就不理解了,可能是链接器的地址?

    走了这么多弯路,跟完了延迟绑定的过程,下面来看如何识别出sub_412160。

    ELF文件中存储了导入的所有函数符号信息,在IDAi的mport窗口中可以看到,不过IDA没有自动显示出来这些函数的地址,但在Linux下使用

    readelf -sD 文件名| grep 小写地址 

    查看该文件可以看到地址动态符号的地址,grep查找一下就是所需要的识别的函数名。

    ELF文件中还存储了needed的动态链接库,IDA中写在了该文件的最开始,向上拉窗口可以看到,我们只要从这些so库中找识别出的函数名即可。使用

    grep -rn “函数名”

    即可找到调用的哪个库中的哪个函数。

    此外,还有这种形式的动态链接调用,再次挖坑做以记录碰到再研究。

    https://reverseengineering.stackexchange.com/questions/9033/how-to-recognize-the-function-call-in-a-dynamic-lib

    By Ascii0x03,转载请注明出处:http://www.cnblogs.com/ascii0x03/p/8313451.html

  • 相关阅读:
    将DataTable转成Json字符串
    开放试用,速来!
    你问我答:DevOps完美实现一定要用容器吗?
    DevOps让金融业数字化转型更敏捷 | 分享实录
    博云成为容器云代表性厂商,入选Gartner《2020年中国ICT技术成熟度曲线报告》
    你问我答:微服务治理应该如何去做?
    BoCloud博云获中电基金、蔚来资本C+轮战略投资
    企业如何通过DevOps在数字化浪潮中“C位”出道?
    Microsoft Teams Toolkit for Visual Studio Code
    针对开发人员的SQL Server面试问题
  • 原文地址:https://www.cnblogs.com/ascii0x03/p/8313451.html
Copyright © 2020-2023  润新知