精华内容
下载资源
问答
  • java反编译软件

    2017-12-12 11:42:15
    反编译,jd-gui,反编译class文件,源码,让你更加的了解底层原理
  • "反编译技术"对于黑客学习过程中,是从一个初级到高级进阶过程的必学技术,前期我们熟悉基础知识,熟悉利用脚本或者工具只是初级阶段学习,从小白到入门的过程,但是如果想成为一名真正意义的黑客,一定要学习"...

    "反编译技术"对于黑客学习过程中,是从一个初级到高级进阶过程的必学技术,前期我们熟悉基础知识,熟悉利用脚本或者工具只是初级阶段学习,从小白到入门的过程,但是如果想成为一名真正意义的黑客,一定要学习"反编译技术"!为什么这么说?

    39a078ce126c70d8315ff987903388d9.png

    因为黑客技术就是对计算机系统和网络的缺陷和漏洞的发现,以及针对这些缺陷实施攻击的技术。这里说的缺陷,包括软件缺陷、硬件缺陷、网络协议缺陷、管理缺陷和人为的失误。而这里的软件缺陷分析,或者漏洞的发掘就需要用到"反编译技术"和逆向分析技术,而目前黑客从事网络协议缺陷,硬件缺陷的研究相对成熟。而软件则不同,种类繁多,依托的系统架构又各不相同,软件又是直接与业务应用息息相关,所以软件的缺陷、漏洞、优化、破解等需求,都需要用到"反编译技术。所以如果你想成为一名真正意义的黑客,这个技术一定要学习!

    今天就以本篇文章的内容详细给大家阐述一下"反编译技术原理与实现"!

    一、什么是"反编译"?

    反编译,又称为逆向编译技术,是指将可执行文件变成高级语言源程序的过程。反编译技术依赖于编译技术,是编译过程的逆过程。

    那什么是编译技术?

    编译技术就是把高级语言变成可执行文件的过程。它的主要过程如下所示:

    68a21c38c8fc0e795638d5993eabcf49.png

    编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。

    词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。

    语法分析以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序。

    语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。中间代码是源程序的一种内部表示,或称中间语言。

    中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。

    目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。

    对于反编译技术,我们上文提到,它是编译的逆过程。那是不是把上述的六个步骤倒置,就变成了反编译的过程了呢?显然是不对的。对于反编译过程,我们可以这么去理解:我们的源程序现在是二进制可执行文件或者汇编指令,我们的目标程序是某种特定的高级语言。那么现在这个过程该如何转化呢?这其中的中间代码的生成是否和编译过程中的一样呢?

    基于上述原理及其疑问,我们很容易便采用这种思想:将特定的机器代码,即我们的"源程序",先翻译为低级的中间代码,然后再根据特定的高级语言将中间代码翻译为高级程序。没错,反编译的主要思想确实就是那样:反编译器也有前端和后端。前端是一个机器依赖的模块,句法分析二进制程序、分析其指令的语义、并且生成该程序的低级中间表示法和每一子程序的控制流向图。通用的反编译机器是一个与语言和机器无关的模块,分析低级中间代码,将它转换成对任何高级语言都可接受的高级表示法,并且分析控制流向图的结构、把它们转换成用高级控制结构表现的图。最后,后端是一个目标语言依赖的模块,生成目标语言代码。反编译的过程中要使用一些工具:把二进制程序装入内存,对这一程序做句法分析或反汇编,以及反编译或者分析该程序来生成高级语言程序。这个过程借助编译器和库的签名来识别特定的编译器和库子程序。只要在二进制程序中识别出编译器签名,就不去反编译这些编译器启动代码(start-up)和库子程序:对于前者,从最后的目标程序去掉启动代码的那些例程,反编译器从主(main)程序入口点开始分析;对于后者,那些子程序用其库函数名代替。

    所以我们可以采用下图来表示反编译的过程:

    3f6753caeb2f85c2f292a77701be8dcb.png

    上图是我们对于反编译过程的初级构想(按照我们的理解),而实际的更为详细的过程则如下所示:

    584a97b977d136880ad0e30a81e7445f.png

    我们再对上述各个过程做一下更为详细的介绍:

    1语法分析:语法分析程序或语法分析器把源程序的字节组织成源机器语言的语法短语(或语句)。这些短语用一个语法分析树表示。语法分析器的主要问题是确定哪些是数据和哪些是指令。

    2语义分析:语义分析阶段检查源程序一组指令的语义含义,收集类型信息并且向整个子程序传递这个类型。对于任何一个编译器生成的二进制程序,只要程序能运行,其机器语言的语义一定是正确的。没见过哪一个二进制程序是因为编译器生成代码的错误而不能运行。因此,除非语法分析器对某一条指令做了不正确的分析或者把指令当作数据分析,否则,在源程序中是不会有语义错误的。

    3中间代码生成:反编译器分析程序需要一个中间表示法来明晰地表现源程序。它必须容易从源程序中生成,而且还必须适合用来表示目标语言。

    4控制流图生成:源程序中每一个子程序的控制流图也是为反编译器分析程序所必需的。这个表示法适合用来确定在程序中的高级控制结构。它也被用来清除掉由于机器语言的条件跳转有偏移量限制因而被编译器产生的中间跳转。

    5数据流分析:数据流分析阶段试图改善中间代码,以便能够得到高级语言表达式。在这个分析期间,临时寄存器的使用和条件标志被清除掉,因为在高级语言里面没有这些概念。

    6控制流分析器阶段试图将程序每一个子程序的控制流图组织成一个高级语言构造的类集(通有的)。这个类集必须包含大多数语言都有的控制指令。

    7代码生成:反编译器的最后阶段是在控制流图和每一个子程序中间代码的基础上生成目标高级语言代码。为所有的局部栈、参数和寄存器变量标识符选择变量名称。也为在程序中出现的各个例程指定各自的子程序名称。

    二、反编译与反汇编的区别

    很多人把反编译和反汇编理解为同一意义,其实还是有所不同的!

    反汇编:一般是只对编译器根据高级语言生成的本机二进制可直接在芯片上执行的机器码"解析"为人类可读的汇编形式的代码(实际上最最早期的计算机操作员具备直接阅读机器码和使用机器码编程的能力,不需要转换为汇编形式,这是计算机普及,程序规模也爆炸性增大后,人们就有需要转换为汇编代码来读懂机器码程序),早期的反汇编目的是编译器生产商用来检查编译器生成代码的性能。当今主要在得不到源代码的情况下,研究分析其他人的程序。

    反编译原理:通常,编写程序是利用高级语言如C,pascal等高级语言进行编程的,然后再经过编译程序生成可以被计算机系统直接执行的文件(机器语言)。反汇编即是指将这些执行文件反编译还原成汇编语言或其他高级语言。但通常反编译出来的程序与原程序会存在些许不同,虽然执行效果相同,但程序代码会发生很大的变化,要读懂反汇编需要有扎实的高级语言编写功底和汇编功底。

    反汇编实际属于反编译,反编译就包括各种语言从低级或中间级语言到高级语言的解析。如:.NET平台的C#就可由中间语言MSIL反编译成C#,Java平台的就可由.class中的Java字节码反编译为Java代码后有其它的dex虚拟机的字节码,自定义的虚拟机字节码等等

    总言之,反汇编属于反编译的一个分支,反编译是实现逆向编程的必经步骤这些都属于IT界的"逆向工程"范畴。

    二者的区别:反汇编仅仅是使用一些反汇编软件把程序从机器码翻译成汇编语句,而反编译不仅要做完反汇编的工作,还要在此基础上彻底理解这些汇编代码是什么意思,准确的说是这些代码能够实现什么功能,然后用自己熟悉的语言写出功能相似(不可能和原作者的代码完全相同)的代码或软件。

    三、用实例理解“如何利用反编译技术破解一个程序”

    实例一、破解需要注册的软件

    我们有时在使用一些小工具软件时,会提示购买License(注册码之类的东东)后才能正常使用。在这里我们来尝试直接绕过License验证直接使用软件,实现简单的软件破解

    主要实现方式:

    通过反编译工具,反编译出软件源码。

    分析源码,找到License验证位置。

    修改反编译代码。

    重现编译生成修改后软件源码。

    编写License验证demo代码:

    b54ee5e4e3701b0512eb3da1bb3207c1.png

    Demo程序主要逻辑:登陆界面(Lgoin.cs)验证License信息。如果验证成功显示主窗体(MainWIndow.cs)功能界面,正常使用其软件功能。

    破解Demo程序

    根据demo程序逻辑分析,只需把License验证代码删除或修改即可。

    方法1:IL DASM

    具体使用方法参考之前编写博客《C# IL DASM 使用》。缺点:通过ildasm.exe反编译出的代码为IL 中间语言,想读懂和修改需对IL 中间语言有一定基础。

    方法2:Reflector

    .NET Reflector 工具本身不带修改 dll 和 exe 功能,需下载插件:Reflexil (Reflexil.Reflector.AIO.dll)。

    Reflexil 插件安装方法:Tools-->Add-Ins…--> + 点击"+",选择下载好的Reflexil 插件路径。点击"Close"关闭窗体。

    8941ae2507c11a147ddf026f1e764a5e.png

    使用.NET Reflector 工具打开需反编译代码,分析需要修改代码位置。

    518c579cdbb620771ba00a782f99fce0.png

    只需删除" if (!this.License(kay, text))" 判断代码。

    开启 Reflexil 插件:tools -->"Reflexil **"

    af339904587ccf223cde5d4d2dafcf21.png

    Reflexil 插件会将你选择的方法(Mothed) 生成IL 中间语言。对分析需要删除的代码找到对应IL 中间语言所在位置,进行删除。

    1a1e4aab6becb07b0e26a9fb2fe34488.png

    最后保存修改后的EXE进行重新运行。 ^-^ … 简单的破解工作已完成…^-^

    758382e16ca79aae74ef0f9001eb23db.png

    从 Reflexil 插件菜单上可以看出,他还有很多功能,比如:注入类,注入接口,注入枚举..等。还是很强大的一款插件。

    缺点:Reflector 工具需收费。

    方法3:ILSpy

    ILSyp 工具只用四个字形容:简单,粗暴。比较实用。直接使用ILSyp 工具打开需反编译exe或dll,然后"Save Code"保存为VS能直接打开的项目。修改代码后重新编译生成exe或dll 进行运行。

    c9b99ab04431dd9c562b694292c018b6.png

    通过Save Code 保存的项目,使用VS可直接编译修改代码。

    3c5288341feeef6ac8060bf001246222.png

    实例二、Android APK反编译

    1.反编译工具

    ApkTool : 将apk文件反编译成smali文件和资源文件等,生成一个文件夹,同样,也可以将这个文件夹生成apk文件。

    dex2jar : 把dex文件转成jar文件

    jd-gui : 将jar文件转换成java代码,可以更好的阅读代码

    2.准备工作

    我们准备一个反编译所需要的apk文件,这里我自己写了一个

    6da7109084ccb40ddf51ffc90b088f6f.png

    登录功能一般是应用的入口,如果我们没有用户名和密码就进不去。

    看到这里,大家可能想笔者肯定是想通过反编译来实现绕过登录功能。

    今天重点要介绍的是如何通过反编译在这个登录页面添加一个View并实现相应的功能。附带内容:

    · 反编译实现更换应用图标

    · 反编译实现添加资源文件

    · 反编译实现添加View并实现点击事件

    · 反编译实现修改功能

    · 用ApkTool工具重新打包应用

    3.反编译实现替换应用图标

    1)通过apkTool工具将apk反编译生成一个文件夹。

    进入cmd下切换到apktool目录下,输入apktool.bat d D:apkToolest.apk,会在apktool目录下生成一个test文件夹,如下是test文件夹的内容:(res:资源文件、smali:跟汇编类似的机器代码,如果需要添加四大组件,则需在AndroidManifest.xml下添加声明)

    8ebe292cd0fb2b14e1a938334878fc8d.png

    2).在生成的这个目录里找到res文件夹,进去后你会发现跟我们eclipse或as工程下的res文件夹结构一样,然后在对应目录下将应用图标换掉即可。(注意:图片格式一定要和原图片格式一样,不然会有莫名的错误)

    4.反编译实现添加资源文件

    比如我们想在strings.xml下添加一个字符串并在代码中引用,大家可能就说这个简单呐,在strings.xml里加上一个字符串声明,然后在smali文件中引用就好了,然后编译成smali文件时候,啪,报错了,打包成apk不成功,那么正确的做法是什么呢?

    1).在res/values/strings.xml里添加一个字符串,如下:

    97d56f98f380ef54fe3ae287ea1d3fd2.png

    2).在res/values目录下找到一个public.xml文件打开,找到最后一个String类型的一条,如下图一所示,它的id为0x7f060024,这些id是系统自动生成的,那么我们添加一个字符串就需要在这里手动生成一个id并且这个要唯一,默认在最后一个string的id加1就行,如下图二所示:(注意:name要和strings.xml声明的name一致)

    图一:

    89f1d47e3393c28a9ad2e0e1a5913c3b.png

    图二:

    d7c59eaeb6db9f4eac0de58cd3465a0c.png

    3).在smali文件夹下根据包名去找到R文件,如下图一,其中R$string.smali的美元符号 表示内部类的意思。在string.smali文件里添加一条,如图二。

    图一:

    0ca393a97548810180d1eb598d9af364.png

    图二:

    f74c8a2e2a645abaa2cfb76092b5356f.png

    5.反编译实现添加View并实现点击事件

    如我们想在登录界面添加一个注册按钮,那该怎么添加呢?

    1).在res/layout/activity_main.xml里添加一个按钮,如下:

    134b409b7b23a7ad11b2253693d63d2a.png

    2).在res/values/ids.xml里添加声明,如下:

    5c20f87b5d3fdbe358d91a74246d6003.png

    3).在res/values/public.xml里找到最后一条id的条目,添加一条记录,并且id要唯一,如下:

    2a32628f94ba2f1c86a75a6f61241336.png

    4).在smali文件夹里根据包名找到R文件,在R的id.smali文件下添加声明,如下图,到此所有的准备都做完了,下面就是修改smali文件添加这个注册按钮的点击事件。

    754a810c1c4ae1fc720689ecc125a672.png

    6.在smali文件夹里根据包名找到MainActivity.smali文件,打开它,然后搜索onCreate,如下图一,我们可以看到findViewById这个字眼,我们可以跟着写,对新加的按钮设置文字,如下图二,在这里,一定要注意寄存器的使用,一不小心就出错了,如果不懂smali语法的,可以回头看一下smali语法整理

    图一:

    992a1ab23d66d8479396c7ee6271f953.png

    图二:

    e39fd3bedc65c503fc698890f1d5832b.png

    设置完文字后,接着就可以开始设置注册按钮的功能了,如下图,这里点击事件是直接跳转另外一个页面,MainActivity$1是一个内部类,onclicklistener的实现类。

    7c5bb0a53bb7ff707928b35bdb1925c2.png

    7.反编译实现修改功能

    如果我们想绕过登录直接进入应用,那么此时我们肯定想到去改登录逻辑,打开MainActivity.smali文件,搜索setOnclickListener,可以看到就是登录按钮设置的点击事件,但是登录的逻辑呢?在MainActivity$1.smali文件中,找到onClick方法中关键部分,笔者加上了注释,如下图:

    05ed0113fba6b4be14ff031ad0152981.png

    那么我只要把跳转的逻辑搬到cond_0那里就ok了,我们试试:

    6dce4e6f0b2c670157522a4ada417033.png

    8.用ApkTool工具重新打包应用

    上面都是在修改资源文件,修改smali文件,我们改完怎么看效果呢?这个时候,就需要用强大的ApkTool工具重新打包应用了,在cmd下进入ApkTool目录,输入:apktool.bat b -f D:apkToolest(D:apkToolest这个目录是之前反编译生成的目录),如果我们修改没问题的话,就会在test目录下生成一个文件夹dist,在该文件夹里就是反编译后生成的apk文件。

    2b4fcc2f4c886e9f5ce39ac0ed7858ad.png

    此时,终于反编译完成了!

    但是这时生成的apk还是不能用的,因为这是裸包,还没签名,系统是不会让你装的。

    那么我们开始签名吧,怎么签名呢?同样还是用ApkTool工具,在cmd下进入ApkTool目录,输入:jarsigner -verbose -keystore 签名文件路径 -signedjar 签名后apk的路径 未签名apk的路径 签名别名,如下图:

    3d27efdaa6148ad393994b17c1defc15.png
    81f92b85d9e5246f64be8313d8991f53.png

    签名完成后,我们安装已签名的apk,看看运行结果,是不是达到了自己想要的效果。

    0b369ecad205e1b894abedfb5f6b2694.png

    到此,smali反编译方法就完成了!

    四、常用的反编译工具介绍

    apk反编译工具:

    1.apktool 利用命令行查看Java代码,需配合GUI 查看代码

    缺点:查看Java代码时,需要先把apk文件变成zip文件,获取到dex文件,运行命令行d2j-dex2jar.bat

    反编译:Java -jar apktool_xx.jar d -f 编译的apk -o 反编译后的apk

    回编译:Java -jar apktool_xx.jar b 反编译后的apk -o 回编译后生成的apk路径

    签名:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 签名文件路径 -signedjar 签名后的apk路径 签名的apk路径 签名文件名称

    生成R文件:aapt package -m -J 生成R文件的路径 -S apk中的res的路径 -I adt中android.jar路径 -M AndroidManifest.xml路径

    2.APKDB

    优点:反编译、回编译、签名一键操作,简单方便,缺点:查看Java代码时,需要先把apk文件变成zip文件,获取到dex文件,双击之后即可查看代码,但是代码可读性不强,跟apktool反编译的代码差不多,都需配合Gui。当修改Mianfest时,需要把 original文件夹删除,否则修改不生效。

    fbd032d3639857484964487899894e31.png

    3.JADX

    优点:双击jadx-gui.bat ,直接导入apk,方便简单 。如图所示:

    d2ca9053707c34f9663a91948889ef58.png

    举例说明ApkTool、APKDB与JADX编译后的代码区别:

    ApkTool、APKDB编译后的代码:

    a1e7201a5bfb001b2f72d7ad49046745.png

    JADX编译后:

    7c194195a57bf3732944a5e395c4ca2e.png

    1、PE Explorer

    功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等; 另外,还具备有 W32DASM 软件的反编译能力和PEditor 软件的 PE 文件头编辑功能,可以更容易的分析源代码,修复损坏了的资源,可以处理 PE 格式的文件如:EXE、DLL、DRV、BPL、DPL、SYS、CPL、OCX、SCR 等 32 位可执行程序。 该软件支持插件,你可以通过增加插件加强该软件的功能, 原公司在该工具中捆绑了 UPX 的脱壳插件、扫描器和反汇编器,非常好用。

    唯一遗憾的是欠缺字典功能!

    2、eXeScope V6.5

    小巧但功能极其强大的本地化工具,可以直接修改 VC++ 及 DELPHI 编制的 PE 格式文件的资源,包括菜单、对话框、字符串和位图等,也可与其它本地化工具配合使用。 在汉化中不推荐使用 eXeScope 作为汉化工具,仅作为汉化辅助工具。6.50 版主要对 DELPHI 7 编译的程序支持较好,对 DELPHI 7 以前版本编译的程序,建议使用 6.30 版本,因为该程序对 Unicode 字符显示支持不好。

    3、Resource Hacker

    一个类似于eXeScope的但在某些方面比它还好一些的工具。

    1). 查看 Win32 可执行和相关文件的资源 (*.exe, *.dll, *.cpl, *.ocx),在已编译和反编译的格式下都可以。

    2). 提取 (保存) 资源到文件 (*.res) 格式,作为二进制,或作为反编过的译资源脚本或图像。图标,位图,指针,菜单,对话,字符串表,消息表,加速器,Borland 窗体和版本信息资源都可以被完整地反编译为他们各自的格式,不论是作为图像或 *.rc 文本文件。

    3). 修改 (替换) 可执行文件的资源。图像资源 (图标,指针和位图) 可以被相应的图像文件 (*.ico, *.cur, *.bmp),*.res 文件,甚至另一个 *.exe 文件所替换。对话,菜单,字符串表,加速器和消息表资源脚本 (以及 Borland 窗体) 可以通过使用内部资源脚本编辑器被编辑和重新编译。资源也可以被一个 *.res 文件所替换,只要替换的资源与它是同一类型并且有相同的名称。

    4). 添加新的资源到可执行文件。允许一个程序支持多种语言,或者添加一个自定义图标或位图 (公司的标识等) 到程序的对话中。

    5). 删除资源。大多数编译器添加了应用程序永远不会用到的资源到应用程序中。删除这些不使用的资源可以减小一个应用程序的大小。

    4PASSOLO Passolo 是一款功能强大的软件本地化工具,它支持以 Visual C++ 、Borland C++ 及 Delphi 语言编写的软件(.exe、.dll、.ocx)的本地化。以往针对这两种不同语言编写的软件,我们大多是需要分别使用 Visual Localize 和 Language Localizator 来进行软件的中文化。而现在,Passolo 把二者的功能结合在了一起,并且性能稳定、易于使用,用户即不需要进行专门的训练,也不需要丰富的编程经验,在本地化的过程中可能发生的许多错误也都能由 Passolo 识别或自动纠正。

    作为专业性的本地化工具,Passolo 的功能主要包括:- 支持 VC 软件新旧版本套用资源或字典的翻译中文化;- 支持 Delphi 软件使用专用 / 通用字典翻译中文化;- 利用已有的多种格式的 Passolo 字典对新建方案进行自动翻译;- 对 VC 、Delphi 软件都支持标准资源的可视化编辑(酷!);- 使用 Passolo 自带的位图编辑器可以直接对图片资源进行修改;- 可以把目标资源导出后借用外部程序翻译后再重新导入。

    Passolo 还自带了 XML 、.NET 、 VB 和 Java 等数种插件(Add-in),专业的编程人员可以借用它们对相应的资源文件进行本地化编辑。

    展开全文
  • java反编译软件jad

    2012-08-10 10:43:55
    这是一款java的反编译软件,可以很随意的进行源码查看,不应不知道原理而烦恼了
  • 编译语言开发一个软件要经历的过程是:编辑、编译、链接和运行。编辑就是用程序设计语言编写的源代码。用C语言简单打印hello word的源代码1.编译运行编译器:简单讲,编译器就是将“一种语言(通常为高级语言)”...

    一、运行

    程序源代码是静态的,只有运行起来才发挥作用。

    编译运行是最经典、高效最高的运行方式。C/C++的高性能在很大程度上归功于编译。用编译语言开发一个软件要经历的过程是:编辑、编译、链接和运行。

    编辑就是用程序设计语言编写的源代码。

    3b0b57cc316106cbe50d48ae49bfb427.png

    用C语言简单打印hello word的源代码

    1.编译运行

    5533f1a9b41a64179a54c25374f1ac02.png

    编译器:

    简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)。

    编译:

    编译是从源代码(通常为高级语言)到能直接被计算机或虚拟机执行的目标代码(通常为低级语言或机器语言)的翻译过程。然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。

    如果程序员编写的源代码有错误,通常指语法错误,那么编译器会报错,并停止编译。因为它读不懂源代码,不知道该转成什么。一些聪明的编译器还会找出程序中逻辑上的问题和不安全的地方。当遇到编译器给出错误提示时,就要分析出错误的原因,重新修改代码后,再重新编译。如此往复,知道编译成功为止。

    c72b7bed944e05c4dce42f0fe3ec2198.png

    链接:

    链接也称超级链接,超链接是指从一个网页指向一个目标的连接关系,而在一个网页中用来超链接的对象,可以是一段文本或者是一个图片.当浏览者单击已经链接的文字或图片后,链接目标将显示在浏览器上,并且根据目标的类型来打开或运行。

    使用超文本,链接(link)是从一个词、图片或信息对象到另一个的可选连接。在像万维网这样的多媒体环境里,这些对象可能包括声音和动态影像序列。链接的最常见的格式是高亮显示的词或图片,它们可以由用户选择(用鼠标或其他方式),形成直接传输和产看其他文件。高亮显示的对象涉及到锚定。锚定引用和涉及到的对象构成超文本链接。

    6e08ee7cc19a06c813812ed30b428531.png

    链接过程很简单,有时候甚至完全体会不到,所以很多人习惯上把它也算作编译的一部分。在这个过程中,链接器把用户用户程序和支持它运行的必要的其它程序都“合成”在一起,形成最后的可执行文件(DOS和Windows下扩展名为.exe的文件)。可执行文件里面都是执行代码,也就是机械语言代码。全部转换过程完毕,用户就可以把这个文件复制给别人用了。通常,使用者并不需要程序的源代码,有这个可执行文件足矣。使用者唯一要做的就是运行它。

    不要以为程序能运行就可以了。运行时还会出现错误,开发者必须捕获这些错误,并修改源代码的错误,重新编译、链接,最终交付无错的可执行文件。有些错误很快就会被发现和及时发发现和及时修改;有些错误则隐藏很深,很长才会被发现,例如著名的2000年问题———千年虫。

    2.解释运行

    e67ff13bcfcaf18078bfc1f0a6249609.png

    最具有代表性的是BASIC、JavaScript、PHP、Python等语言。这些语言的共同特点是运行速度慢但简单。

    用这些语言编写程序在运行时必须先运行一个解释器。解释器能够读懂这些语言,按照程序指令一步一步地工作,完成开发者需要的功能。因为必须一条一条地解释语句并执行,所以速度很慢,比编译语言要慢数十倍甚至上百倍。因为解释器的功能可以做得很强,并且可以把计算机的复杂性隐藏起来,所以这类语言都比较易学。

    解释语言简单好用,获得了大量的的支持者。甚至有人预言,它将完全替代编译语言。说这样话的人好像忘了这样一件事,那就是解释语言的编译器几乎是C/C++开发的。编译语言的编译器、链接器可以用编译语言编写,然而解释语言只能借助编译语言发展。

    解释语言还有一个致命伤——源代码必须交给用户。对把源代码视作最高商业机密的软件企业来说,这简直是自砸饭碗,不会有人愿意这样子做。因此,有人预言,解释语言的生命力不会长,不过他也错了。现在,解释语言已经是高级语言中不可或缺的一部分。它在web开发和应用软件脚本扩展等领域发挥着巨大作用。通过法律的保护,人们已近不再特别介意源代码的保密,甚至有人愿意公开源代码与人交流。至于速度问题,一方面,因为硬件性能提升、成本下降,硬件瓶颈不再突出;另一方面,解释语言也采用了很多提高速度的办法。有一种办法是:解释,后解释。

    Java和C#语言都是先编译,后解释的。编译器并不把它们编译成机器代码,而是编译成一种中间代码(Java语言中称为字节码,C#语言中称为MSIL),当然,这个中间代码必须在其平台上运行。Java语言提供的平台称为JVM,它纯碎靠解释字节码来运行程序;C#语言的运行平台称为CLR,它并不是一个纯碎的解释器,而是翻译器,把MSL代码翻译成机械代码,再运行它。它们都要有平台才能运行,所以它们都比编译语言慢,Java语言比C#语言更慢。但它们具备解释语言最大的好处——简单,而且只需经过一次编译,避免了源代码的传播,非常适合开发大型应用软件。

    2.内存

    程序在运行是和数据一起保护在内存内,有CPU执行。

    程序和数据都是以二进制方式存储的,存储的单位是字节(Byte),每台计算机的内存都能存储一定字节数的内容。通常,每个存储单元能保存一个字节。

    内存的每个单元都被分配一个唯一的整数,称为地址。这就像着宿舍一样,用地址就能找到你要找的地方。

    持续更新......

    展开全文
  • VfpDecoder反编译软件

    热门讨论 2008-12-22 22:18:47
    所以我在V1.5中作了限制,最大400K,(一般的程序不会有这么大的FXP文件),如果得到的FXP文件是400K,那么它是由一个正常的FXP文件和后面一些垃圾数据组成,没关系,用FoxTools可以正确反编译的。 6.本程序是在...
  • 最新.NET反编译软件Red Gate .NET Reflector V10.1.3.1218 软件是一个可以将以.NET Framework为基础开发出来的的DLL或EXE文件,反编译为原始程序的工具软件。 此工具软件强大到连.NET Framework的官方类别组件,都...
  • 什么是反编译? 计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的 目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理...
    1. 什么是反编译?

      	计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的
      目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、
      结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。
      
    2. 反编译工具

      反编译工具:ildasm  C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
      再编译工具:ilasm  C:\Windows\Microsoft.NET\Framework\v2.0.50727
      	这两个工具都是visual studio自带的,反编译工具直接在开始菜单中能找到,可以以窗体形式展现
      反编译结果,ilasm需要在控制台输入命令完成操作。(当然还有其他反编译工具,如:dnSpy,ILSpy,
      .Net Reflector等)
      
    3. 具体操作

      没有经过反编译的应用程序是登录不上去的
      

    在这里插入图片描述在这里插入图片描述
    (1)打开程序里IL反汇编程序(×64)

    在这里插入图片描述
    (2)打开需要反编译的应用程序(也就是.exe文件)点击文件->打开->。exe文件位置

    在这里插入图片描述在这里插入图片描述
    (3)点击文件->转储 然后给文件起个名字(我这里是Login2)。它会再其路径下出现俩个文件,一个Login2.il,另一个是Login2.res。

    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    (4)利用记事本打开Login2.il文件,就可以修改其中的代码,把账号和密码都改为空,相当于破解了这个应用程序

    在这里插入图片描述
    在这里插入图片描述
    (5)利用管理员的身份进入cmd

    在这里插入图片描述
    (6)先用命令进入到应用程序的位置(.exe文件的位置)再利用再反编译工具ilasm C:\Windows\Microsoft.NET\Framework\v2.0.50727 最后再加上resource=Login2.res Login2.il 来生成Login2.exe
    应用程序。待编译完成,就会发现破解了用户登录的问题。
    在这里插入图片描述在这里插入图片描述
    (7)这时打开Login2.exe文件,点击登录就可以直接登录进去。
    在这里插入图片描述
    在这里插入图片描述
    是不是很神奇啊,所以我们所写的程序需要代码加密,否则你的程序很容易被别人破解。那么下个博客和大家分享下如何加密。

    展开全文
  • 当我们看到某一项目的效果很炫而又不知道该如何实现时,我们可以通过查看该项目的源码实现原理,从而去学习,提高自身的能力。当然该软件指在学习提升自己,而不是恶意的查看,复制别人项目的源码!
  • 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、...

    什么是反编译

    高级语言源程序经过编译变成可执行文件,反编译就是逆过程。但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。

    反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,作为自己开发软件时的参考,或者直接用于自己的软件产品中。所以现在大家写的东西就想办法保护,不被侵权!

    总之,有时候我们想要阅读代码,但是只有jar包却没有源码,就需要用到反编译工具了。

    Java反编译工具JD-GUI

    有多种平台的安装版本,可以自己选择下载安装,也可以直接下载JAR包,然后用java -jar进行运行,如下:

    java -jar jd-gui-1.4.0.jar

    安装Eclipse的反编译插件

    jd-eclipse

    jd-gui在Eclipse上也有对应的反编译插件jd-eclipse,安装方式如下:

    打开Eclipse -> Help -> Install New Software... -> Add...

    在弹出的窗口中输入Name和Location,Name可以随意取,Location要填写反编译插件的下载地址:http://jd.benow.ca/jd-eclipse/update (该地址可能已经过期,需要去官网下载jd-eclipse,地址:http://java-decompiler.github.io/ )

    填写完毕后会加载该插件的相关信息,勾选该插件,一路Next安装下去即可。

    重启Eclipse该插件即可生效。

    不过安装插件后Eclipse可能继续使用着默认的class查看器,我们可以把它改成我们新安装的jd查看器:

    Window -> Preference -> General -> Editors -> File Associations

    选中*.class文件 -> 将Class File Editor设置为默认(Default)

    最后确定修改,无需重启Eclipse即可生效。

    新版本的jd-eclipse的类文件查看器名字可能叫做JD Class File Viewer(总之,Class File Viewer是Eclipse自带的类文件查看器,安装插件后会出现新的类文件查看器)

    Enhanced Class Decompiler 3.0.0

    上边的反编译插件jd-eclipse可能在安装并修改了class查看器后依然无效,可能是由于Eclipse版本不兼容或者其他的原因,这时候可以安装另一个反编译插件,安装步骤如下:

    打开Eclipse -> Help -> Eclipse Marketplace...

    在弹窗的搜索框中输入Decompiler,选择安装Enhanced Class Decompiler 3.0.0

    安装工程中有Next选Next,中间需要选择接受安装协议,最后点击Finish

    安装结束后重启Eclipse生效

    参考链接

    展开全文
  • 这是一款目前最好的java反编译工具,拥有它,你就可以快速进行反编译,了解代码的原理,参考代码源…… 若有任何技术问题或其它疑问,请联系资源主QQ:908599713
  • 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构...
  • 反编译

    2021-03-12 09:56:15
    计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理...
  • Java反编译工具有什么用的详细解析一、反编译工具的原因是,...三、反编译:的基本原理是基于虚拟机的高级语言,并且所有的编译软件都采用二进制字节,因此抽象语法可以通过在编译原理中将二进制字节码转换成抽象...
  • 自己辛辛苦苦写的软件发现被别的无良程序员copy,更可恨的是还发布到市场,让自己的劳动成果及产品受到莫名的伤害,很可耻,so,我们还是先学习下反编译原理,分析下如何才能防止别人反编译自己的软件。...
  • 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、...
  • DeDe便利用这个原理进行反编译,获取相关信息,将界面与事件联系关系还原,但事件的汇编代码不能还原。DeDe公开了源代码,感兴趣的读者可以研究一下。 1.主要功能  用DeDe可以查看Delphi程序窗体的属性,可以...
  • 反编译apk

    2018-06-06 17:15:42
    反编译是一个发杂的过程,所以越是高级的语言,就越难于反编译:2,反编译的目的通过对他人软件的目标程序进行逆向分析,推导出他人软件产品所使用的思路,原理,结构,算法,处理过程,运行方法等涉及要素,可作为...
  • DeDe便利用这个原理进行反编译,获取相关信息,将界面与事件联系关系还原,但事件的汇编代码不能还原。DeDe公开了源代码,感兴趣的读者可以研究一下。 1.主要功能 用DeDe可以查看Delphi程序窗体的属性,可以查看...
  • 一、名称解释逆向 - 是一种产品设计技术再现过程,从可运行的程序...反编译 – 指把机器码(汇编语言) → 高级编程语言,也就是通过反编译工 具对低级语言进行逆向工程,获取其源代码,比如Java的反编译,就是将 c...
  • CE反编译(ce反编译

    2012-10-08 23:16:02
    软件内含的设计思想和原理,通过安装、显示、传输或者存储软 件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!
  • 一、名称解释逆向 - 是一种产品设计技术再现过程,从可运行的程序...反编译 – 指把机器码(汇编语言) → 高级编程语言,也就是通过反编译工 具对低级语言进行逆向工程,获取其源代码,比如Java的反编译,就是将 c...
  • Android应用的反编译

    2015-01-25 19:39:35
    着计算机软件的广泛应用,反编译已成为软件逆向工程...通过对Android应用的反编译,可以推导出他人的思路、原理、结构、算法、处理过程、运行方法等设计要素,作为自己开发软件时的参考,或者直接用于自己的软件产品中
  • Java反编译工具

    2015-12-11 15:32:02
    计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,...反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。
  • 代码加密,防止反编译Virbox Protector加壳工具利用加壳工具可对Unity3D开发的软件进行加壳保护,主要保护方式:碎片代码、混淆、虚拟化。适用于快速加密方案,不需要编写任何代码,通过设置工具提供选项完成软件...
  • Android 反编译工具

    2018-03-31 14:46:55
    反编译的定义--计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 294
精华内容 117
关键字:

反编译软件原理