【教程】如何利用IDA找到gamedata里面的signature签名 科普

我不当学长 管理员组 2023-2-26 1422

 

 

利用IDA查找函数签名(适配SourceMod)

 

背景:

  • 本文需要有一定的编程基础,你需要知道自己为什么要去找函数签名。
  • 本文得到了一位外国友人的帮助,感谢他的指导!!@VerMon

为什么要找函数签名?

  • 很多同学一开始都不明白,函数签名是啥,为啥要去找它。这里我就不发散开来说,这边我只提一个例子。
  • 某天,csgo更新了,然后服务器因为本次更新,某个插件崩了,然后我们在log里面看到是某个函数找不到了,而且这个函数是插件在gamedata.txt文件里面写的。我们完全没办法,只能等插件作者去更新gamedata文件。
  • 我们这个时候会想,要是我们自己懂更新gamedata的话,就不需要等别人了,这样多好啊!

我们需要哪些工具?

实战:

我们想找一个函数的对应的signature:

void CBasePlayer::Spawn( void )
 
这个函数在下面源码路径里面

第一步:看看这个函数里面有没有字符串

  • 字符串这里非常重要,如果某个函数没有字符串,那么查找signature的过程将会变得更加艰辛
  • 为什么字符串这么重要,因为字符串作为const 数据,编译之后存放到.rdata下面,对于反编译来说,找这种数据会非常方便

我们看到这个函数下面有如下字符串:Couldn't alloc player sound slot

    if ( m_iPlayerSound == SOUNDLIST_EMPTY )
    {
        Msg( "Couldn't alloc player sound slot!\n" );
    }

第二步:打开IDA,加载server_i486.so文件

按下SHIFT + F12,在弹出的框中CTRL + F,搜索对应的字符串,如下所示:

双击字符串进入IDA View-A窗口,然后右键对应的字符串行,再点击List cross refrence to ...

如果跳出来如下的窗口,并且对应的信息条数只有1个,那么证明我们已经找到了唯一对应的函数了!

双击它!!

步骤三:调用makesig.idc插件脚本,运算出signature

选择你上面步骤已经下载好的makesig.idc(我一般默认会放在IDA目录下面)

下面,在Output window里面已经有算出来的signature了。

结语:

  • 本文仅仅是一个简单地例子,如果你需要找一些不包含字符串的函数,可能要废一番周折。

推荐思路:

如果你要找的函数functionA并没有字符串,但是fucntionB调用了functionA,同时functionB里面有字符串,那么按照类似的方法找到functionB,然后梳理一下汇编逻辑(按下IDA F5按键,可以反编译回C代码),看看能不能找到对应的fucntionA


参考:

生肉,有能力兴趣可以硬啃一啃

视频:

SourceMod Reverse Engineering #1 | Intro to Sigscanning
https://www.youtube.com/watch?v=SD6Rn2D7IGo&t=530s


CSGO插件分享-申明 1、本网站名称:CSGO插件分享-中文站  网址:https://bbs.csgocn.net
2、本站的宗旨在于为CSGO玩家提供一个插件分享的中文资源平台,多数插件来源于SourceMod论坛,并配以中文介绍和安装教程。
3、欢迎有能力的朋友共享有趣的CSGO插件资源。
4、本站资源大多为百度网盘,如发现链接失效,可以点: 这里进行反馈,我们会第一时间更新。
最新回复 (0)
返回