最近看到一个trojan把自己拷到回收站里隐藏,然后发现我两万年前写的ark取得的进程路径还是原路径。。。
突然想起来很久以前看到某群的讨论
拿破伦19:22:03
拿破伦19:22:33
KKindOf 19:23:05
丫的,这是面试题吧
DRL不爱天使 19:23:06
嗯
DRL不爱天使 19:23:32
你说的是Win7么
拿破伦 19:23:43
恩啊
DRL不爱天使 19:23:59
XP就不会
拿破伦 19:24:16
DRL不爱天使 19:24:50
7的文件管理很优越
拿破伦 19:24:53
为啥win7可以了
拿破伦 19:25:06
这个能用来干坏事不
拿破伦 19:25:16
移动一个被占用的文件感觉。。。
DRL不爱天使 19:25:36
不知道 我是好人
DRL不爱天使 19:25:40
拿破伦 19:26:30
是啊,移动不会提示被占用。。。这个没想通
KKindOf 19:27:00
干啥,如果独占的就不能移动了
拿破伦 19:27:28
这个是程序打开,不知道怎么设置独占啊
KKindOf 19:35:10
你就是说运行了后,然后就移动,这样别人扫描进程列表就扫不出正确的路径?
拿破伦 19:35:21
嗯
宁妖01 19:35:34
额
拿破伦 19:35:35
启动是的路径不对了
=======================================================================================================
其实xp和win7下都是可以的,已经跑起来的进程,他的可执行文件只要在当前盘符下,随便移动。移动之后任务管理器可能会得不到进程已经变更的可执行文件名。
进程的文件名更改之后 eprocess的UCHAR ImageFileName[16];不会更新。SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo;也不会主动更新
网上比较多的代码是找 eprocess → SectionObject. _SEGMENT_OBJECT →_SEGMENT→_CONTROL_AREA→_FILE_OBJECT
然后从 _FILE_OBJECT的filename结合RtlVolumeDeviceToDosName去取路径
一般情况下是ok的。但当进程运行起来之后,如果对镜像文件重命名,这时候再从_FILE_OBJECT的filename去取路径就只有原路径了
得到更改后路径的方法是得到FILE_OBJECT之后去调ObQueryNameString,(也可以自己实现ObQueryNameString,直接发irp)
详见NtQueryInformationProcess的实现