当前位置:首页 » 编程软件 » 反编程的人

反编程的人

发布时间: 2022-04-20 18:47:20

❶ 帮帮我,我爸反对我学编程,我该怎么办

你说的结业考试是什么考试呢?
首先,学好编程,对于以后在IT行业就业,会有很大的帮助(IT行业可是连续多年高薪首位哦)。考完试以后不上学,只学编程,这是不太妥当的。想要深造,靠自己一个人的钻研这个可能性很小,一般都是要上大学,里面特别是上名牌的大学学编程,这样以后就业就业会有好的出路。不然的话,大公司一般是不会要那种靠自学成才的人的。
所以学好学校的课程是非常重要的,以后参加中考和高考都是免不了的。

❷ 为什么那么多人反对中文编程

你好,我国计算机领域弱是因为我们起步晚,计算机与1945年诞生,那时候中国还在内战,后来,文化大革命的十年加剧了中国的落后,还有一点需要强调,计算机技术的发展受到很多标准的制约,比如微软的操作系统,即使他一时落后,很多人也不会马上扔掉他,因为很多软件是基于微软的操作系统的,没有了他的系统,这些软件也无法使用,而迁移整个平台的费用也不少。很多计算机领域的技术标准都由外国人制定,我们处于被动,所以总是被人牵着鼻子走。至于中文编程,cpu的一些核心技术和相关标准全是国外发明制造的),中文编程即使不是其他语言的汉化,他的执行效率也不可能高于英文编程语言,关键字用英文还是中文没有本质区别,中文的优点没有在编程中体现。至于为什么很多人反对中文编程,大概是因为前几年的“汉芯”,“麒麟”事件使人们对搞这方面研究不信任。我的看法是中文编程有他的适用范围,但靠他来振兴国家IT实力,不太现实。
编程最重要的是算法,还要读懂操作平台中的一些文件,而这些文件是用英文写的
所以即使有了汉语编程编程也是很难的

❸ 如何进行反编程

我们按照三种不同的分类,从多个角度阐述反编译的基本过程。

如果按照反编译技术实施的顺序划分,则可以分为7个阶段,它们是:句法分析、语义分析、中间代码生成、控制流图生成、控制流分析、代码生成。

如果按照实践中的具体操作划分,一般也可以分为7个不同的步骤,分别是:文件装载,指令解码,语义映射,相关图构造,过程分析,类型分析和结果输出等。

以逆向分析为目的,反编译的各个阶段并不是一个严格的一遍顺序,而是存在着一些并行的模块,并且也需要通过循环执行分析过程来针对某些特殊问题(例如非N分支代码产生的间接跳转指令)进行分析和恢复。

反编译的处理过程,如果按功能区分,可以分为:前端、中端和后端三个部分。其实这种划分方式是将上述两种过程的阶段进行合并,也就是将几个反编译器阶段组合在一起。这样划分的好处是:通过设计不同的前端、中端和后端以实现针对多种源和目标的反编译器。

❹ 反编程是什么

一个软件,写代码,汇编(就是做成程序),然后加壳(就像给程序穿间衣服,不让别人容易拿到源码,这样可以保护你自己的利益,而且可以压缩空间)
反编译就是把程序还原回源代码。

❺ 逆向编程是什么

反编译,就是将编译好的程序变为源代码

但是基本是不可能的,除非编程汇编代码,然后经过高手翻译(太复杂。。。)

除非是个特别简单的程序,根据原理现写一个就可以。。。

❻ 对于一个已经编程好的程序,是否可以对他进行反编程

当然可以, 上网搜,可以搜到大把反编译器, 这样可以把别人做好的应用程序反编译成程序代码,从而进行分析。

java为例,java代码写好后,编译并打包成 .jar 可运行文件(相当于.exe)。这时可以上网找到比如“小颖反编译器”之类的工具进行反编,这样又可以把.jar反编成一堆原始的java代码。

由于有这个问题,所以程序员们为了防止自己的工作成果被人抄袭后来就产生了混洧器, 利用混洧器可以将jar文件中的资源进行混洧,这样虽然可以将.jar还原成源代码,但现在的源代码被随机地打乱了,很难看懂,基本不具备可读性。

当然有矛就有盾, 再历害的混淆器也有历害的反编器来破解它。

就像病毒和杀毒软件一样相生相克

❼ 如何防止程序员反编译

Java从诞生以来,其基因就是开放精神,也正因此,其可以得到广泛爱好者的支持和奉献,最终很快发展壮大,以至于有今天之风光!但随着java的应用领域越来越广,特别是一些功能要发布到终端用户手中(如Android开发的app),有时候,公司为了商业技术的保密考虑,不希望这里面的一些核心代码能够被人破解(破解之后,甚至可以被简单改改就发布出去,说严重点,就可能会扰乱公司的正常软件的市场行为),这时候就要求这些java代码不能够被反编译。

这里要先说一下反编译的现象。因为java一直秉持着开放共享的理念,所以大家也都知道,我们一般共享一个自己写的jar包时,同时会共享一个对应的source包。但这些依然与反编译没有什么关系,但java的共享理念,不只是建议我们这样做,而且它自己也在底层上“强迫”我们这么做!在java写的.java文件后,使用javac编译成class文件,在编译的过程,不像C/C++或C#那样编译时进行加密或混淆,它是直接对其进行符号化、标记化的编译处理,于是,也产生了一个逆向工程的问题:可以根据class文件反向解析成原来的java文件!这就是反编译的由来。

但很多时候,有些公司出于如上述的原因考虑时,真的不希望自己写的代码被别人反编译,尤其是那些收费的app或桌面软件(甚至还有一些j2ee的wen项目)!这时候,防止反编译就成了必然!但前面也说过了,因为开放理念的原因,class是可以被反编译的,那现在有这样的需求之后,有哪些方式可以做到防止反编译呢?经过研究java源代码并进行了一些技术实现(结果发现,以前都有人想到过,所以在对应章节的时候,我会贴出一些写得比较细的文章,而我就简单阐述一下,也算偷个懒吧),我总共整理出以下这几种方式:

代码混淆

这种方式的做法正如其名,是把代码打乱,并掺入一些随机或特殊的字符,让代码的可读性大大降低,“曲线救国”似的达到所谓的加密。其实,其本质就是打乱代码的顺序、将各类符号(如类名、方法名、属性名)进行随机或乱命名,使其无意义,让人读代码时很累,进而让人乍一看,以为这些代码是加过密的!

由其实现方式上可知,其实现原理只是扰乱正常的代码可读性,并不是真正的加密,如果一个人的耐心很好,依然可以理出整个程序在做什么,更何况,一个应用中,其核心代码才是人们想去了解的,所以大大缩小了代码阅读的范围!

当然,这种方式的存在,而且还比较流行,其原因在于,基本能防范一些技术人员进行反编译(比如说我,让我破解一个混淆的代码,我宁愿自己重写一个了)!而且其实现较为简单,对项目的代码又无开发上的侵入性。目前业界也有较多这类工具,有商用的,也有免费的,目前比较流行的免费的是:proguard(我现象临时用的就是这个)。

上面说了,这种方式其实并不是真正加密代码,其实代码还是能够被人反编译(有人可能说,使用proguard中的optimize选项,可以从字节流层面更改代码,甚至可以让JD这些反编译软件可以无法得到内容。说得有点道理,但有两个问题:1、使用optimize对JDK及环境要求较高,容易造成混淆后的代码无法正常运行;2、这种方式其实还是混淆,JD反编译有点问题,可以有更强悍的工具,矛盾哲学在哪儿都是存在的^_^)。那如何能做到我的class代码无法被人反编译呢?那就需要我们下面的“加密class”!

加密class

在说加密class之前,我们要先了解一些java的基本概念,如:ClassLoader。做java的人已经或者以后会知道,java程序的运行,是类中的逻辑在JVM中运行,而类又是怎么加载到JVM中的呢(JVM内幕之类的,不在本文中阐述,所以点到为止)?答案是:ClassLoader。JVM在启动时是如何初始化整个环境的,有哪些ClassLoader及作用是什么,大家可以自己问度娘,也不在本文中讨论。

让我们从最常见的代码开始,揭开一下ClassLoader的一点点面纱!看下面的代码:

Java代码

  • publicclassDemo{

  • publicstaticvoidmain(String[]args){

  • System.out.println(“helloworld!”);

  • }

  • }

  • 上面这段代码,大家都认识。但我要问的是:如果我们使用javac对其进行编译,然后使用java使其运行(为什么不在Eclipse中使用Runas功能呢?因为Eclipse帮我们封闭,从而简化了太多东西,使我们忽略了太多的底层细节,只有从原始的操作上,我们才能看到本质),那么,它是怎么加载到JVM中的?答案是:通过AppClassLoader加载的(相关知识点可以参考:http://hxraid.iteye.com/blog/747625)!如果不相信的话,可以输出一下System.out.println(Thread.currentThrea().getContextLoader());看看。

    那又有一个新的问题产生了:ClassLoader又是怎样加载class的呢?其实,AppClassLoader继承自java.lang.ClassLoader类,所以,基本操作都在这个类里面,让我们直接看下面这段核心代码吧:



    看到这里,已经没有必要再往下面看了(再往下就是native方法了,这是一个重大伏笔哦),我们要做的手脚就在这里!

    手脚怎么做呢?很简单,上面的代码逻辑告诉我们,ClassLoader只是拿到class文件中的内容byte[],然后交给JVM初始化!于是我们的逻辑就简单了:只要在交给JVM时是正确的class文件就行了,在这之前是什么样子无所谓!所以,我们的加密的整个逻辑就是:

  • 在编译代码时(如使用ant或maven),使用插件将代码进行加密(加密方式自己选),将class文件里面的内容读取成byte[],然后进行加密后再写回到class文件(这时候class文件里面的内容不是标准的class,无法被反编译了)

  • 在启动项目代码时,指定使用我们自定义的ClassLoader就行了,而自定义的部分,主要就是在这里做解密工作!

  • 如此,搞定!以上的做法比较完整的阐述,可以仔细阅读一下这篇文章:https://www.ddtsoft.com/#developerworks/cn/java/l-secureclass/文章中的介绍。

    通过这个方法貌似可以解决代码反编译的问题了!错!这里有一个巨大的坑!因为我们自定义的ClassLoader是不能加密的,要不然JVM不认识,就全歇菜了!如果我来反编译,呵呵,我只要反编译一下这个自定义的ClassLoader,然后把里面解密后的内容写到指定的文件中保存下来,再把这个加了逻辑的自定义ClassLoader放回去运行,你猜结果会怎样?没错,你会想死!因为你好不容易想出来的加密算法,结果人家根本不需要破解,直接就绕过去了!

    现在,让我们总结一下这个方法的优缺点:实现方式简单有效,同时对代码几乎没有侵入性,不影响正常开发与发布。缺点也很明显,就是很容易被人破解!

    当然啦,关于缺点问题,你也可以这么干:先对所有代码进行混淆、再进行加密,保证:1、不容易找到我们自定义的那个ClassLoader;2、就算找到了,破解了,代码可读性还是很差,让你看得吐血!(有一篇文章,我觉得写得不错,大家可以看一看:http://www.scjgcj.com/#blog/851544)

    嗯,我觉得这个方法很好,我自己也差点被这个想法感动了,但是,作为一个严谨的程序员,我真的不愿意留下一个隐患在这里!所以,我继续思索!

    高级加密class

    前面我们说过有个伏笔来着,还记得吧?没错,就是那个native!native定义的方法是什么方法?就是我们传说中的JNI调用!前面介绍过的有一篇文章中提到过,其实jvm的真实身份并不是java,而是c++写的jvm.dll(windows版本下),java与dll文件的调用就是通过JNI实现的!于是,我们就可以这样想:JNI可以调用第三方语言的类库,那么,我们可不可以把解密与装载使用第三方语言写(如C++,因为它们生成的库是不好反编译的),这样它可以把解密出来的class内容直接调jvm.dll的加载接口进行初始化成class,再返回给我们的ClassLoader?这样,我们自定义的ClassLoader只要使用JNI调用这个第三方语言写的组件,整个解密过程,都在黑盒中进行,别人就无从破解了!

    嗯,这个方法真的很不错的!但也有两个小问题:1.使用第三方语言写,得会第三方语言,我说的会,是指很溜!2.对于不同的操作系统,甚至同一操作系统不同的版本,都可能要有差异化的代码生成对应环境下的组件(如window下是exe,linux是so等)!如果你不在乎这两个问题,我觉得,这个方式真的挺不错的。但对于我来说,我的信条是,越复杂的方式越容易出错!我个人比较崇尚简洁的美,所以,这个方法我不会轻易使用!

    对了,如果大家觉得这个方法还算可行的话,可以推荐一个我无意中看到的东西给大家看看(我都没有用过的):jinstall,

    更改JVM

    看到这个标题,我想你可能会震惊。是的,你没看错,做为一个程序员,是应该要具有怀疑一切、敢想敢做的信念。如果你有意留心的话,你会发现JVM版本在业界其实也有好几个版本的,如:Sun公司的、IBM的、Apache的、Google的……

    所以,不要阻碍自己的想象力,现在没有这个能力,并不代表不可能。所以,我想到,如果我把jvm改了,在里面对加载的类进行解密,那不就可以了吗?我在设计构思过程中,突然发现:人老了就是容易糊涂!前面使用第三方语言实现解密的两个问题,正好也是更改JVM要面对的两个问题,而且还有一个更大的问题:这个JVM就得跟着这个项目到处走啊!

❽ 为什么很多人反对中文在编程中的使用

首先我要声明:排斥使用中文编程和爱国不能混为一谈,坚决抵制不使用中文编程等同于不爱国的道德绑架。不使用中文编程的主观因素和客观现实存在有很多,个人使用习惯、开发效率、开发所使用的ide工具不支持等因素,都会让程序员更偏向使用英语编程。
先来说说历史原因,编程起源于外国,编程语言,计算机,甚至上层的开发工具,基本上都是外国人使用英语来开发的,这些最大的问题就在于,外国人并不会给中文来做适配,就算适配了,也无法使用中文来编程测试,因此遇到了bug也无法修复。这大概是中文编程目前最大的制约。很多码农说现在的主流编程语言都是Unicode编码都支持中文,这很正确,举例java,但是我想他们根本呢没有用过中文来写代码,完全没有考虑过ide工具是否支持,编程语言并不是编程的全部,虽然脱离ide工具我们也能够编译代码,但是脱离了ide工具我们的开发效率会降低很多倍,于是乎现在企业开发基本不可能脱离ide工具,没有的可能都要专门自己开发一套。
再来说说很多码农对于中文编程的真实内心独白:用中文写代码会很垃圾,很廉价?懂英文比较厉害?中文写的代码不行?要便于给外国人看?认为中文编程很多余?习惯了英文编程了不想改变?虽然有些直抒心意,但是也在一定程度上直观反映了排斥使用中文编程的码农心态。
我认为制约国内程序员使用中文编程的最大因素是完善框架的缺失,诸如易语言之类的其实都不过是伪中文编程,很多底层的东西也还是用到的英文,而底层的英文又限制了上层框架的编写,语法框架无法的限制导致了上层编写程序的时候并不适配中文,这样的编程不仅不能提高效率,反而增加了理解难度。
所以我认为中文编程最大的难点是怎么去编写一套适合中文的编程框架,而不仅仅是把英文翻译成中文,这样的中文编程其实真的没有多大意义。

热点内容
sql2008错误233 发布:2025-07-03 02:28:52 浏览:168
创建数据库语句mysql 发布:2025-07-03 02:14:34 浏览:146
python量化投资 发布:2025-07-03 02:05:11 浏览:804
proxy代理服务器地址 发布:2025-07-03 01:56:52 浏览:910
ps选区存储 发布:2025-07-03 01:55:21 浏览:842
sql2008连接数 发布:2025-07-03 01:55:20 浏览:246
androidstring 发布:2025-07-03 01:53:55 浏览:183
密码sql注入 发布:2025-07-03 00:44:07 浏览:555
oa服务器需要什么硬件 发布:2025-07-03 00:36:05 浏览:512
4mol的naoh怎么配置 发布:2025-07-03 00:19:10 浏览:856