双机调试
双机调试
1.打开源代码文件a.cpp
2.!process 0 0 进程名
3.显示eprocess结构体地址,输命令 .process /i /r /p 地址
4.g
5..reload /user /f
6.在cpp下断点,g
双机调试应用实例:
ps(调试的时候记得看microsoft file有没有文件;virtualKD:将target64复制到虚拟机,然后启动程序)
首先虚拟机按f8关闭强制签名
运行AutoRun.exe,然后在Windbg打开源代码文件,再break(注意这里打开的exe与cpp一定要是同一个文件)
!process 0 0 进程名(显示进程名)
显示eprocess结构体地址,输命令 .process /i /r /p 地址,然后输入g继续运行,再.reload /user /f加载符号
在cpp中下断点,断在CreateService函数的位置,一步一步调试到要到的位置,这个位置的选定要结合IDA,首先IDA打开CreateService的dll,下图中圈出来的前三个是该函数的开头字节码。
下图是该函数的伪代码,调试发现函数进的是箭头指向的函数,所以直接动态调试进该函数,我们动态调试的目的是需要看该函数的第二个参数是什么。但是由于参数地址后面加了3090,所以在静态分析的时候不能准确判断。
在windbg中动态调试查看第二个参数压入栈的寄存器的值,在IDA中找到该地址的值,就可以得到我们要的函数字节码
对比发现是4800h开头的值