freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3175回复:27

ir_pid怎么和GetCurrentProcessId取得的值对应啊?

楼主#
更多 发布于:2004-08-12 11:13
小弟在学习WIN98下文件删除保护程序时遇上难题,
我安装了IFSMgr_InstallFileSystemApiHook钩子,
但拦截时无法判断删除操作是哪个程序发出的,
尤其是SHELL32发出的?
ir_pid属性我已测试,但无法与前台程序找到的process ID相对应,请各位大侠帮助


例如取得的ir_pid是71875
客户端进程id用getcurrentprocessid得的是类似4294554249这样的

最新喜欢:

ljmmaryljmmar...
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-01-24 21:07
;@GOTO TRANSLATE


.586P

.MODEL   FLAT, STDCALL

   OPTION   CASEMAP: NONE


   INCLUDE   WINDOWS.inc
   UNICODE   = FALSE
   INCLUDE   APIMACRO.mac

   INCLUDELIB   iKERNEL32.lib
   INCLUDELIB   iUSER32.lib


.DATA?
   xESP     DWORD           ?
   pentry32 PROCESSENTRY32  <>
   Place    SIGN 11 DUP     (?)
  
.CODE
   TEXT     Hex2Str,       </##x/0>
   TEXT     GetCPIDstack,  <Obsfucator via GetCurrentProcessId and stack/0>
   TEXT     GetCPIDkernel, <Obsfucator via GetCurrentProcessId and kernel/0>
   TEXT     GetCTIDstack,  <Obsfucator via GetCurrentThreadId and stack/0>
   TEXT     GetCTIDkernel, <Obsfucator via GetCurrentThreadId and kernel/0>
   TEXT     TH32,          <Obsfucator from Toolhelp32/0>

   Titles   DWORD  GetCPIDstack, GetCPIDkernel, GetCTIDstack, GetCTIDkernel,\
                   TH32


 PrimaryThread:
   MOV      EAX,   DS
   SUB      ECX,   ECX
   TEST     AL ,   100B      ;user 32bit tasks have LDT selectors in 9x
   JE       NotIn9x

   ASSUME   FS:    NOTHING    
   PUSH     OFFSET FaultsON  ;build xFrame (see Infos\SEHall.zip)
   PUSH     FS:    [ECX]
   MOV      FS:    [ECX], ESP
   MOV      xESP,  ESP
   MOV      EDI,   ECX
;-------------------------------------------
   iMOV     EBX,   GetCurrentProcessId

   sWin32   EBX
   XOR      EAX,   [ESP-8]       ;bad because it reads from ESP-??
   sWin32   DisplayObsfucateur
;-------------------------------------------
   sWin32   EBX                  ;this method is used in ATM, ApiHooks, ..
   MOV    ECX,   [EBX+1]
   MOV      EDX,   [ECX]
   XOR      EAX,   [EDX]         ;bad because it reads from kernel space
   sWin32   DisplayObsfucateur
;-------------------------------------------
   iMOV     EBX,   GetCurrentThreadId

   sWin32   EBX
   XOR      EAX,   [ESP-8]       ;bad because it reads from ESP-??
   sWin32   DisplayObsfucateur
;-------------------------------------------
   sWin32   EBX
   MOV    ECX,   [EBX+1]
   MOV      EDX,   [ECX]
   XOR      EAX,   [EDX]         ;bad because it reads from kernel space
   sWin32   DisplayObsfucateur
;-------------------------------------------
   MOV      ESI,   OFFSET pentry32
   ASSUME   ESI:   PTR PROCESSENTRY32
   iWin32   CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
   MOV      EBX,   EAX
   MOV      [ESI].dwSize, SIZEOF PROCESSENTRY32
   INC      EAX
   JE       TH32Failed
   iWin32   Process32First, EBX, ESI
   PUSH     EAX
   iWin32   CloseHandle, EBX
   POP      EAX
   TEST     EAX,   EAX
   JE       TH32Failed
   MOV      EAX,   [ESI].th32ParentProcessID ; or th32ModuleID
   sWin32   DisplayObsfucateur
;-------------------------------------------
  TH32Failed:
  SmoothEnd:
   POP      FS:    [0]     ;remove xFrame
   POP      ECX            ;remove xFrame
  NotIn9x:
   iWin32   ExitProcess, EAX


  FaultsON:
   MOV      ECX,  [ESP+12]
   ASSUME   ECX:  PTR CONTEXT
   MOV      EDX,  xESP
   MOV      EAX,  ExceptionContinueExecution
   MOV      [ECX].regEip, OFFSET SmoothEnd
   MOV      [ECX].regEsp, EDX
   RET


  DisplayObsfucateur:
   icWin32i wsprintf,   OFFSET Place, sHex2Str, EAX
   iWin32i  MessageBox, NULL, OFFSET Place, Titles[EDI*4], MB_ICONINFORMATION
   INC      EDI
   RET    

END  PrimaryThread

:TRANSLATE
@ECHO OFF
ML    /c /coff /nologo Obsfucator.bat
LINK3 Obsfucator /IGNORE:4078,4060 /nologo /STUB:PEstub.exe /SUBSYSTEM:WINDOWS /MERGE:.idata=.text
DEL   Obsfucator.obj
PAUSE
CLS
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-24 16:02
[quote]隐隐约约好像觉得是这样:

98把explore等等这些系统进程在R0里面规定成固定的id了,就像717875这样的5位数,然后可能在每次启动的时候,随机生成1个数和717875进行相加,然后就得出10位的那样424xxxxx

问题是现在我找不到资料,没看到官方怎么说的。所以我就没法搞定id值了。

现在每次操作我都能从ir_pid属性知道当前IFS操作的processid,然后我要对比一下我允许访问的processid表是否有它。可是我的processid表是R3应用程序取的10位processid,所以说我必须知道os是如何把5位的R0进程转换成R3的10位进程id的。这样我就可以直接把合法proceesid表保存数据都放5位R0的processid了

好罗嗦阿,不知道你们懂了么


98下的进程ID号就是进程的句柄值和一个魔数相异或得到的。这个魔数是系统每次启动时随机生成的。具体好像是一个叫做OBFUSCATE的函数。 [/quote]
确实是这样,这是微软倒的鬼,但这个magic在内存中什么位置呢?
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-24 14:19
回音就是不行

呵呵呵
dj_ukyo
驱动小牛
驱动小牛
  • 注册日期2003-03-13
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分118分
  • 威望16点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-09 15:17
回音呢?
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-16 17:09
解决了没有?解决了给点分吧,我一点专家分都没有啊!!!
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-08 10:26
谢谢楼上
回去试验一下
cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-02 09:33
隐隐约约好像觉得是这样:

98把explore等等这些系统进程在R0里面规定成固定的id了,就像717875这样的5位数,然后可能在每次启动的时候,随机生成1个数和717875进行相加,然后就得出10位的那样424xxxxx

问题是现在我找不到资料,没看到官方怎么说的。所以我就没法搞定id值了。

现在每次操作我都能从ir_pid属性知道当前IFS操作的processid,然后我要对比一下我允许访问的processid表是否有它。可是我的processid表是R3应用程序取的10位processid,所以说我必须知道os是如何把5位的R0进程转换成R3的10位进程id的。这样我就可以直接把合法proceesid表保存数据都放5位R0的processid了

好罗嗦阿,不知道你们懂了么


98下的进程ID号就是进程的句柄值和一个魔数相异或得到的。这个魔数是系统每次启动时随机生成的。具体好像是一个叫做OBFUSCATE的函数。
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-30 23:41
关键是要了解RED_spring大哥所说的WIN98的PCB结构,我看了一个外国网站上面有WIN95的,但在98下很多不一样,还是不行。
hongsing
驱动小牛
驱动小牛
  • 注册日期2004-05-22
  • 最后登录2012-04-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-30 20:59
楼上的方法不行,帮楼主顶。
zhiyuan19840428
驱动小牛
驱动小牛
  • 注册日期2004-05-11
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-27 08:29
可能AP得到的ID和R0得到的ID不一样。 ?

在driver中可以用下面的代码取进程名:
PCHAR
FilemonGetProcess(
    PCHAR ProcessName
    )
{
    PVOID       CurProc;
    PVOID       ring3proc;
    char        *name;
    ULONG       i;

    //
    // Get the ring0 process pointer.
    //
    CurProc = VWIN32_GetCurrentProcessHandle();
  
    //
    // Now, map the ring3 PCB
    //
    ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(),
                                         (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 );

    if( ring3proc == (PVOID) -1 ) {
        strcpy( ProcessName, "???");
    } else {

        //
        // copy out the process name (max 8 characters)
        //
        name = ((char *)ring3proc) + 0xF2;
        if( name[0] >= 'A' && name[0] < 'z' ) {

            strcpy( ProcessName, name );
            ProcessName[8] = 0;
        } else {

            strcpy( ProcessName, "???" );
        }
    }
    return ProcessName;
}




    ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(),
                                         (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 );
你把上句话的|0x7去掉试试,通过反汇编我发现没有这个,你试试
zhiyuan19840428
驱动小牛
驱动小牛
  • 注册日期2004-05-11
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-27 08:13
我考不累吗?
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-08-26 22:05
adfdsf
chengtao
驱动牛犊
驱动牛犊
  • 注册日期2002-11-30
  • 最后登录2020-03-25
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望78点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2004-08-26 20:41
帮帮你
dj_ukyo
驱动小牛
驱动小牛
  • 注册日期2003-03-13
  • 最后登录2009-06-02
  • 粉丝0
  • 关注0
  • 积分118分
  • 威望16点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-26 11:38
果然憨厚
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-23 20:40
aaaaaaaaaaa
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-23 10:24
顶到牛人烦我
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-08-20 12:13
丁阿
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-08-20 11:13
丁阿
Sundsea
驱动老牛
驱动老牛
  • 注册日期2003-05-06
  • 最后登录2012-06-05
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望35点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-08-18 10:25
帮你顶!!!!!!!!
上一页
游客

返回顶部