一、常用快捷键
全局 单步返回 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