• 1116阅读
  • 1回复

6.windbg script -.shell搜索字符串 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-12



.shell 命令启动一个shell进程并将他的输出重定向到调试器或指定的文件

语法

.shell [Options] [ShellCommand]
.shell -i InFile [-o OutFile [-e ErrFile]] [Options] ShellCommand


看下FIND的解释:







Options
可以是任意多个下面的选项:
-ci "Commands"
执行指定的调试器命令,然后将他们的输出作为要创建的进程的输入文件。Commands 可以是任意多个用分号分隔的调试器命令,用引号括起来
lm找所有包含32的:


[html] view plain copy

  1. 0:000> .shell -ci "lm" find /I "32"  
  2. 72a20000 72a25000   MSIMG32    (deferred)              
  3. 74f00000 74f84000   COMCTL32   (deferred)              
  4. 76270000 76339000   USER32     (deferred)              
  5. 76430000 7658c000   ole32      (deferred)              
  6. 76710000 767e4000   kernel32   (deferred)              
  7. 767f0000 7686b000   COMDLG32   (deferred)              
  8. 76870000 7688f000   IMM32      (deferred)              
  9. 76890000 774da000   SHELL32    (deferred)              
  10. 774e0000 7756f000   OLEAUT32   (deferred)              
  11. 775a0000 77640000   ADVAPI32   (deferred)              
  12. 77c40000 77c8e000   GDI32      (deferred)              
  13. .shell: Process exited  



查找汇编字符串

[html] view plain copy

  1. 0:000> .shell -i - -ci "u 77b2054e " find /I "inc    eax"  
  2. .shell: Process exited  
  3. 0:000> .shell -i - -ci "u 77b2054e " find /I "inc     eax"  
  4. 77b20556 40              inc     eax  
  5. .shell: Process exited  
  6. 0:000> u 77b2054e  
  7. ntdll!LdrpDoDebuggerBreak+0x2c:  
  8. 77b2054e cc              int     3  
  9. 77b2054f 8975fc          mov     dword ptr [ebp-4],esi  
  10. 77b20552 eb0e            jmp     ntdll!LdrpDoDebuggerBreak+0x40 (77b20562)  
  11. 77b20554 33c0            xor     eax,eax  
  12. 77b20556 40              inc     eax  
  13. 77b20557 c3              ret  
  14. 77b20558 8b65e8          mov     esp,dword ptr [ebp-18h]  
  15. 77b2055b c745fcfeffffff  mov     dword ptr [ebp-4],0FFFFFFFEh  


但是请不要这样写:


[html] view plain copy

  1. 0:006>  .shell -i - -ci "u 77b2054e " find /I "inc     eax"  
  2. 77b20556 40              inc     eax  
  3. .shell: Process exited  
  4. 0:006>  .shell -i - -ci "u 77b2054e " find /I "inc     eax";  
  5. FIND: 2Îêy¸ñê½2»Õyè·  
  6. .shell: Process exited<span style="font-family:Microsoft YaHei;font-size:12px;">  
  7. </span>  

就因为多了个;号,而在写脚本时,就注意这个了,因为脚本翻译会把回车等最后都加上分号!
所以可以用一个脚本来搜索一个函数指定的汇编字符串


[html] view plain copy

  1. .printf /D "注意!第一个参数是地址或函数名,第二个参数为要查找的汇编语句\n"  
  2.   
  3. .if(0=${/d:$arg1}|0=${/d:$arg2})  
  4. {  
  5.     .printf /D "<b>请输入两个参数!</b>\n"  
  6. }  
  7. .else  
  8. {  
  9.     .printf /D "<b>搜索结果如下:</b>\n"  
  10.     .block  
  11.     {.shell -i - -ci "uf ${$arg1}" FIND  "${$arg2}"};}  
  12. }  

结果如下:


[html] view plain copy

  1. 0:006> $$>a< c:\1.txt   01493800  " push    0"  
  2. 注意!第一个参数是地址或函数名,第二个参数为要查找的汇编语句  
  3. 搜索结果如下:  
  4.   326 0149383a 6a00            push    0  
  5.   332 0149386a 6a00            push    0  
  6.   333 01493887 6a00            push    0  
  7.   334 014938a4 6a00            push    0  
  8.   342 014938dc 6a00            push    0  
  9.   342 014938de 6a00            push    0  
  10.   342 01493906 6a00            push    0  
  11.   353 0149394b 6a00            push    0  
  12.   366 014939a1 6a00            push    0  
  13.   380 01493a42 6a00            push    0  
  14. .shell: Process exited  
  15.                                                                                                                                                                                                                             ^ Syntax error in '.printf /D "<b>注意!第一个参数是地址或函数名,第二个参数为要查找的汇编语句</b>  
  16. '  
  17. 0:006> $$>a< c:\1.txt   VerifyTxSignDemo!HookDllFilter " push    0"  
  18. 注意!第一个参数是地址或函数名,第二个参数为要查找的汇编语句  
  19. 搜索结果如下:  
  20.   326 0149383a 6a00            push    0  
  21.   332 0149386a 6a00            push    0  
  22.   333 01493887 6a00            push    0  
  23.   334 014938a4 6a00            push    0  
  24.   342 014938dc 6a00            push    0  
  25.   342 014938de 6a00            push    0  
  26.   342 01493906 6a00            push    0  
  27.   353 0149394b 6a00            push    0  
  28.   366 014939a1 6a00            push    0  
  29.   380 01493a42 6a00            push    0  
  30. .shell: Process exited  


注意这句:

[html] view plain copy

  1. .shell -i - -ci "uf ${$arg1}" FIND  "${$arg2}"};}  


不要在${$arg2}后直接换行了,不然就像上面提到的查询错误,因为换行变成了分号.


善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线v2680267313

只看该作者 沙发  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个