精华内容
下载资源
问答
  • Java反编译工具有什么用的详细解析一、反编译工具的原因是,...三、反编译:的基本原理是基于虚拟机的高级语言,并且所有的编译软件都采用二进制字节,因此抽象语法可以通过在编译原理中将二进制字节码转换成抽象...

    Java反编译工具有什么用的详细解析

    860a9335bc8b0b3e23f34905222d5539.png

    一、反编译工具的原因是,随着项目经验的不断改进,大家会遇到一些奇怪的问题。反编译是为了更好地理解问题并大胆地解决它。

    二、所有的学习都是为将来更好的工作和挑战做准备。就我个人而言,我认为技术人员应该对遇到的问题有一个清晰的认识。

    三、反编译:的基本原理是基于虚拟机的高级语言,并且所有的编译软件都采用二进制字节,因此抽象语法可以通过在编译原理中将二进制字节码转换成抽象语法并使用反编译程序协作转换成代码。此外,基于这些原则,反编译工具可以实现各种平台语言之间的代码转换。

    四、不管PS:的反编译有多棒,都不可能和源代码完全一样。

    图形用户界面

    7afa146c485a2b4b01ebe825b5f23adc.png

    五、包括图形界面、eclipse插件和idea插件,支持苹果Mac、、微软视窗和Linux平台,并能反编译类文件、 jar包等。更多的人使用它。

    六、然而,有了便利和图形,再加上时间的沉淀,老四仍然把它排在第一位。顺便说一句,JD-GUI的核心实际上是通过监听jd-core来完成的。

    85e7d78ab31e89601d7dc8cfb929392d.png

    七、Eclipse插件安装方法也是一种常规操作,jd-gui官方网站下载eclipse插件,解压缩并将其放入您的eclipse安装目录中。

    八、然后您可以在eclipse中以jd格式打开类文件,但是jdk似乎不再支持java  8的反编译。

    因为idea目前还没有安装,所以小编今天就不介绍idea的jd-gui插件。

    展开全文
  • Windows PC软件反编译逆向破解

    千次阅读 2021-01-19 00:15:52
    三.IDA Pro汇编工具初识及逆向工程解密实战 [系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向破解 声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,...
     
    

     

    作者的github资源:

    前文分析:

     

    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。


    一.OllyDbg工具简介

    OllyDbg是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,是当今最为流行的调试解密工具之一。它还支持插件扩展功能,是目前最强大的调试工具之一。

    OllyDbg打开如下图所示,包括反汇编窗口、寄存器窗口、信息窗口、数据窗口、堆栈窗口。

     

    peid下载地址:链接:https://pan.baidu.com/s/1LbrMSx0fW1fCLHOpDlXqLQ 

    提取码:oeta 

    OllyDbg下载地址:链接:https://pan.baidu.com/s/1cbvOKSu3aRoSB5n_LyiUAw 

    提取码:pjwq 

    • 反汇编窗口:显示被调试程序的反汇编代码,包括地址、HEX数据、反汇编、注释
    • 寄存器窗口:显示当前所选线程的CPU寄存器内容,点击标签可切换显示寄存器的方式
    • 信息窗口:显示反汇编窗口中选中的第一个命令的参数及跳转目标地址、字符等
    • 数据窗口:显示内存或文件的内容,右键菜单可切换显示方式
    • 堆栈窗口:显示当前线程的堆栈

    在这里插入图片描述

    下图是打开EXE后显示的界面。

    在这里插入图片描述


    下面简单讲解常用的快捷键调试方式。

    F2
    设置断点,如下图所示的红色位置,程序运行到此处会暂停,再按一次F2键会删除断点。

    在这里插入图片描述

    F9
    按下这个键运行程序,如果没有设置相应的点,被调试的程序直接开始运行。

    F8
    单步步过,每按一次这个按键,将执行反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。

    在这里插入图片描述

    F7
    单步步入,功能通单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先停留在子程序的第一条指令上。如下图进入CALL子程序。

    在这里插入图片描述

    在这里插入图片描述

    F4
    运行到选定位置,即运行到光标所在位置处暂停。

    CTRL+F9
    执行到返回,按下此键会执行到一个返回指令时暂停,常用于从系统领空返回到我们调试的程序领空。

    ALT+F9
    执行到用户代码,从系统领空快速返回我们调试的程序领空。

    在这里插入图片描述


    二.OllyDbg分析Crakeme示例1

    第一个案例是 《加密与解密》书中Crakeme v3.0的文件,需要解密用户名和序列号。

    在这里插入图片描述

    点击“Register now”按钮,会有输入错误相关的提示,如下图所示。

    在这里插入图片描述

    OllyDbg动态分析的基本流程如下:

    • 通常拿到一个软件先试着运行软件,如果有帮助文档查阅帮助文档,熟悉软件的基本用法,接着尝试输入错误的注册码,观察错误提示。
    • 如果没有输入注册码的地方,要考虑是否是读取注册表或Key文件(程序读取一个文件中的内容判断是否注册),这些可以用其他工具来辅助分析。
    • 如果都不是,原程序只是一个功能不全的试用版,那要注册为正式版需要手动写代码完善。
    • 如果需要输入注册码,如上图所示,则调用查壳软件检查程序是否加壳(如PeiD、FI),有壳的需要脱壳之后再调用OllyDbg分析调试,无壳的直接调用工具调试。

    下面开始正式的分析。

    第一步:调用PEiD检测程序是否加壳。
    反馈结果为“Borland Delphi 4.0 - 5.0”,无壳Delphi编写的文件。

    在这里插入图片描述

    第二步:运行CrakeMe V3.0文件,并点击“Register now”,提示错误信息。
    对话框提示错误信息“Wrong Serial, try again!”。

    在这里插入图片描述

    第三步:启动OllyDbg软件,选择菜单“文件”,打开CrackMe3文件。
    此时文件会停留在如下位置,双击注释位置能添加自定义注释。

    在这里插入图片描述

    第四步:在反汇编窗口右键鼠标,选择“查找”->“所有参考文本字串”。

    在这里插入图片描述

    弹出如下图所示的对话框。

    在这里插入图片描述

    第五步:右键选择“查找文本”,输入“Wrong”定位“Wrong Serial, try again!”位置。

    在这里插入图片描述

    如下图所示,定位到“Wrong Serial”位置。

    在这里插入图片描述

    第六步:接着右键鼠标,点击“反汇编窗口中跟随”。

    在这里插入图片描述

    接着定位到如下图所示位置。

    在这里插入图片描述

    第七步:选中该语句右键“查找参考”-:“选定地址”(快捷键Ctrl+R)。

    在这里插入图片描述

    弹出如下图所示的“参考页面”。

    在这里插入图片描述

    第八步:双机上面的两个地址(00440F79、00440F93),去到对应的位置。

    在这里插入图片描述

    在这里插入图片描述

    在反汇编窗口中向上滚动窗口,可以看到核心代码:

    在这里插入图片描述

    第九步:通过查看跳转到“Wrong serial, try again”字符串的指令,可以查询相应的程序。
    在“调试选项”->“CPU”->勾选“显示跳转路径”及“如跳转未实现则显示灰色路径”和“显示跳转到选定命令的路径”。

    在这里插入图片描述

    如下图所示:

    在这里插入图片描述

    第十步:详细分析反汇编代码。
    在下图中,地址0040F2C处按下F2键设置断点,接着按F9运行程序。

    在这里插入图片描述

    输入“Test”和“754-GFX-IER-954”,点击“Register now!”,显示结果如下图所示。

    在这里插入图片描述

    程序会在断点处停止,同时提示刚才输入的内容。

    在这里插入图片描述

    输出内容如下所示,其中内存地址02091CE0中输入了刚才的“Test”。

    第十一步:左击“ss:[0019F8FC]=02091CE0,(ASCII “Test”)”,右键选择“数据窗口中跟随数值”,会在数据窗口中看到输入的内容。EAX=00000004 表示输入内容的长度为4个字符。

    在这里插入图片描述

    第十二步:调用F8按键和F7按键一步步分析代码。
    回到下面00440F2C这部分代码,按下F8一步步运行,注意下面的核心代码。

    <span style="color:#000000"><code class="language-html">00440F2C  |.  8B45 FC       mov eax,[local.1]            ;  输入的内容送到EAX,即"Test"
    00440F2F  |.  BA 14104400   mov edx,crackme3.00441014    ;  ASCII "Registered User"
    00440F34  |.  E8 F32BFCFF   call crackme3.00403B2C       ;  关键点:用按F7进入子程序
    00440F39  |. /75 51         jnz Xcrackme3.00440F8C       ;  调走到这里就错误:Wrong serial
    ...
    </code></span>
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    第十三步:当F8运行到“00440F34 |. E8 F32BFCFF call crackme3.00403B2C”时,按下F7进入CALL子程序,此时光标停留在如下所示位置(00403B2C)。

    在这里插入图片描述

    这里的PUSH ebx、PUSH esi等都是调用子程序保存堆栈时使用的命令,按F8一步步运行代码。其核心解释如下,是基础的汇编语言:(参考看雪CCDebuger大神的《OllyDBG入门教程》)

    在这里插入图片描述

    重点:程序运行到如下图所示界面时,可以看到“Test”和“Registered User”的比较。通过上面图片的分析,我们知道用户名必须为“Registered User”。

    在这里插入图片描述

    第十四步:接着按F9键运行程序,出现错误对话框,点击确定,重新在编辑框中输入“Registered User”,再次点击“Register now!”按钮,分析调试程序。
    注意,F12键为暂停。

    在这里插入图片描述

    核心代码如下,其中地址00440F34的CALL已经分析清楚,继续F8执行下一步,知道第二个关键地方,即00440F51,按下F7进入子程序。注意:注释内容的提示不一定存在,需要动态调试程序到寄存器查看对应的注册码,才是正确的做法。

    在这里插入图片描述

    <span style="color:#000000"><code class="language-html">00440F34  |.  E8 F32BFCFF   call crackme3.00403B2C
    00440F51  |.  E8 D62BFCFF   call crackme3.00403B2C
    </code></span>
    • 1
    • 2

    上面两句代码可以看到用户名和注册码都是调用同一子程序,这个CALL分析方法和上面一样。

    在这里插入图片描述

    第十五步:按F8调试该子程序,发现cmp比较两个值是否相等,其中0044102C为注册码内容。

    在这里插入图片描述

    第十六步:按F12暂停,再按F9重新运行,输入正确的用户名和密码,解密成功。

    • Registered User
    • GFX-754-IER-954

    在这里插入图片描述

    难点:调试程序时如何核心代码,比如这里的CMP比较,同时汇编代码也比较晦涩。


    三.OllyDbg分析Crakeme示例2

    这个案例是破解Crakeme中的Afkayas.1.EXE,这是典型的字符串序列破解程序,根据name的值推出serial。

    第一步:通过PEiD检查它无壳,VB编写的。

    第二步:OllyDbg工具打开Afkayas.1.EXE文件如下图所示。

    第三步:反汇编区域右键鼠标,选择“查找”->“所有参考文本字串”。

    第四步:在弹出的对话框中找到失败的提示字符“You Get Wrong”,右键“反汇编窗口中跟随”。

    此时会回到代码区,可以看到失败和成果的字符串。

    第五步:通常成功和失败的反馈字符串相隔不远,需要在之前判断,如果输入的serial正确则成功,否则失败;接着向上找到调用字符串比较函数的入口点。

    注意,这一步比较关键,但个人觉得需要长时间的经验和实践,才能准确定位。

    汇编调用函数之前会先把参数入栈,然后用CALL指令调用函数。在字符串比较函数之前有一句 PUSH EAX 指令,可以推测这里的EAX就是字符串的首地址。

    第六步:在比较函数00402533处按下F2键设置断点,接着按F9键执行,此时会弹出运行界面,我们输入“Eastmount”和“12345678”,然后点击OK按钮。

    此时程序停留在断点处,右下角堆栈区显示了提示的正确Serial。

    第七步:输入正确的用户名和Serial,成果注册。

    • Eastmount
    • AKA-877848


    下面结合鬼手大神和海天一色大神的博文,简单分析加密的基本逻辑,同时强烈推荐大家阅读他们的文章,参见前面的参考文献。这些逆向的经验真不是一朝一夕就能获取的,深知自己要学习和经历的东西太多,你我一起加油。

    基本流程如下:
    serial = ‘AKA-’ + 逆序itoa(strlen(name) * 0x17CFB + name[0])

    • 求出了用户名的长度
    • 将用户名长度乘以0x17CFB得到结果 如果溢出则跳转
    • 将结果再加上用户名的第一个字符的ASCII
    • 将结果转为十进制
    • 将结果和AKA进行拼接,得到最后的序列号

    下面分享一段Python的解密代码。

    <span style="color:#000000"><code class="language-python"><span style="color:#5c6370"># encoding:  utf-8</span>
    
    key <span style="color:#669900">=</span> <span style="color:#669900">"AKA"</span>
    name <span style="color:#669900">=</span> <span style="color:#669900">"Eastmount"</span>
    
    <span style="color:#5c6370">#获取用户名长度</span>
    nameLen <span style="color:#669900">=</span> <span style="color:#669900">len</span><span style="color:#999999">(</span>name<span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>u<span style="color:#669900">'获取用户名长度:'</span><span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>nameLen<span style="color:#999999">)</span>
    
    <span style="color:#5c6370">#用户名长度乘以0x17CFB得到结果</span>
    res <span style="color:#669900">=</span> nameLen <span style="color:#669900">*</span> <span style="color:#98c379">0x17CFB</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>u<span style="color:#669900">'用户名长度乘以0x17CFB:'</span><span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>res<span style="color:#999999">)</span>
    
    <span style="color:#5c6370">#将结果加上用户名的第一个字符的ASCII</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>name<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">,</span> <span style="color:#669900">ord</span><span style="color:#999999">(</span>name<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">)</span>
    res <span style="color:#669900">=</span> res <span style="color:#669900">+</span> <span style="color:#669900">ord</span><span style="color:#999999">(</span>name<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>u<span style="color:#669900">'结果加上用户名第一个字符的ASCII:'</span><span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>res<span style="color:#999999">)</span>
    
    <span style="color:#5c6370">#转换为十进制 省略</span>
    
    <span style="color:#5c6370">#拼接序列号</span>
    key <span style="color:#669900">=</span> key <span style="color:#669900">+</span> <span style="color:#669900">str</span><span style="color:#999999">(</span>res<span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>u<span style="color:#669900">'最终结果:'</span><span style="color:#999999">)</span>
    <span style="color:#c678dd">print</span><span style="color:#999999">(</span>key<span style="color:#999999">)</span>
    </code></span>

    定义不同的用户名可以得到对应的Serial。

    展开全文
  • 反编译工具汇总

    千次阅读 2016-11-26 00:34:25
    转载自UncleChen’s Blog,作者:UncleChenhttp://unclechen.github.io/2016/09/07/Android%E5%8F%8D%E7%BC%96%E8%AF%91%E6%8A%80%E6%9C%AF%E6%80%BB%E7%BB%93/一、Apk反编译工具及其使用方法1.原理 学习反编译之前...

    转载自UncleChen’s Blog,作者:UncleChen

    http://unclechen.github.io/2016/09/07/Android%E5%8F%8D%E7%BC%96%E8%AF%91%E6%8A%80%E6%9C%AF%E6%80%BB%E7%BB%93/

    一、Apk反编译工具及其使用方法

    1.原理
    学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk里面都有什么文件,各种文件都是怎么生成的。

    这里有两篇AndroidWeekly中推荐过的好文章:

    Apk技术也有非常多的技术可以学习,主要都是围绕着如何减小体积,如何提高打包速度展开,这里先不多说了。下面是一张基本的Apk文件结构图。

    APK文件结构

    Apk文件本质上其实是一个zip包。直接拿解压工具解压就可以看到其中包含了什么。下面简单介绍一下Apk文件的结构。

    • AndroidManifest.xml:应用的全局配置文件
    • assets文件夹:原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的网页、音频等等,与res文件夹的区别这里不再赘述,可以参考上面介绍的两篇文章。
    • classes.dex:源代码编译成class后,转成jar,再压缩成dex文件,dex是可以直接在Android虚拟机上运行的文件。
    • lib文件夹:引用的第三方sdk的so文件。
    • META-INF文件夹:Apk签名文件。
    • res文件夹:资源文件,包括了布局、图片等等。
    • resources.arsc:记录资源文件和资源id的映射关系。

    上面的截图中每个文件都是一个最基本的Apk 文件应该包含在内的。但是直接把Apk当做zip解压后的这些文件是没法直接阅读的,毕竟他们都是经过了build-tools打包工具处理过的。我们直接用文本编辑器打开这里面的Manifest文件看看。

    反编译前的Manifest文件

    反编译Apk的目的就是Apk拆成我们可以阅读的文件。通过反编译,我们一般想要得到里面的AndroidManifest.xml文件、res文件和java代码。

    2.Apk反编译步骤
    (1) ApkTool拆包,得到AndroidManifest和res等资源文件
    工具下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads

    功能:拆解Apk文件,反编译其中的资源文件,将它们反编译为可阅读的AndroidManifest.xml文件和res文件。前面讲过,直接把Apk文件当做zip解压,得到的xml资源文件,都是无法直接用文本编辑器打开阅读的,因为它们在打包时经过了build-tools的处理。

    用法:官网https://ibotpeaches.github.io/Apktool/documentation/有介绍,最新版本是2.2.0,运行环境需要jre1.7。

    这里,我演示一下用apktool来拆解Apk文件的基本方法,只需要在终端里面执行下面的命令。

    java -jar apktool.jar d yourApkFile.apk
    // 注意`apktool.jar`是刚才下载后的jar的名称,`d`参数表示decode
    // 在这个命令后面还可以添加像`-o -s`之类的参数,例如
    // java -jar apktool.jar d yourApkFile.apk -o destiantionDir -s
    // 几个主要的参数设置方法及其含义:
    -f 如果目标文件夹已存在,强制删除现有文件夹
    -o 指定反编译的目标文件夹的名称(默认会将文件输出到以Apk文件名命名的文件夹中)
    -s 保留classes.dex文件(默认会将dex文件解码成smali文件)
    -r 保留resources.arsc文件(默认会将resources.arsc解码成具体的资源文件)

    下面我们看一下java -jar apktool.jar d yourApkFile.apk拆解后的结果:

    Apk拆包结果

    我们已经得到一个可以用文本编辑器打开的阅读的AndroidManifest.xml文件、assets文件夹、res文件夹、smali文件夹等等。original文件夹是原始的AndroidManifest.xml文件,res文件夹是反编译出来的所有资源,smali文件夹是反编译出来的代码。注意,smali文件夹下面,结构和我们的源代码的package一模一样,只不过换成了smali语言。它有点类似于汇编的语法,是Android虚拟机所使用的寄存器语言。

    这时,我们已经可以文本编辑器打开AndroidManifest.xml文件和res下面的layout文件了。这样,我们就可以查看到这个Apk文件的package包名、Activity组件、程序所需要的权限、xml布局、图标等等信息。其实我们把Apk上传到应用市场时,应用市场也会通过类似的方式解析我们的apk。

    note1:其实还有一种方法,可以省去每次解包时,都要输入java -jar apktool.jar xxx这行命令,官网也有说明,就是将这个命令包装成shell脚本,方法见:https://ibotpeaches.github.io/Apktool/install/

    note2:如果你在编译的时候,发现终端里面提示发生了brut.android.UndefinedResObject错误,说明你的apktool.jar版本太低了,需要去下载新版工具了。

    note3:如果想要自己实现一个解析Apk文件,提取版本、权限信息的java服务时,可以引用apktool.jar中的ApkDecoder,调用decode方法来实现。可以看下图中,apktool.jar里面有解析Apk文件的实现。

    apktool.jar

    (2) dex2jar反编译dex文件,得到java源代码
    上一步中,我们得到了反编译后的资源文件,这一步我们还想看java源代码。这里要用的工具就是dex2jar。

    工具下载地址:https://sourceforge.net/projects/dex2jar/

    功能:将dex格式的文件,转换成jar文件。dex文件时Android虚拟机上面可以执行的文件,jar文件大家都是知道,其实就是java的class文件。在官网有详细介绍。

    用法:打开下载的dex2jar-2.0文件夹,里面有shell和bat脚本,进入终端,就可以在命令行使用了。

    d2j-dex2jar classes.dex 或 sh dex2jar.sh classes.dex
    // 获取classes.dex文件在最前面说过,只要把Apk当做zip解压出来,里面就有dex文件了
    // 或者用apktool反编译时带上 `-s` 参数

    运行后,可以看到classes.dex已经变成了classes-dex2jar.jar。

    进入dex2jar文件夹

    note1:第一次下载下来后,在mac里运行的时候可能会提示需要管理员的权限,这里我给这些sh脚本chmod 777后,即可运行它。

    root执行dex2jar

    note2:写完这一节的时候,我发现把dex转换成jar已经有了更好的工具enjarify,https://github.com/google/enjarify这个工具是谷歌官方开源的用于反编译dex文件的。使用方法和dex2jar差不多,也是简单的命令行操作。这个工具的主页中也提到dex2jar已经是一个比较老的工具,在遇到混淆等等复杂的情况时,可能无法正常工作。所以这里推荐大家使用enjarify这个工具。

    (3) jd-gui查看java源代码
    工具下载地址:官网http://jd.benow.ca/上选择自己所需要的版本。

    功能:这个工具不用多说,写java的人都知道。有时候我们自己开发一个jar包给别人用,也会用它来查看class是不是都被正确的打入到了jar内,我以前介绍的gradle自定义打包jar的博客中也提到过它。

    用法:下载后双击既可以运行这个工具,直接把上一步得到的classes-dex2jar.jar拖到jd-gui程序的界面上即可打开了,效果如下图所示。

    classes-dex2jar.jar

    反编译Apk步骤小结
    反编译一个Apk,查看它的资源文件和java代码,我们需要用到3个工具。

    反编译就是用这3个工具得到AndroidManifest.xml、res、java代码等。但是我们可以看到,如果你要对一个Apk做尽可能彻底的反编译,把它扒得干干净净,这一步一步的基本操作还是稍显麻烦。另外加固过Apk的情况可能更复杂,需要我们勤动手尝试。为了能提高效率,下面我把自己见过的一些集成工具介绍给大家,尽可能实现可以一键反编译Apk。

    二、自动化工具汇总(一键反编译Apk)

    1.谷歌提供的工具:android-classyshark

    下载地址:https://github.com/google/android-classyshark/releases,下载下来之后是一个可执行的jar文件,win下或者mac下都只要双击即可运行。

    功能:带有界面,一键反编译Apk工具,直接打开Apk文件,就可以看到Apk中所有的文件结构,甚至还集成了dex文件查看,java代码查看,方法数分析、导入混淆mapping文件等一系列工具。谷歌推出这个工具的目的是为了让我们开发者更清楚的了解自己的Apk中都有什么文件、混淆前后有什么变化,并方便我们进一步优化自己的Apk打包实现。下面带上几张截图,真是帅气的一笔的好工具啊!

    dex文件查看

    方法数分析

    即将到来的Android Studio 2.2中集成了一个叫做APK Analyzer的功能,这个功能不知道是不是和这个工具有关系呢,本人还没有尝试过2.2版本,有兴趣的朋友可以体验一下preview版本。

    2.Python实现的工具:AndroidGuard

    下载地址:https://github.com/androguard/androguard/releases

    功能:集成了反编译资源、代码等各种文件的工具包。需要安装Python环境来运行这个工具,这个工具按照不同的反编译需求,分别写成了不同的py功能模块,还有静态分析的功能。所以如果想要用Python开发一个解析Apk文件并进行静态扫描分析的服务,可以引用这个工具来实现。

    用法:具体用法比较多,这里也不再展开了。可以通过工具内置的-h帮助指令查看各个模块的功能。

    unclechendeiMac:androguard-2.0 unclechen$ python androaxml.py -h
    Usage: androaxml.py [options]
    
    Options:
      -h, --help            show this help message and exit
      -i INPUT, --input=INPUT
                            filename input (APK or android's binary xml)
      -o OUTPUT, --output=OUTPUT
                            filename output of the xml
      -v, --version         version of the API
    
    // androaxml.py这个模块是用来解析AndroidManifest文件的,`-i` 表示输入的apk文件,`-o` 表示输出xml文件。

    3.Mac专属工具:Android-Crack-Tool

    https://github.com/Jermic/Android-Crack-Tool
    功能:这是网上一位名为Jermic的大神开发的、在Mac环境下使用的App,集成了Android开发中常见的一些编译/反编译工具,方便用户对Apk进行逆向分析,提供Apk信息查看功能。工具的截图如下所示,非常强大。

    Android-Crack-Tool.app

    4.手机上的反编译工具:ApkParser

    功能:在电脑上已经有了这么多的工具,在手机上的也有很方便的工具。APKParser是一款在查看手机上已经安装的Apk的信息的工具,他可以查看软件的AndroidManifest.xml文件、方法数、res资源文件,并在手机上直接展示出来。个人觉得这是一个非常实用的工具,作为开发者,手机里面必须要有它。

    ApkParser

    5.工具汇总

    以上几款工具都是我体验过、感觉不错的集成工具,推荐给大家。临近本文结束前,又发现了这么一个福利网站-http://www.androiddevtools.cn/,其中有一章专门总结了各种Apk反编译的工具。相信有了这么多的利器,大家应该有100种方法将一个App扒得干干净净了。

    Apk反编译工具汇总

    展开全文
  • class文件反编译工具反编译原理:将.class文件读取出来,里面的机器语言转换成java语言。翻译成相应的语句一般的流程是先把程序调入到数据段,虚拟运行环境,一般这分配文件头部,从纪录指令程序数据段,载入到虚...

    反编译class

    class文件反编译工具是一款class文件反向编译的java工具,它能够将class文件逆向编译为java语言。此款软件比较小巧,特别适合初学者使用,感兴趣的赶紧下载啊!

    adaa4808ab55840f9b9c72a977047e4f.png

    class文件反编译工具反编译原理:

    将.class文件读取出来,里面的机器语言转换成java语言。翻译成相应的语句一般的流程是先把程序调入到数据段,虚拟运行环境,一般这分配文件头部,从纪录指令程序数据段,载入到虚拟环境中,纪录指令,遇到跳转指令,压入栈,形成树结构(看数据结构),遍历每个节点的指令。形成完整程序。

    java中class文件反编译:

    1.开始--运行--cmd--回车--进入命令行窗口

    2.cd+空格+class文件所在路径

    3.按下面的命令进行反编译,例如:2]jad.=sjava.example.class.回车

    4.在目录里可以看到example.java源文件

    5.反编译一个class文件:jad.example.class,会生成example.jad,用文本编辑器打开就是java源代码

    6.指定生成源代码的后缀名:jad.-sjava.example.class,生成example.java

    7.改变生成的源代码的名称,可以先使用-p将反编译后的源代码输出到控制台窗口,然后使用重定向,输出到文件:jad.-p.example.class.>.myexample.java

    8.把源代码文件输出到指定的目录:jad.-dnewdir.-sjava.example.class,在newdir目录下生成example.java

    9.把packages目录下的class文件全部反编译:jad.-sjava.packages/*.class

    10.把packages目录以及子目录下的文件全部反编译:jad.-sjava.packages/**/*.class,不过你仍然会发现所有的源代码文件被放到了同一个文件中,没有按照class文件的包路径建立起路径

    11.把packages目录以及子目录下的文件全部反编译并建立和java包一致的文件夹路径,可以使用-r命令:jad.-r.-sjava.packages/**/*.class

    12.当重复使用命令反编译时,Jad会提示“whether.you.want.to.overwrite.it.or.not”,使用-o可以强制覆盖旧文件

    13.还有其他的参数可以设置生成的源代码的格式,可以输入jad命令查看帮助,这里有个人做了简单的翻译:jad命令总结

    14.当然,你会发现有些源文件头部有些注释信息,不用找了,jad没有参数可以去掉它,用别的办法吧。

    展开全文
  • java反编译软件下载

    2021-04-11 11:55:16
    java反编译软件是一款专为软件编码制作的反编工具,能够享有便捷的编写界面模式,享有最清晰的运行操作窗口,实现自动检测以及安全提示功能,能够实现便捷的操作方式,运行使用方便,操作简单,欢迎到当易网下载体验...
  • 将 exe 文件反编译成 Python 脚本

    千次阅读 多人点赞 2021-10-09 16:19:21
    将 exe 文件反编译成 Python 脚本! 这篇文章跟自己的另一篇文章,正好形成技术上互逆过程,也同时欢迎阅读指正: python代码文件封装为可执行exe文件_py_IA&IM的博客-CSDN博客1.安装依赖库pip install pywin...
  • 原标题:Java代码的编译与反编译一、什么是编译1、利用编译程序从源语言编写的源程序产生目标程序的过程。2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,...
  • jd-gui for Mac是Mac平台上的一款帮助用户进行java反编译的工具,jd-gui mac分为JD-GUI、JD-Eclipse两种运行方式,JD-GUI是以单独的程序的方式运行,JD-Eclipse则是以一个Eclipse插件的方式运行。注意事项MacOS ...
  • Android反编译实战-去广告

    千次阅读 2020-12-25 15:44:02
    0x00 软件中的广告 什么是广告? 任何与软件本身无关的内容都属于广告; 广告的表现形式很多,有的时候是一个界面(activity),有的时候是局部在上方或下方的一个区域视图(view),有的时候可能是工具条...
  • Java代码的编译与反编译2017-02-21 Hollis 数盟一、什么是编译1、利用编译程序从源语言编写的源程序产生目标程序的过程。2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,...
  • 原理学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk里面都有什么文件,各种文件都是怎么生成的。这里有两篇AndroidWeekly中推荐过的好文章:Apk技术也有非常多的技术可以学习,主要都是围绕着...
  • AndroidManifest.xml 反编译 在 powershell 窗口输入:java -jar xml2axml.jar d AndroidManifest.xml AndroidManifest-out.xml 就这么简单,反编译完成。这个时候文件夹中会出现一个 AndroidManifest-out.xml 文件...
  • 可以看到已经完美的反编译出exe其中的Python脚本: 好了,相信大家已经明白了反编译原理。那么既然是攻防,如何防止自己打包的exe被反编译呢? 如何防止exe被反编译呢 只需在打包命令后面加上--key命令即可,例如...
  • Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器...
  • 微信小程序分包反编译教程

    千次阅读 2021-03-26 14:47:26
    以EMS中国邮政速递物流小程序为例介绍下带分包小程序反编译操作流程 实验环境前置准备模拟器内软件安装获取小程序包开始解包导入开发者工具逆向教程小程序参考资料小程序逆向视频专栏小程序逆向训练营小程序正逆向·...
  • 一、什么是编译1、利用编译程序从源语言编写的源程序产生目标程序的过程。2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2...
  • 标记整理 + 化整为零并发的多线程回收器 目前最常用的两种垃圾回收器,也不用多说,肯定是CMS和G1,一般面试官会问下CMS和G1的区别以及各自的特点,不太会深入问实现原理,毕竟Java面试可问的知识点实在太多了,都一...
  • java如何防止反编译

    2021-01-12 17:17:42
    公司为了商业技术的保密考虑,不希望这里面的一些核心代码能够被人破解(破解之后,甚至可以被简单改改就发布出去,说严重点,就可能会扰乱公司的正常软件的市场行为),这时候就要求这些java代码不能够被反编译。...
  • 反编译是一个复杂的过程,所以越是高级语言,就越难于反编译,但目前还是有许许多多的反编译软件:通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、...
  • 一提到反编译,对于很多童鞋一定会赶脚很复杂很高大上的酱紫,在安卓平台上,对APK的反编译其实是非常简单的。今天菲菲君要为大家准备一枚APP反编译解包打包神器,真正实现一键自动搞定,新人也能分分钟会用哟~先来...
  • ios的 ipa的安装包 也是同样的原理 把.ipa 改成 .rar 然后解压到单独的文件夹 可以反编译的文件的路径就在: 解压后的文件夹\Payload\godoflight.app\Data (这里我用的是神之光举例子 所以是 godoflight.app) ...
  • 开源一个小程序反编译客户端 咨询小程序反编译的同学比较多,虽然有开源库但是还是有同学不清楚如何去操作,所以索性做了一个客户端方便进行小程序的反编译 技术选型开发环境涉及技术前置准备开源地址使用方法有偿...
  • 点击下方“IT牧场”,选择“设为星标”java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己...
  • 反编译可以借助第三方软件,比如 JD-GUI 。 本文所采用的方法不用借助第三方软件:都是基于IDEA内嵌的一个JD实现的,名为 FernFlower decompiler 最简单的一种反编译就是JD(Java 反编译器)将.class文件转换成一...
  • 计算机程序编译原理学习心得《编译原理》是计算机专业的一门重要课程,正如教材:第一章的引论所述,“编译程序是现代计算机系统的基本组成部分之一”。“一个编译程序就是一个语言翻译程序,语言翻译程序把一种语言...
  • Java反编译工具有什么用、相信入行很长时间的大佬都知道是参考的价值,我们大多数人得每一行代码都根据上一个人的写出的代码的基础上改选编辑而来,下面是浪浪下载站今天给大家带来的关于Java反编译工具有什么用的...
  • 对于众多软件的开发者来说,java反编译工具是非常有用的一种工具,它采用的是非常独立的图形界面,用户在使用这种浏览工具的时候,可以重新创建源代码,能够及时访问方法和字段的设置,通过代码高度文件的方式显示...
  • STS(eclipse) 反编译工具安装步骤

    千次阅读 2018-11-09 18:26:58
    (实现原理不同,有时间的话写篇日志解析下两种方式的不同)。spring-core中已经包含了cglib的,所以使用spring我们可以直接使用cglib。但是,我打算看看MethodInterceptor的源码是,发现没有源码~~ 。 找到spring-...
  • java反编译工具

    2021-02-12 15:25:59
    java反编译工具是一款反向翻译Java工具,能够帮助用户将....java反编译工具简介java反编译工具是一款可以将jar文件转换成Java源代码的反编译工具,用户通过Java反编译工具不仅能够快速获取到文件的源代码,同时还能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,132
精华内容 16,852
关键字:

反编译软件原理