怎么辨别一个软件使用什么语言编写的?

每种编译器编译出来的二进制代码都有相应特点。如果这个软件没有被加壳过,你可以去找一个叫PEID的软件,大致上可以判断是什么语言写的。


如果是GUI的程序,有个很好的方法,用spy++这个微软的小工具来看,从类名前缀就能看出是什么编写的。我简单罗列下:
1、afx__开头的:mfc写的;
2、t_开头的:一般是delphi,少部分是c++builder;比如主窗体一般是tMainForm;
3、thunder_开头的:一般是VB6写的;
4、windows__开发头的,一般都是.net写的;
5、awt__或者swing__开头的,一般都是java写的;
6、其他的直接以win32api gui控件开头的,一般都是c++或者VC++写的。
7、其他请补充.......


首先看是什么平台下运行的,其次看软件的文件组织结构,毕竟不同的语言有不同的链接库组织方式。


以前做过这方面的软件,每个编译器在编译生成程序的时候,都会在程序的某个地方插入一段标识串,具体位置我记不清了,整个标识串可能因为版本的不同,某些位不一样,但是可以忽略中间一些字符串,一般匹配几十个字节能匹配到的就匹配出来了,其实PEID就是这样识别的,只是这些匹配的数据需要大量的验证,做加密解密的已经总结出很多了。PEID的配套txt就是总结出来的。
如果一个软件被加过壳,或者做过特殊的处理,这些标识就可能被改变,作为识别是否是加过壳的程序。以前我做过的识别程序,大部分都能识别,会有错误,但是识别的正确率还是可以的,和PEID差不多,我只知道windows上的PE文件是这样。
知道是什么编译器,大概就能猜出是什么语言,也只能是大概,如果一个编译器有多种语言,我觉得还是没有办法,比如你知道是用vc写的程序,但是c和c++还是分不清,甚至是否内联了汇编,你也不知道。但是貌似根据程序的数据段,代码段的特点,可以发现一些蛛丝马迹,但是没试过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值