eclipse 逆向调试 java程序--- 调试|远程调试(含本地)|爆破软件

一、常用快捷键

全局 单步返回 F7 
全局 单步跳过 F6 
全局 单步跳入 F5 
全局 单步跳入选择 Ctrl+F5 
全局 调试上次启动 F11 
全局 继续 F8 
全局 使用过滤器单步执行 Shift+F5 
全局 添加/去除断点 Ctrl+Shift+B 
全局 显示 Ctrl+D 
全局 运行上次启动 Ctrl+F11 
全局 运行至行 Ctrl+R 
全局 执行 Ctrl+U
 

二、    如何确定目标软件跑到了java中
2.1界面提示由awt.dll提供;
2.2 进程启动参数


三、    java远程调试目标软件(本地调试也可)
3.1 创建一个空的java的工程,备用
3.2 获取远程软件的启动参数

两种方法:
         第一种,使用OD调试起来,到起进程的地方断得到启动参数;
        另一种,比较快得到进程启动参数的方式:使用Process Explorer,找到进程右键属性,可以看到启动参数command Line,这个就是exe的启动参数;

3.3 使用启动参数,编写批处
       用启动参数编写批处理;将\\ 改为\  ;
       3.3.1 设置目标软件为服务器端eclipse为客户端 的调试
-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 写在启动参数中
        dt_socket:使用的通信方式
        server:是主动连接调试器还是作为服务器等待调试器连接
        suspend:是否在启动JVM时就暂停,并等待调试器连接;
        address:地址和端口,地址可以省略,两者用冒号分隔,如果不写地址,默认为localHost。
此时,eclipse作为客户端,选择连接的类型为 “标准(套截字连接)

    “调试配置界面”Debug Configurations,新建Remote Java Application,设置好后,点击调试按钮,将eclipse调试起来;可以在调试界面,看到“正在等待VM连接到端口8000”

     另外,也可以设置eclipse为服务器端,设置监听,设置目标软件为客户端,这样,原厂启动的时候,eclipse 就会断在main函数处;
设置eclipse 为服务器端: “甲壳虫“-调试配置--- ”“远程java引用程序“---”“选项目JAveTest” ----选择连接的类型为 “标准(套截字帧听)”-连接属性会自动变为  Port = 8000;

-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:8000,suspend=y
如果是远程调试,address要写上IP;

      3.3.2  -jar 【参考jar】
       将参考使用的AAAA.jar写在-jar后面,这样启动eclipse调试就能到这个jar里面去;
实际上运行的就是-jar 后面的这个jar包; 

3.4    将jar文件导入到工程中
使用eclipse ,新建一个工程,在工程中添加jar,进行调试;
工程名,右键属性,java构建路径,库中选择“添加外部jar“,选择需要调试的jar即可;如果当前路径下的jar删掉了 ,工程属性中就会显示缺少; 
或者使用jd-GUI,直接可以打开jar包,可以看到.class

3.5    eclipse 需要有反编译器才行
设置反编译器---“首选项”-反编译器 里面---调试设置-下的两项都打勾,
“以注释方式输出原始行号信息”、”根据行号对齐代码以便于调试”,这样就能在代码中看到有行的注释

例如:/*  86 */     this.value = value;
否则,不能下断调试。
 

4、    使用jd-GUI 打开jar,可以将java代码导出来,用UE搜索关键字,静态分析代码;

5、    java修改目标软件字节码,达到爆破软件的目的
    5.1    使用高级语言java修改,修改后需要重新编译成jar能行(没有试过,听说比较麻烦); 
    5.2    使用dirtyJOE修改字节码(修改字节码)修改后放回jar,可以直接使用; 
      具体步骤: 将jar包后缀改成zip,使用解压工具将需要修改的.class 文件拿出来,使用工具dirtyJOE修改字节码逻辑,然后再将修改后的class放回到zip中,然后将zip改为jar后缀,即可
    注意:dirtyJOE 只能修改字节码,不能删除字节码;不能使用goto 0xA7,ireturn 0xAC,return 0xB0;
    常见的修改:函数常量参数(立即数)、跳转目标地址、ife|ifne(0x99 改为0x9A)、ifge 0x9c | ifle  0x9e、If_icmplt  0xA1  改为 if_icmpgt  0xA3

 

 

你可能感兴趣的:(----java,编程,调试,逆向)