各类语言所用逆向工具汇总

C/C++:.exe

image.png

是什么

逆向考察的主力区域,也是传统逆向的唯一文件类型,除了此类型的介绍了动调,其他仅介绍了静调。

怎么做

  • OD(32位):动态调试的代表,下断点,修改某段代码执行,等等,主要用于理解程序执行步骤

    • 替代,界面和使用方式和OD基本相同
    • x32dbg,x64dbg(支持64位程序)
  • IDA(有32位和64位版):静态调试汇编代码,可以生成伪代码(下同),是exe反汇编的主力

python:.py .pyc

例题

是什么

和java类似python也是一门半解释半执行的语言,.py后缀的python源码可以理解为全解释的解释型代码,而python编译器可以将.py后缀的代码(也就是日常所说的python代码)编译成字节码,然后再执行代码内容。也就是说转换为字节码是每次运行py文件必不可少的步骤,因此,如果直接运行字节码无疑会提高编译运行速度,在python中的.pyc就是保存字节码的文件。

  • .py文件:直接写的python代码
  • .pyc文件:python代码转换为字节码后的文件

怎么做

而对于逆向而言,使用一个库就可以进行对pyc代码的逆向了,经过学习,选择uncompyle进行逆向,使用pipconda指令安装皆可。注意:uncompyle库是跨版本的,因此python2和3的使用没有差异,python2.7使用的是uncompyle2,python3.x使用的是uncompyle6,指令安装会自带安装对应版本。常用指令如下

  • 以python3举例对应uncompyle6
  • 安装

    • pip install uncompyle
    • liunx下git clone https://github.com/rocky/python-uncompyle6然后进入下载的目录python setup.py install
    • conda镜像库暂时没有uncompyle所以conda install不行
  • 反编译(忘了指令也可以uncompyle6 --help

    • uncompyle6 原文件路径.pyc > 保存的文件路径.py
  • 指令记忆

    • compyle:v.编译,其中含有com-聚集-编译成字节码所以更集成,-py- python专属,-le 编译了速度快了乐了,com-py-le
    • un-:反,un-compyle,反编译

java: .jar .class

例题

是什么

前置知识点学习了:

java是一门半解释半执行的语言,.java后缀的java源码可以理解为全解释的解释型代码,而javac编译器可以将.java后缀的代码(也就是日常所说的java代码)编译成java虚拟机可以直接使用的半编译的代码后缀为 .class,因为java虚拟机每次在运行 .java文件的时候都需要经历javac这一步,因此将java代码提前编译成javac文件无疑会提高代码编译执行速度。

  • .java文件:直接写的java原代码
  • .jar文件:将一系列.java文件和一些配置文件集合的一个文件夹封装成文件的形式,提高项目集成度,类似php的.phar文件
  • .class文件:将java原代码使用javac编译产生的字节码(jdk环境中默认安装javac编译器)

    • javac 文件路径.java
    • javap -c -verbose 文件路径.class(javap不自带)

怎么做

回到正题,而作为ctf逆向来说直接阅读字节码显然是不现实,我们可以使用更为方便的官方的一些软件来直接反编译呈现代码。

经过查询,最为方便的要数JD-GUI

项目地址:http://java-decompiler.github.io/

因为没有java项目开发或者学习经验,因此直接采用集成度更高的JD-GUI

如果有相关经验的,可以采用相关的插件来使自己的编辑器支持这些功能也是可以的。

android:.apk .dex .jar

例题

  • buu-findit

是什么

安卓底层是java,但是又有一套自己的规范,安卓本身相当于一个框架,基于java制作的框架。

相当于jq和js,bootstrap和css,scrapy和python的关系等等。而apk本质是一个.zip的压缩包,类似java的jar,php的phar,直接修改后缀就可以得到这个文件夹实际的目录了,这个操作和使用javap -c -verbose 文件路径.class把jar文件还原成目录的形式是一样的。在apk这个压缩包里面有个xxxxxx.dex文件,这个文件就是保存源码的文件,其他的可以简单理解为用于给android这个框架识别的配置文件,而在.dex文件中,可以使用专门的工具还原java的jar文件,这个就是真正的源码所在地。

  • .apk:封装.dex文件和其他一些android这个框架的配置文件(需要改成.zip后缀解压缩 手动解包)
  • .dex:储存.jar文件和其他一些更核心的配置文件(需要使用dex2jar.bat解包)
  • .jar:封装java代码的一个打包文件(需要使用JD-GUI解包和反汇编)

怎么做

一般流程如下

.apk--(.zip解压缩)-->.dex--(dex2jar.bat)-->.jar--(JD-GUI)-->java代码

回到正题,逆向来说

  1. 手动解包,修改.apk文件后缀改成.zip后直接解压缩就可以了
  2. 在解压缩的文件里面找到.dex文件,下载解压缩dex2jar项目文件后

    1. 让cmd进入d2j-dex2jar.bat所在目录
    2. 在cmd中输入指令d2j-dex2jar.bat .dex文件路径
    3. 注意版本问题dex2jar支持的最新版本为35(https://blog.csdn.net/lonewolf521125/article/details/89095783

dex2jar项目地址:http://sourceforge.net/projects/dex2jar/

JD-GUI项目地址:http://java-decompiler.github.io/

unity C# net

例题

是什么

是一个基于第三方C#库(unity和net)的C#程序

怎么做

  • 主程序文件在:.\Managed\Assembly-CSharp.dll
  • 需要使用net反汇编软件能更好的反汇编,使用经典的 dnSpy反编译工具(IDA也可以不过难理解不少),打开

    • 其中的{}分类下才是代码内容,其他的是一些第三方库的内容或者是生成的配置代码
Last modification:June 29, 2021
如果觉得我的文章对你有用,请随意赞赏。咖啡(12RMB)进度+100%,一块巧克力(1RMB)进度+6%。
(赞赏请备注你的名称哦!后台记录中来自理工小菜狗)