-
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”
猜您喜欢
- Win7笔记本小技巧:如何关闭触摸板,..2024-04-30
- win7安全证书过期,如何轻松解决?快..2024-04-30
- Win7本本无线网络不显示?这5招轻松解..2024-04-29
- windows7开机密码遗忘?别急,教你轻松..2024-04-29
- Win7电脑锁屏壁纸轻松换,让你的Wind..2024-04-29
- win7电脑开机无法进入桌面?看这里,..2024-04-29
相关推荐
- win7蓝屏怎么分析dmp文件 win7蓝屏dmp文件..2022-05-01
- Win7系统下文件夹无法拖动?这些方法..2024-01-23
- 啥叫待机状态_电脑设备待机是什么意..2021-07-07
- Win7浏览器老是自动弹出网页怎么处理..2021-04-08
- pp助手安装app旧版本根本安装不了 sa..2022-04-18
- Win7按Ctrl+Alt+Del打不开任务管理器怎么..2022-09-28