本文阅读对象为与软件相关工作的朋友,一家之言仅供参考。
我们在开发一款软件的起始阶段,技术负责人要做的第一件事大概就是做技术选型。
技术选型件事是一个综合性的考量,需要考虑的因素很多。
一个合适的技术选型对软件的后期发展有着很大的影响。
本文就站在一个软件保护的角度,来对比一下当下流行的编程语言。
“保护”这个词,我们暂时先将范围设定为防止破解或者反编译。
编程语言方面,我们就暂时限定为以下常见的几种:
- Python
- Java
- JavaScript/TypeScript
- C/C++
- C#
- Go
- PHP
- Rust
- Objective-C
- Swift
- Kotlin
当然还有其他的编程语言,我们后面有机会再来整理。
每种编程语言都有自己的优缺点,也都有自己的应用场景,这里不讨论语言的优劣。
语言 | 反编译难度 | 反编译工具 |
Python | ★ | uncompyle6 |
Java | ★ | JD-GUI |
JavaScript | ★ | - |
C/C++ | ★★★★ | IDA pro |
C# | ★ | .Net Reflector |
Golang | ★★★★★ | - |
PHP | ★ | Dezender |
Rust | ★★★★★ | - |
Objective-C | ★★★ | class-dump |
Swift | ★★★★★ | - |
Kotlin | ★★★ | 同Java |
在上述列表中,反编译难度,主要指的是工具的丰富程度以及反编译之后的代码可阅读性。
JavaScript/TypeScript属于脚本语言,严格来说,不存在编译,也就不存在反编译。
对JavaScript/TypeScript代码的保护一般是压缩和混淆,无法做到很好保护。
其实对于JS,Python和PHP这类脚本语言基本都差不多,无法很好地保护开发的应用软件。
最好的保护就是将应用运行在自己的服务器上,
通过对服务器的保护来保护自己的应用软件。
Java应用范围非常广,使用的人也多,当然反编译的工具也很多,反编译出来的代码可阅读性也很不错。
C#,怎么评价你呢?
微软的作品、静态语言、执行效率好、可以进行编译,但是反编译软件实在是太强了。虽然也可以做到软件的保护,但是成本也不低。
ILSpy/dnSpy几乎可以完美地让你得到软件源码。
对于iOS端的编程语言Objective-C和Swift,首先有iOS的机制保护,本身获取到应用就有一定的障碍。
Objective-C的反编译工具class-dump,有兴趣可以试试,反编译得到的源码和原文件可以做到一一对应,可读性也很不错。
Swift现在还没有发现有反编译工具,想要对应用做点事情,貌似只能进行逆向了。
C/C++,老牌的编程语言,对开发出来的应用的保护能力非常强,
严格来说,现在还不存在对C/C++应用的反编译,可以反汇编,而且难度也挺高。
Golang和Rust,这俩很强,编译器直接将代码编译成机器码,和C\C++类似。
想反编译?
能做点逆向和反汇编倒是可以试试,但是你如果想做这个尝试,大概率会让人崩溃。
这个时候,你可能会说,那只能使用C\C++、Golang和Rust?
那当然不是。
在文章开头,我们说过,每种语言都有自己的优缺点,都有自己的应用场景。
大家可以根据自己的实际情况慎重地做出技术选型。
更多精彩内容发布于公众号:代码乾坤 (CoderLand)
本文暂时没有评论,来添加一个吧(●'◡'●)