Java逆向工程需要的技能和工具

Java逆向分析技术可用于了解第三方软件的运行机制、破解注册码、寻找安全漏洞等。



  • java -verbose

  • HotSpot™ Serviceability Agent

  • jetBrains intellij IDEA 14.3

  • jetBrains CLion 1.0.4

  • jd-gui 1.2

  • jinfo

  • dump运行时的class信息

  • 带混淆调试

  • ClassPath和vm options修复

  • ClassFinder:在一大堆的jar中搜索需要的信息

  • 字节码修改工具


RSA加密,CRC校验


  • step in/over/out (单步 步入/步过/跳出)

  • evaluate expressions (表达式计算)

  • stack frame in/out (栈帧切换)

  • break point (断点啊亲)


为了取得更好的反编译效果,我们这次不使用jd来做,在博主安装的Intellij IDEA的lib下,有一个fern flower的反编译工具,这也是IDEA的默认反编译器,我们就用它了,有兴趣的东西可以搜索下,貌似跟mine craft有很大渊源。


为了能够充分掌握某个关键类、方法的调用路径,以方便我们进行回溯或者探索重要信息,通常我们采用如下几种方法:

  • 反编译源代码,在关键点处充分修改,打印调用栈.

  • 利用静态AOP或者hook,插入我们的调试器.

  • 将代码当作文本处理,以利用sed/grep/less等工具,以及文件索引能力,方便大批量的进行关键代码搜索.

  • 直接用调试器附加目标进程,要显示源码的话,往往需要我们加-g以产生调试信息,这一点在My Eclipse的保护机制下受到限制,但这也是我们需要突破的地方.

  • 利用IDE提供的查找使用/正向依赖/反向依赖分析技术.

  • 利用dump,将关键代码段或者类信息从目标进程中dump出来并还原为源代码.

总之,灵活结合上述几种手段,目的是为了充分在My Eclipse这头大象身上辗转腾挪,取我所需.


自己造轮子,精准搜索:finder

既然修改了代码,出现了错误,动态调试从何谈起?

作为工程师,你能够改变世界的那一点,就在于你可以按照需要,来造轮子。

这个时候,我们有两种办法:

  1. 还是从静态环境中,来搜索错误提示

  2. 自己造轮子,来搜索错误提示.

为什么需要自己造轮子呢?

  • 静态环境的搭建极其耗时

  • 逆向目标复杂,静态分析容易遗漏

  • 方便后续的补丁操作

看看我们这个时候需要的轮子:

这里写图片描述

没错,我们需要在jar包中、zip包中、文件夹中、class文件中:

  • 找到我们感兴趣的文件格式

  • 查找字节指纹

  • 打印我们需要的各类信息

如下:

这里写图片描述

这个时候,我们的检索能力如下:

  1. verbose信息.

  2. 静态环境提供的路径、符号、文件搜索.

  3. 提供文件指纹、字节特征码搜索的finder.

  4. ServiceAbility Agent提供的运行时信息.


要学会注入自己的代码,给软件打patch。


参加博文:http://www.cnblogs.com/foreach-break/



原文地址:https://www.cnblogs.com/xiuquan/p/5104431.html