• 1169阅读
  • 1回复

54.windbg-a、.dvalloc (直接写反汇编和new内存,实例:加入附加的printf) [复制链接]

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

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



目录(?)[+]



a(Assemble)


a 命令对指令助记符进行汇编,并将指令代码的结果放入内存。

如果没有指定地址,汇编会从指令指针的当前值所指向的地址开始。要汇编新的指令,可以输入需要的助记符并按下ENTER。要结束汇编,直接按下ENTER




.dvalloc


.dvalloc 命令使得Windows在目标进程中分配附加的内存。


加入附加的printf

以下是原始的测试代码,自己随意写的:


[cpp] view plain copy
  1. char* g_char = "I am string";  
  2. DWORD ThreadProc(LPVOID lp)  
  3. {  
  4.     while(1)  
  5.     {  
  6.         // todo  
  7.     }  
  8.     return 0;  
  9. }  
  10.   
  11.   
  12. int _tmain(int argc, _TCHAR* argv[])  
  13. {  
  14.     printf("%s\n",g_char);  
  15.     CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,0,0,0);  
  16.     getchar();  
  17.     return 0;  
  18. }  

windbg附加:
查看ThreadProc函数


[cpp] view plain copy
  1. 0:000> u 012313c0 L10  
  2. test1!ThreadProc [d:\windbg\test1\test1.cpp @ 11]:  
  3. 012313c0 55              push    ebp  
  4. 012313c1 8bec            mov     ebp,esp  
  5. 012313c3 81ecc0000000    sub     esp,0C0h  
  6. 012313c9 53              push    ebx  
  7. 012313ca 56              push    esi  
  8. 012313cb 57              push    edi  
  9. 012313cc 8dbd40ffffff    lea     edi,[ebp-0C0h]  
  10. 012313d2 b930000000      mov     ecx,30h  
  11. 012313d7 b8cccccccc      mov     eax,0CCCCCCCCh  
  12. 012313dc f3ab            rep stos dword ptr es:[edi]  
  13. 012313de b801000000      mov     eax,1  
  14. 012313e3 85c0            test    eax,eax  
  15. 012313e5 7402            je      test1!ThreadProc+0x29 (012313e9)  
  16. 012313e7 ebf5            jmp     test1!ThreadProc+0x1e (012313de)<span style="white-space:pre">   </span>///< 这一句又跳回去了,就在这句下手  
  17. 012313e9 33c0            xor     eax,eax  
  18. 012313eb 5f              pop     edi  


1.先构造跳转内存,一块存printf的格式化字符串,一块存跳转


[cpp] view plain copy
  1. 0:000> .dvalloc 100  
  2. Allocated 1000 bytes starting at 00030000  
  3. 0:000> .dvalloc 100  
  4. Allocated 1000 bytes starting at 000f0000  
  5. 0:000> eza 000f0000 "sorry i am not exist string"  
  6. 0:000> da f0000  
  7. 000f0000  "sorry i am not exist string"  


2.写新加的printf函数


[cpp] view plain copy
  1. 0:000> a 00030000  
  2. 00030000 pushad  
  3. pushad  
  4. 00030001 pushfd  
  5. pushfd  
  6. 00030002 push f0000  
  7. push f0000  
  8. 00030007 call dword ptr [test1!_imp__printf]  
  9. call dword ptr [test1!_imp__printf]  
  10. 0003000d add esp,4  
  11. add esp,4  
  12. 00030010 popfd  
  13. popfd  
  14. 00030011 popad  
  15. popad  
  16. 00030012 jmp     test1!ThreadProc+0x1e  
  17. jmp     test1!ThreadProc+0x1e  
  18. 00030017  
  19.   
  20. 0:000> u 30000 L10  
  21. 00030000 60              pushad  
  22. 00030001 9c              pushfd  
  23. 00030002 6800000f00      push    0F0000h  
  24. 00030007 ff15c4822301    call    dword ptr [test1!_imp__printf (012382c4)]  
  25. 0003000d 83c404          add     esp,4  
  26. 00030010 9d              popfd  
  27. 00030011 61              popad  
  28. 00030012 e9c7132001      jmp     test1!ThreadProc+0x1e (012313de)  
  29. 00030017 0000            add     byte ptr [eax],al  

3.把


[cpp] view plain copy
  1. 012313e7 ebf5            jmp     test1!ThreadProc+0x1e (012313de)  

修改成


[cpp] view plain copy
  1. 0:000> a 012313e7  
  2. 012313e7 jmp 30000  
  3. jmp 30000  
  4. 012313ec  
  5.   
  6. 0:000> u 012313e7  
  7. test1!ThreadProc+0x27 [d:\windbg\test1\test1.cpp @ 15]:  

运行:





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

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