当前位置:首页 » 编程软件 » 怎样防止程序员反编译

怎样防止程序员反编译

发布时间: 2024-09-14 02:28:40

⑴ 什么是java代码的编译与反编译

Java代码的编译与反编译

2017-02-21Hollis数盟

一、什么是编译

1、利用编译程序从源语言编写的源程序产生目标程序的过程。

2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

二、什么是反编译

计算机软件反向工程(Reverseengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。

三、Java类的编译与反编译

我们在最初学习Java的时候,会接触到两个命令:javac和java,那个时候我们就知道,javac是用来编译Java类的,就是将我们写好的helloworld.java文件编译成helloworld.class文件。

class文件打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台和操作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Javaclass文件是可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件。

那么反编译呢,就是通过helloworld.class文件得到java文件(或者说是程序员能看懂的Java文件)

四、什么时候会用到反编译

1、我们只有一个类的class文件,但是我们又看不懂Java的class文件,那么我们可以把它反编译成我们可以看得懂的文件。

2、学习Java过程中,JDK的每个版本都会加入越来越多的语法糖,有些时候我们想知道Java一些实现细节,我们可以借助反编译。

五、反编译工具

1、javap

2、Jad:官网(墙裂推荐)

客户端:

可以在官网下载可执行文件,找到对应的操作系统的对应版本,然后进行安装使用。

因为我使用的是linux操作系统,所以我下载的是Linux版本的工具,这个工具下载好之后会有一个执行文件,只要在执行文件所在目录执行./jadhelloworld.class就会在当前目录下生成helloworld.jad文件,该文件里就是我们很熟悉的Java代码

Eclipse插件:

下载地址在官网下载插件的jar包,然后将jar包放到eclipse的plugins目录下‘在打开Eclipse,Eclipse->Window->Preferences->Java,此时你会发现会比原来多了一个JadClipse的选项,单击,在Pathtodecompiler中输入你刚才放置jad.exe的位置,也可以制定临时文件的目录。当然在JadClipse下还有一些子选项,如Debug,Directives等,按照默认配置即可。基本配置完毕后,我们可以查看一下class文件的默认打开方式,Eclipse->Window->Preferences->General->Editors->FileAssociations我们可以看到class文件的打开方式有两个,JadClipse和Eclipse自带的ClassFileViewer,而JadClipse是默认的。全部配置完成,下面我们可以查看源码了,选择需要查看的类,按F3即可查看源码

⑵ 程序员看剧的时候,如果看到有敲代码页面,会暂停看代码吗

我有过一次类似的经历。某次在某大型石化变电站内给电力监控系统配套数据库,由于数据库程序修改量大白天干不完,,我和同事把数据拷贝到笔记本中,回到酒店继续工作。到了饭点肚子实在饿,又怕用餐影响思维进程,就和同事把各自的笔记本带到酒店餐厅,找个偏僻位置一边用餐一边讨论继续修改程序。

不过一旦发现是 HTML/CSS/Javascript/Java/Python/C 在搞向标准输出打印,Web/HTTP 这种就没了兴致。改进的话,语言上整点 Racket/OCaml/Haskell/Idris/Rust/C#/Elixir,然后开 Visual Studio Code 全屏,装好对应代码高亮插件,贴点不明觉厉的代码片段比如 Chez Scheme 的代码上去,竖直副屏全屏打开一个 Terminal 不断往外蹦符合演出叙事的消息。毕竟影视剧里的编程是表演的一部分,需要通过编程表演艺术装屄的时候,请剧组尽力保证演出效果。

⑶ 公司如何保护源代码不被员工泄漏

您好。感谢您给我这次回答的机会。

首先,我认为这个有两种方法,看你怎么选。

第一种:

限制代码库只能在公司内网访问,公司之外怀能下载代码;

限制只能用公司的电脑下载代码、编写代码、提交代码;

限制访问代码库的权限,发人员不授予访问和自己不相关代码库的权限;

能访问代码的电脑上安装监控软件,号称可以监控所有员工活动;

设置公司网络防火墙,禁止访问github这样的开源网站;

把上面所有的规矩记录下来,教育员工知道,让他们签字画押必须遵守,钣者开除而且报警。

第二种:

招募受过良好教育、品行良好、专业团队工作经验的开发者;

对开发者友善,让他们不会对公司心怀怨恨;

把开发者的利益和公司利益关联起来,让他们不想为了蝇头小利牺牲公司利益。

其次,你可能不知道的东西。

1.绝大部分的公司(bat另说) 手中的源代码商业价值根本不高。

2.绝大部分的公司的源码质量都比不过github的哪些开源类库。

3.绝大部分的公司的源码都属于高度定制化的开发(就是换个公司,这个软件几乎就没有什么价值了)。

4.绝大部分的公司都不是靠“软件技术”赚钱的。

5.绝大部分的人都不会傻到直接把偷来的源码用于“商业活动”(非但不一定赚钱还可能吃官司,还不如去github上扒开源代码)

6."防御"的成本数倍于"重新开发一套"软件.

所以看淡一点源码,它在绝大多数公司中其实并不值”几个钱“虽然它的创造成本可能”很贵“。

所以说,这些东西掌握以后,就基本上不用担心代码被泄露了。

理论上做到公司电脑无法和外界连通,进出人员不得携带任何外设就可以彻底解决代码泄漏的问题。但是商业公司比较难做到。下面我们来的分析一下员工有没必要窃取代码,有没能力窃取到下完整的代码。

现在有一定规模的公司应用都是服务化的,不同的小组负责不同的服务,有各自的代码查看权限。所以一个或者几个程序员无法拿到全部代码。

超大规模的应用就更复杂了,有前台,中台,后台,APP等,架构也极其复杂,就算某个程序员获得到了全部代码,也没有能力搭建并运行起来。

小规模公司的代码基本都是业务逻辑代码,泄不泄漏可能也没有太大关系。

防止别人偷拿代码是很难的,倒不如加强企业文化,提高员工的职业素养。尊重是互相的,做到用人不疑,我想大部分人也不会以怨报德。

说说我们公司是怎么做的吧:

1. 封了网络文库、网络网盘、CSDN等网站

凡是能上传文件的网站,我们公司都封了,这样就防止员工把内部文件上传到这些网站被泄密。但是这样做的一个后果就是员工想查一些资料,在这些网站都打不开,只能用自己的手机去查了,造成了一些工作的不便。

2. 封了USB、蓝牙接口,以及光驱

凡是能从电脑上拷贝文件到外部的接口,我们公司都封了,这样员工就无法把公司的文件拷到外面了,避免了泄密。这样做的后果也给我们带来了一些工作上的不便。比如以前我们做蓝牙测试的时候,需要把测试的App拷贝到手机上旧非常困难。后来公司了解了我们的困难,允许我们提申请,经过上级领导的批准后,可以给电脑开通USB权限,但是拷贝的内容也是被公司监控,所以也只能拷贝需要的内容。申请的时候有选择开通的时间,到期后,USB权限自动关闭了。

3. 禁止将公司电脑带出公司

为了防止员工私下里想办法把公司电脑的文件拷走,公司禁止把电脑带出办公室。如果需要带电脑去客户那里,则需要向公司提出申请,申请的时候也要选择带出和带回的时间,这样基本上就杜绝了员工泄密的可能。如果员工在外出途中丢失了电脑,这就会成为一个大事件,会汇报到公司最高层,对员工个人的影响也很大。公司有一套流程专门应对这类事件。曾经我们公司有人带电脑去客户那里,跟客户吃饭喝醉了,打车回家把电脑弄丢了,引起了很大的后果,这个事经常会作为事例来教育全体员工。

4. 电脑里安装监控软件

公司的电脑里都安装有监控软件,网管可以监控到每一台电脑。员工在电脑上打印,发传真、发邮件这些活动都受到监控。打印机也能看到每个人打印、传真的内容。员工如果有泄密的行为都可以及时监控到。至于员工对着电脑拍照,公司应该也能检测到。所以公司的电脑不要做一些私人的事情,很容易被监控到。

5. 封了QQ、微信等可以传输文件的社交软件

QQ、微信这类可以传递文件的社交软件在公司的电脑上是不能安装的,也防止了员工通过这些软件把文件传输到外面。公司内部只能使用微软自带的聊天工具Lync,这个软件也不能传输文件,只能聊天。如果公司内部需要传输文件,只能用公司的服务器或者邮件。有些大的文件,只能尽量压缩,否则传输会非常不方便。

6. 禁止员工安装公司允许之外的软件

严格监控员工的软件安装列表。公司给出了允许安装的软件列表,超出范围的安装软件会被监控到,让员工删除掉。这样员工无法安装一些上传文件的软件了,防止泄密了。员工也不能随意从网络上下载安装文件,防止一些木马病毒藏在软件里,盗取公司文件。

公司防止员工泄密的手段是很多的,每年还要对员工进行安全教育,规范员工的行为。

虚拟化桌面服务器,使用虚拟桌面和瘦客户机,瘦客户机禁止usb存储。瘦客户机不能联网但可以连虚拟化服务器,服务器不能连外网。单独设立一台机器可以联网,也可以连接一台ftp虚拟机(虚拟化服务器中的FTP用于内外网共享文件),联网机器下载的东西了上传到ftp供其他桌面虚拟机使用。桌面虚拟机上传的文件需要管理员通过才能被这台外网机器看到下载。

1,不允许携带电子设备进入工作区域,进门经过金属探测。

2,公司电脑不允许连接外网。

3,封死USB等外设接口。

4,机箱锁死,防止拆硬盘。

5,安装摄像头对准每一个工位,一旦发现使用拍照设备等,进行相应处罚。

这几个只有一起用才能完全防止泄露,否则都有办法。

你去看看某研究院的一些规章。禁止笔记本等带入,不小心带入了,对不起,设备留置24小时,彻底格式化。手机,存储设备也一样禁止带入。开发机全部内网。没有WIFI,鼠标键盘全部有线,粘死。机箱上锁。USB等接口全部封掉。人员权限限制,绝大部分人员不能下载全部代码。

首先管理层面,领导要重视信息安全,然后按照iso27000系列信息安全标准去做。信息安全和物理安全是要互相配合的。办公区要根据安全级别设置不同的管理措施,信息资产要根据价值设置不同的标签,区分关键资产和非关键资产,另外信息资产只能有一个出口要经过审批后才能出去。技术层面的措施也可以用,但是不能乱用。另外开发环境安全可以参考15408的站点审查部分。

防止不了,有合作公司管理严格,我们都用手机拍照沟通,所以除非禁用手机和一切拍照设备,否则都给你拍出来。

我觉吧吧,关键是人。而不是制度。

这么说吧,光有源代码屁也不是。要是没人build都困难。别说上线和运行了。

所以,你要是选信任的人,而不是选信任的方法。那么就算别人真偷了,拿一堆源代码回去,都没办法build,有什么用?

反之,就算没有源代码。人家拍拍屁股走人。然后还他妈实现,你有什么办法?

⑷ 如何防止程序员反编译

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就得跟着这个项目到处走啊!

⑸ 如何对编译的dll文件进行加密来防止反编译

使用过.NET的程序员都知道,.NET是一个巨大的跨时代进步,它开发效率高、功能强、界面美观、耐用、新的语言C#已经提交为行业规范、CLR共公运行库资源丰富,这所有的特点标志着它成为主流编程语言是必然的。
可是他也有一个缺点,那就是编译好的程序集可以完全被反编译成源代码,这给一些不法份子提供了很好的机会,试想想,您辛苦的劳动成果就这样轻易的给别人利用,是多么不公平的事阿?所以如何保护我们的知识产权成了一个大问题。
MAXTOCODE 已经完全超越了传统的混淆手段来保护源代码的方式,他将完全加密您的代码,使您的代码完全没有办法反编译。保护强度已经不是混淆器可以与之抗衡,是目前保护强度最大,最完美的.NET产品保护方案。
MAXTOCODE 是 Aiasted.SOFT 完全自主开发的一款 .NET 代码保护工具。它是目前世界上高强度保护工具之一。
第一种代码保护方案是混淆,这是一个不错的方案,可惜强度还是无法保证,如果要做一个大的逆向工程有一定困难,但针对某个算法或功能进行解读还是很容易的。反观混淆原理则发现,混淆其实只是一个与障眼法差不多的技术。第二种就是MAXTOCODE的保护技术了,MAXOTCODE 采用了难以理解的机器语言来加密您的.NET程序集,(特别注意:MAXTOCODE的强度建立在加密算法之上,而不上简单的混淆。)在程序集运行时运态解放源代码,所以在原理上已经比混淆强度提高了许多。我们保护您所有的代码,不让不法份子看到您任何一个有效的代码,使不法份子完全无法被反编译。

⑹ 如何防止Android程序被反编译

代码混淆(code obfuscation)是指将计算机程序的代码,转换成一种功能上等价,所谓功能上的等价是指其在变换前后功能相同或相近。其解释如下:程序P经过混淆变换为P‘,若P没有结束或错误结束,那么P’也不能结束或错误结束;而且P‘程序的结果应与程序P具有相同的输出。否则P’不是P的有效的混淆。

目前对于混淆的分类,普遍是以Collberg 的理论为基础,分为布局混淆(layout obfuscation)、数据混淆(data obfuscation)、控制混淆(control obfuscation)和预防混淆(preventive obfuscation)这四种类型。

1. 布局混淆

布局混淆是指删除或者混淆软件源代码或者中间代码中与执行无关的辅助文本信息,增加攻击者阅读和理解代码的难度。软件源代码中的注释文本、调试信息可以直接删除,用不到的方法和类等代码或数据结构也可以删除,这样即可以使攻击者难以理解代码的语义,也可以减小软件体积,提高软件装载和执行的效率。软件代码中的常量名、变量名、类名和方法名等标识符的命名规则和字面意义有利于攻击者对代码的理解,布局混淆通过混淆这些标识符增加攻击者对软件代码理解的难度。标识符混淆的方法有多种,例如哈希函数命名、标识符交换和重载归纳等。哈希函数命名是简单地将原来标识符的字符串替换成该字符串的哈希值,这样标识符的字符串就与软件代码不相关了;标识符交换是指先收集软件代码中所有的标识符字符串,然后再随机地分配给不同的标识符,该方法不易被攻击者察觉;重载归纳是指利用高级编程语言命名规则中的一些特点,例如在不同的命名空间中变量名可以相同,使软件中不同的标识符尽量使用相同的字符串,增加攻击者对软件源代码的理解难度。布局混淆是最简单的混淆方法,它不改变软件的代码和执行过程。

2. 数据混淆

数据混淆是修改程序中的数据域,而对代码段不作处理。常用的数据混淆方式有合并变量、分割变量、数组重组、字符串加密等。

合并变量是将几个变量合并为一个数据,原来的每个变量占据其中一个区域,类似于一个大的数据结构。分割变量则是将一个变量分割为两个变量,对分割前后提供一种映射关系,将对一个变量的操作转化为对分割后两个变量的操作。

数组重组有数组的分割、合并、折叠和平滑等几种方式。分割是将一个数组分成2个或多个相同维度的数组;合并则相反;折叠是增加数组的维数;平滑则是相反。

在ELF文件中,全局变量和常量字符串存放在数据段中,反汇编工具可以轻易查找到字符串与代码之间的引用关系。在软件破解中,通过一些字符串提示可以很方便的找到代码关键语句,从而破解软件。字符串加密则可以对这些明显的字符串进行加密存储,在需要时再进行解密。

3. 控制混淆

控制混淆也称流程混淆,它是改变程序的执行流程,从而打断逆向分析人员的跟踪思路,达到保护软件的目的。一般采用的技术有插入指令、伪装条件语句、断点等。伪装条件语句是当程序顺序执行从A到B,混淆后在A和B之间加入条件判断,使A执行完后输出TRUE或FALSE,但不论怎么输出,B一定会执行。

控制混淆采用比较多的还有模糊谓词、内嵌外联、打破顺序等方法。

模糊谓词是利用消息不对称的原理,在加入模糊谓词时其值对混淆者是已知的,而对反混淆者却很难推知。所以加入后将干扰反汇编者对值的分析。模糊谓词的使用一般是插入一些死的或不相关的代码(bogus code),或者是插入在循环或分支语句中,打断程序执行流程。

内嵌(in-line)是将一小段程序嵌入到被调用的每一个程序点,外联(out-line)是将没有任何逻辑联系的一段代码抽象成一段可被多次调用的程序。

打破顺序是指打破程序的局部相关性。由于程序员往往倾向于把相关代码放在一起,通过打破顺序改变程序空间结构,将加大破解者的思维跳跃。

4. 预防混淆

预防混淆一般是针对专用的反编译器设计的,目的就是预防被这类反编译器反编译。他是利用特定的反编译器或反混淆器的弱点进行专门设计。预防混淆对于特定的反编译器非常有效,所以在使用时要综合利用各种反编译器的特点进行设计。

⑺ 怎么给mt4指标加时间限制代码可以加密更好,防反编译。

添加一句语句:date>20110807时返回。
然后加密就是

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

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

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

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

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

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

热点内容
动态规划01背包算法 发布:2024-11-05 22:17:40 浏览:849
nasm编译器如何安装 发布:2024-11-05 22:01:13 浏览:180
登录密码在微信的哪里 发布:2024-11-05 22:00:29 浏览:739
c防止反编译工具 发布:2024-11-05 21:56:14 浏览:247
安卓虚拟机怎么用 发布:2024-11-05 21:52:48 浏览:344
php时间搜索 发布:2024-11-05 20:58:36 浏览:478
燕山大学编译原理期末考试题 发布:2024-11-05 20:13:54 浏览:527
华为电脑出现临时服务器 发布:2024-11-05 20:05:08 浏览:408
斗战神免费挖矿脚本 发布:2024-11-05 19:53:25 浏览:665
网吧服务器分别是什么 发布:2024-11-05 19:45:32 浏览:392