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
既然修改了代码,出现了错误,动态调试从何谈起?
作为工程师,你能够改变世界的那一点,就在于你可以按照需要,来造轮子。
这个时候,我们有两种办法:
还是从静态环境中,来搜索错误提示
自己造轮子,来搜索错误提示.
为什么需要自己造轮子呢?
静态环境的搭建极其耗时
逆向目标复杂,静态分析容易遗漏
方便后续的补丁操作
看看我们这个时候需要的轮子:
没错,我们需要在jar包中、zip包中、文件夹中、class文件中:
找到我们感兴趣的文件格式
查找字节指纹
打印我们需要的各类信息
如下:
这个时候,我们的检索能力如下:
verbose信息.
静态环境提供的路径、符号、文件搜索.
提供文件指纹、字节特征码搜索的finder.
ServiceAbility Agent提供的运行时信息.
要学会注入自己的代码,给软件打patch。
参加博文:http://www.cnblogs.com/foreach-break/