系统吧 专业的电脑操作系统,支持重装各种原版系统xp/win7/win8/win10 这个系统怎么样?试试系统吧系统,体验办公系统畅快愉悦感。 各种电脑系统安装过程一样,神一般的畅快!
-->
当前位置:主页 > win7 >

Win7系统中使用WinDbg与虚拟机调试驱动程序的操作方法和要点(8)

作者:宋惜瑶 分类:win7 发布时间:2017-10-12 21:37:56

r $t3 = @$t1 + 3 r $t1 = @$t1 + 7 eb $t1 68 12 34 r $t4 = @$t1 + 1 r $t1 = @$t1 + 5 f $t1 l20 6A 00 b8 68 3d e2 77 ff d0 r $t1 = @$t1 + 9 ed $t3 $t1 ed $t4 $t1 ba e1 $t1 ;$$ 内存运行断点,E代表...

r $t3 = @$t1 + 3

r $t1 = @$t1 + 7

eb $t1 68 12 34

r $t4 = @$t1 + 1

r $t1 = @$t1 + 5

f $t1 l20 6A 00 b8 68 3d e2 77 ff d0

r $t1 = @$t1 + 9

ed $t3 $t1

ed $t4 $t1

ba e1 $t1 ;$$ 内存运行断点,E代表运行1是长度,在E后面通常是1,断在最后一个指令后的第一个地址

f $t1 l20 ‘h’ ‘e’ ‘l’ ‘l’ ‘o’ ‘ ’ ‘w’ ‘o’ ‘r’ ‘l’ ‘d’ ‘!’ 00 00

r $ip=$t0 ;$$ 在分配的内存中直接运行我们自己的代码

g

.dvfree /d $t0 1000

r $ip=$t18 ;$$ 把EIP设置为原来的

.cls ;$$ 当前命令行窗口清屏

p ;$$ 单步步过

-------------------------------------------backtocode.txt结束-----------------------------------

为了anti anti debug我们需要隐藏标题,虽然WINDBG本身有.wtitle指令,可是那个指令会把它后面的所有内容当作字符串输入,而且windbg+版本号是无论怎么改都会被默认添加到最后的。这样上面那个SCRIPT就有用了,就差CODE了。

为了anti anti debug,每次DEBUG的时候,我们都要做一些准备工作,用SCRIPT文件,我们可以自动完成这些操作,下面是我DEBUG之前都会用到的SCRIPT文件

-----------------------------------------------start.txt----------------------------------------

r $t0 = 00

eb 7FFDF002 $t0 ;$$去除DEBUG标志

.pcmd -s “.if(eax《70000000 and eax》00120000){da eax;du eax}; .if(edx《70000000 and edx》00120000){da edx;du edx}”

g $exentry ;$$入口点

-------------------------------------------start.txt结束----------------------------------------

如你所见的,这有点少。没办法水平有限,而且写这篇文章的时候我才勉强说是学会用,还是那句重点是教会大家用WINDBG。WINDBG的初始断点并不是入口点所以得自己用指令让它自动停在入口点,有的程序是有TLS表的,对着PE格式的介绍文章,写一个SCRIPT在有TLSCALLBACK的情况下自动停在TLSCALLBACK入口是有可能的,你会在文章的最后部分得到相关指令的介绍。现在来说说START.TXT中没有注释的指令。

; 分号,多条命令的分隔符。从左到右运行。

下面例子中,对MESSAGEBOXW下断后运行,中断之后便会运行r $t0=esp+8指令

bp messageboxw;g;r $t0=esp+8

注意:如果你使用CRTL+BREAK快捷键在中断之前暂停调试也会导致r $t0=esp+8的运行。

.if(条件表达式){命令} 跟C语言中的用法一样。

.pcmd 不带参数则显示每条指令之后自动使用的指令。-s “命令” 设置命令。-c 清除命令。

da 以ASCII显示内存地址,du以UNICODE显示内存地址

在示例中,整条指令的效果表现为,每单步一个指令,便会当EAX,EDX指向的是一个合法地址的时候,便以ASCII和UNICODE的方式分别显示它的值,就象OD那样。如果熟悉ASCII和UNICODE字符集的范围还能设置仅当有效字符时才显示结果。

在调试的过程中,有时我们希望自动化解决一些问题。例如调试使用了UnhandledExceptionFilter的SEH,我们需要自动修改 ZwQueryInformationProcess的返回值。或者对于某些API的ANTI DEBUG,如果我们修改了输入参数,同样不能返回应该返回的值。学破解不久,一下子要找用了UnhandledExceptionFilter的软件还真不容易,用别的API代替了。我用OD把NOTEPAD 修改一下,改名为TEST放在附件中。

流程MESSAGEBOXW,GETCOMMANDLINEW,MESSAGEBOXW输出COMMANDLINE,最后EXITPROCESS。

现在我要做的是改变GETCOMMANDLINEW的输出,和第二个MESSAGEBOXW的输入。现在让我们看看test2.txt

-------------------------------------------test2.txt-----------------------------------------------

g $exentry

r $t0=0

bp messageboxw “r $t0=$t0+1;j($t0=2)‘r $t1=poi(esp+8);f $t1 l4 45;g’;g”

bp getcommandlinew “g poi(esp);r $t1=eax+5;f $t1 l4 55;g”

xp 更多>>
win7 更多>>
win8 更多>>
win10 更多>>
U盘 更多>>
电脑技术 更多>>
网站地图 | 豫ICP备2021035069号-4 | 友情链接qq:191064436
系统吧

版权所有 © 2012-2023 系统吧 免责声明:本站资源均收集于互联网,其著作权归原作者所有,如果有侵犯您权利的资源,请来信告知,我们将及时删除相应资源。