首页
社区
课程
招聘
[讨论]IDA如何识别类名?
发表于: 2015-5-21 21:57 10650

[讨论]IDA如何识别类名?

2015-5-21 21:57
10650
静态分析SO档时, 能看见许多类与方法名
例如 cocos2d::CCTouchDispatcher::touches(int result, cocos2d::CCSet *a2, int a3, int a4)
很好奇IDA如何做到的? 通常release版应该不带debug讯息才对啊!?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 8217
活跃值: (2726)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用RTTI吧?
2015-5-22 07:12
0
雪    币: 52
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
古歌了下...似乎您就是正解!  非常感谢阿!!
2015-5-22 18:18
0
雪    币: 8217
活跃值: (2726)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
ida分析so不太懂,瞎说的,分析pe好像是用flirt来匹配的,命名也不太清楚,名字修饰各个编译器的实现不太相同。好像,ida在分析pe时不会用到rtti的。
2015-5-23 00:28
0
雪    币: 52
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也还没查清楚,先说出我目前的认知与疑惑:

认知:
1.每个编译器,rtti的实现不尽相同.
2.因此ida要先识别编译器,并且ida要了解此编译器rtti的实现方法,才能够利用rtti识别函数名.

疑惑:
1.编译器很多种,ida真能够每一个都识别出?
2.ida是否依靠其他方式来识别函数名?

option,谢谢你给我方向!
2015-5-23 09:25
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
IDA自带的FLIRT签名只包含若干种较为固定的编译器,例如微软的VC系列,宝蓝BCB系列等。开源的编译器,比如GCC,Clang等,由于变种太多,每个操作系统构建的都可能不一样,IDA自带的签名并不包含。这部分编译器,需要自己用IDA提供的签名创建工具去创建FLIRT签名。而且,自带的签名,通常是一些编译器的CRT运行库,像cocos2d这种开源的库,不会自带。除非你自己创建的,否则肯定不会有。
从你的情况看,不太可能是通过RTTI实现的,最大的可能是,你的so文件带了调试符号Release版带调试符号并不是奇怪的事情,因为一旦出现Bug,还要靠符号来定位错误位置的。尤其是像cocos2d这种开源的东西,更加没有隐藏源代码信息的必要。符号有可能嵌在可执行文件里面,也可能是独立的文件。这里,看上去是嵌在so里面的。所以,IDA直接解析so里的调试符号得出了类名等符号信息。
要想确认,你可以用strip工具处理一下so,确保去掉调试符号,再看看IDA是否还能识别。
2015-5-23 09:57
0
雪    币: 52
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
thebutterfly, 你提供的资讯好多阿!! thank you!  不过一时消化不了QQ...我还太嫩
不过我有做个实验,strip前的so,使用readelf输出的结果 和  strip后的结果完全一样..!
cocos2d::CCTouchDispatcher::touches函数 依然可以在dynsym段 找到

我目前的猜测是:  touches函数设计成供其他程式调用  因此不能被strip
2015-5-27 15:11
0
游客
登录 | 注册 方可回帖
返回
//