程序可以分为很多种,一个脚本也能首先功能也称之为程序,还有比如编译好的二进制程序。例如C语言、Python、Go、Java、Rust等语言编译成EXE程序,如果不给你看源代码,你将如何判断这个程序是用使用哪个语言编写的呢?
GUI
首先,GUI可以判断语言使用的库,从样式上就可以判断,当然有一些使用前端架构编写的GUI就难以分辨。当然也不一定准确
例如Python长这样(TK库)
Java长这样
报错信息
当然如果没有命令行,也可以从报错中看出端倪
python的报错,如SyntaxError
、TypeError
、ValueError
等,要么就算缺少啥依赖,要么就算异常处理导致的。
SyntaxError: invalid syntax (example.py, line 5)
NameError: name 'undefined_variable' is not defined
TypeError: can only concatenate list objects (not "str") to list objects
Java的报错,特别长的类命名一看就java
java.lang.NullPointerException: Attempted to use null object
java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10
java.lang.IllegalArgumentException: Invalid argument exception message
go的报错
fatal error: index out of range
panicked at 'index out of range' panic.go:46
fatal error: stack overflow
rust的panic!
thread 'main' panicked at 'index out of bounds: the length is 3 but the index is 10', src/main.rs:2:20
使用DIE
DIE可以尝试判断语言,像Go、Python非常好判断
但是Rust就无法看出
这时候,我们可以查看字符串
GO,看有没有一些Github的地址
Rust,搜索rs文件,cargo字符串等等
同样使用DIE工具就可以看
直觉
大佬说ida打开看能不能看懂
一点看不懂就是rust
懂一点就是go
看懂大部分就是c
不知道大家是怎么知道程序是使用什么语言实现的呢?
加入逆向群一起学习