多读书多实践,勤思考善领悟

逆向分析之 一.常见的汇编指令

逆向分析之 一.常见的汇编指令

主要介绍什么是逆向分析,以及逆向分析过程中常用的汇编指令。 软件逆向的定义:软件逆向工程是通过反汇编和调试等手段,分析计算机程序的二进制可执行代码从而获得程序的算法细节和实现原理的技术。 研究对象:没有公开源代码的计算机程序,主要是已...

软件代码的静态和动态分析

软件代码的静态和动态分析

介绍代码的静态分析和动态分析技术,能够使读者在进行安全测试的时候在宏观上有一个明确的执行方向。 1. 代码静态分析技术定义:是在不执行计算机程序的条件下,对源代码进行分析,找出代码缺陷。 执行方式:一般配合静态程序分析工具进行。 采用...

Java逆向基础之二十二.Byteman

Java逆向基础之二十二.Byteman

Byteman的是由Jboss发明主要是为了支持多线程和多JVM测试的自动化。 Byteman规则语言提供了一组标准的内置操作,这些操作支持特定的上述类别中的任务 为了简化测试自动化,Byteman已经与两种流行的测试框架JUnit和...

Java逆向基础之二十一.AspectJ

Java逆向基础之二十一.AspectJ

AspectJ是一个面向切面编程的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。 AspectJ目前支持以下三种编织的方式 编译时编织:把aspe...

Java逆向基础之十九.ZKM字符串混淆与还原

Java逆向基础之十九.ZKM字符串混淆与还原

为了防止静态分析,ZMK在混淆时对输出的字符串使用对称加密方法进行加密 早期的ZKM只在静态代码块的时候进行简单的异或加密,后续版本使用了流加密技术进行二次加密 看一个简单的字符串输出例子12345678package com.vvv...

Java逆向基础之十八.JDB动态调试

Java逆向基础之十八.JDB动态调试

JDB在有源代码的时候可以实现调试远程机器上的java程序,但是在逆向中源码很难分析出来,不过还是能够调试得到一部分信息的 本文主要获取两个信息 1.动态调用混淆类中的方法,因为实践过程中我们去手动补全相关代码比较难 2.打印调用栈 ...

Java逆向基础之十七.导出内存中的类

Java逆向基础之十七.导出内存中的类

为什么需要这个,因为在之前的博文中提到,为了增加逆向的难度,部分软件会对部分关键方法和类进行隐藏,所以我们需要把这个类从内存中拿出来。 介绍使用javaagent和dumpclass,两种方法各有利弊。 1. 使用javaagent本...

Java逆向基础之十六.打印所有类名

Java逆向基础之十六.打印所有类名

在 Java SE 5 及其后续版本当中,开发者可以在一个普通 Java 程序(带有 main 函数的 Java 类)运行时,通过 –javaagent 参数指定一个特定的 jar 文件(包含 Instrumentation 代理)来...

Java逆向基础之十五.初识javaagent

Java逆向基础之十五.初识javaagent

首先说一下javaagent是什么 javaagent是一种能够在不影响正常编译的情况下,修改字节码。 在逆向中javaagent可以完成对类的拦截和增强。 看一个例子在Eclipse新建如下MyAgent结构的项目 MyAgent...