sunway_yin
驱动牛犊
驱动牛犊
  • 注册日期2006-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分312分
  • 威望42点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:1802回复:7

为何分析获取到的进程路径名蓝屏?

楼主#
更多 发布于:2007-06-27 13:22
通过对peb进行操作 我们可以获取到当前进程的完整路径的punicode类型的字符串processname,但是当我们有时候需要分析该字符串时候,比如 sccstr(...,processname->Buffer,l"\\c:good")会蓝屏,dbg跟踪结果是process->buffer指针是非法的。。。。他指向地地址。。
 为什么出现这样的问题?怎么解决谢谢
sunway_yin
驱动牛犊
驱动牛犊
  • 注册日期2006-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分312分
  • 威望42点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-27 15:18
当 利用peb获取到了当前进程的完整路径pname后,如果想进行下面的操作 比如:想比较该路径是否含有特定字符用:if((wcsstr(name->Buffer,L"\\C:")))
                                       {...}
  就会死机,为什么呢?????
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
板凳#
发布于:2007-06-27 15:41
你是直接用PEB中的成员BUFFER还是自己额外申请的BUFFER?
人总在矛盾中徘徊。。。
liyunch
驱动小牛
驱动小牛
  • 注册日期2001-06-28
  • 最后登录2014-09-05
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望134点
  • 贡献值0点
  • 好评度94点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-06-28 15:24
wcsstr是以short 0为结尾来查找字串,如果buffer边界恰好不是short 0 .....
sunway_yin
驱动牛犊
驱动牛犊
  • 注册日期2006-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分312分
  • 威望42点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-29 10:00
近日在通过peb获取到进程的完整路径然后需要对他进行分析的时候就出错了。代码如下 :
  

获取当前进程的完整路径的代码:
  PEPROCESS                      CurrentProcess = NULL;
    PUNICODE_STRING          ProcessName=NULL;
    ULONG                                    OffSet=0;
    
    CurrentProcess = PsGetCurrentProcess();
    OffSet = *(PULONG)((ULONG)CurrentProcess + 0x1b0);
    OffSet =#(PULONG)((ULONG)CurrentProcess+0x10);
    ProcessName = (PUNICODE_STRTING)(OffSet+0x38);
  这里就可当前的进程的完整路径保存到ProcessName里面了 。
  下面开始对他进行分析

if(wcsstr(ProcessName->Buffer,L"\\c:"))
{
  ....
}
  这就要出错。
我也想过另外自己造个buffer把processname里面的buffer拷贝出来再使用,但是还是不行 错误是一样的。
qiangguo64
驱动牛犊
驱动牛犊
  • 注册日期2005-01-12
  • 最后登录2009-08-28
  • 粉丝0
  • 关注0
  • 积分144分
  • 威望15点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-29 13:17
根据你的代码分析,你是先取得PEB的指针,然后取得PEB里的指向_RTL_USER_PROCESS_PARAMETERS的ProcessParameters,然后取ImagePathName
但是你的代码里
 PEPROCESS                      CurrentProcess = NULL;
    PUNICODE_STRING          ProcessName=NULL;
    ULONG                                    OffSet=0;
    
    CurrentProcess = PsGetCurrentProcess();
    OffSet = *(PULONG)((ULONG)CurrentProcess + 0x1b0);
    OffSet =#(PULONG)((ULONG)CurrentProcess+0x10);<<<------这一行显然有问题,改成
                                //OffSet =*(PULONG)((ULONG)OffSet +0x10); 试试
    ProcessName = (PUNICODE_STRTING)(OffSet+0x38);
sunway_yin
驱动牛犊
驱动牛犊
  • 注册日期2006-06-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分312分
  • 威望42点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-29 16:31
楼上的说的是对的 那一行的确是错了但只是我的笔误. 事实上就算改过了还是一样会出错, 这样做的话 只要打开word就会死掉. 但是其他程序不会存在这样的问题. 所以提出来给大家 希望大家能多多指点谢谢
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
7楼#
发布于:2007-06-29 19:20
你应该明白 cstr,wstr和unicode_string的不同,前两个是以\0结尾,最后一个是以长度标识的

你的用法,早晚要死机......
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部