yunyong 发表于 2013-6-30 15:50:46

自写 NtOpneProcess 汇编版 XP sp3下 可用

//蓝屏不要怪我哈,最好用windbg抓取 汇编代码后修改

void __declspec(naked) MyNtOpenProcess(void)
    {
    __asm
    {


    //kd> u NtOpenProcess l 100
    //nt!NtOpenProcess:
    // 805c2316 68c4000000      push    0C4h
    push    0C4h
    // 805c231b 68b0aa4d80      push    offset nt!FsRtlLegalAnsiCharacterArray+0x2010 (804daab0)
    push    0x804daab0
    // 805c2320 e81b6cf7ff      call    nt!wctomb+0x45 (80538f40)   
    mov pfun,0x80538f40
    call pfun
    // 805c2325 33f6            xor   esi,esi
    xor   esi,esi
    // 805c2327 8975d4          mov   dword ptr ,esi
    mov   dword ptr ,esi
    // 805c232a 33c0            xor   eax,eax
    xor   eax,eax
    // 805c232c 8d7dd8          lea   edi,
    lea   edi,
    // 805c232f ab            stos    dword ptr es:
    stos    dword ptr es:
    // 805c2330 64a124010000    mov   eax,dword ptr fs:
    mov   eax,dword ptr fs:
    // 805c2336 8a8040010000    mov   al,byte ptr
    mov   al,byte ptr
    // 805c233c 8845cc          mov   byte ptr ,al
    mov   byte ptr ,al
    // 805c233f 84c0            test    al,al
    test    al,al
    // 805c2341 0f848f000000    je      nt!NtOpenProcess+0xc0 (805c23d6)
    je L805c23d6
    // 805c2347 8975fc          mov   dword ptr ,esi
    mov   dword ptr ,esi
    // 805c234a a1549a5580      mov   eax,dword ptr
    mov   eax,dword ptr [ 0x80559a54]
    // 805c234f 8b4d08          mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c2352 3bc8            cmp   ecx,eax
    cmp   ecx,eax
    // 805c2354 7202            jb      nt!NtOpenProcess+0x42 (805c2358)
    jb      L805c2358;
    // 805c2356 8930            mov   dword ptr ,esi
    mov   dword ptr ,esi
    L805c2358:
    // 805c2358 8b01            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c235a 8901            mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c235c 8b5d10          mov   ebx,dword ptr
    mov   ebx,dword ptr
    // 805c235f f6c303          test    bl,3
    test    bl,3
    // 805c2362 7405            je      nt!NtOpenProcess+0x53 (805c2369)
    je      L805c2369;
    // 805c2364 e8ff970400      call    nt!ExRaiseDatatypeMisalignment (8060bb68)
    call    nt_ExRaiseDatatypeMisalignment;
    L805c2369:
    // 805c2369 a1549a5580      mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c236e 3bd8            cmp   ebx,eax
    cmp   ebx,eax
    // 805c2370 7207            jb      nt!NtOpenProcess+0x63 (805c2379)
    jb      L805c2379;
    // 805c2372 8930            mov   dword ptr ,esi
    mov   dword ptr ,esi
    // 805c2374 a1549a5580      mov   eax,dword ptr
    mov   eax,dword ptr
    L805c2379:
    // 805c2379 397308          cmp   dword ptr ,esi
    cmp   dword ptr ,esi
    // 805c237c 0f9545e6      setne   byte ptr
    setne   byte ptr
    // 805c2380 8b4b0c          mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c2383 894dc8          mov   dword ptr ,ecx
    mov   dword ptr ,ecx
    // 805c2386 8b4d14          mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c2389 3bce            cmp   ecx,esi
    cmp   ecx,esi
    // 805c238b 7429            je      nt!NtOpenProcess+0xa0 (805c23b6)
    je      L805c23b6
    // 805c238d f6c103          test    cl,3
    test    cl,3
    // 805c2390 740d            je      nt!NtOpenProcess+0x89 (805c239f)
    je      L805c239f;
    // 805c2392 e8d1970400      call    nt!ExRaiseDatatypeMisalignment (8060bb68)
    call    nt_ExRaiseDatatypeMisalignment;
    // 805c2397 a1549a5580      mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c239c 8b4d14          mov   ecx,dword ptr
    mov   ecx,dword ptr
    L805c239f:
    // 805c239f 3bc8            cmp   ecx,eax
    cmp   ecx,eax
    // 805c23a1 7202            jb      nt!NtOpenProcess+0x8f (805c23a5)
    jb   L805c23a5;
    // 805c23a3 8930            mov   dword ptr ,esi
    mov   dword ptr ,esi
    L805c23a5:
    // 805c23a5 8b01            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23a7 8945d4          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c23aa 8b4104          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23ad 8945d8          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c23b0 c645e701      mov   byte ptr ,1
    mov   byte ptr ,1
    // 805c23b4 eb04            jmp   nt!NtOpenProcess+0xa4 (805c23ba)
    jmp   L805c23ba;
    L805c23b6:
    // 805c23b6 c645e700      mov   byte ptr ,0
    mov   byte ptr ,0
    L805c23ba:
    // 805c23ba 834dfcff      or      dword ptr ,0FFFFFFFFh
    or      dword ptr ,0FFFFFFFFh
    // 805c23be eb42            jmp   nt!NtOpenProcess+0xec (805c2402)
    jmp   L805c2402;
    // 805c23c0 8b45ec          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23c3 8b00            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23c5 8b00            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23c7 8945c4          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c23ca 33c0            xor   eax,eax
    xor   eax,eax
    // 805c23cc 40            inc   eax
    inc   eax
    // 805c23cd c3            ret
    ret
    // 805c23ce 8b45c4          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23d1 e9b0010000      jmp   nt!NtOpenProcess+0x270 (805c2586)
    jmp    L805c2586;
    L805c23d6:
    // 805c23d6 8b5d10          mov   ebx,dword ptr
    mov   ebx,dword ptr
    // 805c23d9 397308          cmp   dword ptr ,esi
    cmp   dword ptr ,esi
    // 805c23dc 0f9545e6      setne   byte ptr
    setne   byte ptr
    // 805c23e0 8b430c          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23e3 8945c8          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c23e6 8b4514          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23e9 3bc6            cmp   eax,esi
    cmp   eax,esi
    // 805c23eb 7411            je      nt!NtOpenProcess+0xe8 (805c23fe)
    je   L805c23fe;
    // 805c23ed 8b08            mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c23ef 894dd4          mov   dword ptr ,ecx
    mov   dword ptr ,ecx
    // 805c23f2 8b4004          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c23f5 8945d8          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c23f8 c645e701      mov   byte ptr ,1
    mov   byte ptr ,1
    // 805c23fc eb04            jmp   nt!NtOpenProcess+0xec (805c2402)
    jmp   L805c2402;
    L805c23fe:
    // 805c23fe c645e700      mov   byte ptr ,0
    mov   byte ptr ,0
    L805c2402:
    // 805c2402 807de600      cmp   byte ptr ,0
    cmp   byte ptr ,0
    // 805c2406 740a            je      nt!NtOpenProcess+0xfc (805c2412)
    je    L805c2412;
    // 805c2408 807de700      cmp   byte ptr ,0
    cmp   byte ptr ,0
    // 805c240c 0f857d010000    jne   nt!NtOpenProcess+0x279 (805c258f)
    jne    L805c258f
    L805c2412:
    // 805c2412 a1d8b25580      mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c2417 83c068          add   eax,68h
    add   eax,68h
    // 805c241a 50            push    eax
    push    eax
    // 805c241b ff750c          push    dword ptr
    push    dword ptr
    // 805c241e 8d852cffffff    lea   eax,
    lea   eax,
    // 805c2424 50            push    eax
    push    eax
    // 805c2425 8d8548ffffff    lea   eax,
    lea   eax,
    // 805c242b 50            push    eax
    push    eax
    // 805c242c e8e15c0200      call    nt!SeCreateAccessState (805e8112)
    call    nt_SeCreateAccessState
    // 805c2431 3bc6            cmp   eax,esi
    cmp   eax,esi
    // 805c2433 0f8c5b010000    jl      nt!NtOpenProcess+0x27e (805c2594)
    jl   L805c2594;
    // 805c2439 ff75cc          push    dword ptr
    push    dword ptr
    // 805c243c ff35a0186780    push    dword ptr
    push    dword ptr
    // 805c2442 ff359c186780    push    dword ptr
    push    dword ptr
    // 805c2448 e80bcc0200      call    nt!SeSinglePrivilegeCheck (805ef058)
    call    nt_SeSinglePrivilegeCheck;
    // 805c244d 84c0            test    al,al
    test    al,al
    // 805c244f 7425            je      nt!NtOpenProcess+0x160 (805c2476)
    je      L805c2476
    // 805c2451 8b8558ffffff    mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c2457 a900000002      test    eax,2000000h
    test    eax,2000000h
    // 805c245c 740c            je      nt!NtOpenProcess+0x154 (805c246a)
    je   L805c246a
    // 805c245e 818d5cffffffff0f1f00 ordword ptr ,1F0FFFh
    ordword ptr ,1F0FFFh
    // 805c2468 eb06            jmp   nt!NtOpenProcess+0x15a (805c2470)
    jmp   L805c2470
    L805c246a:
    // 805c246a 09855cffffff    or      dword ptr ,eax
    or      dword ptr ,eax
    L805c2470:
    // 805c2470 89b558ffffff    mov   dword ptr ,esi
    mov   dword ptr ,esi
    L805c2476:
    // 805c2476 807de600      cmp   byte ptr ,0
    cmp   byte ptr ,0
    // 805c247a 745e            je      nt!NtOpenProcess+0x1c4 (805c24da)
    je      L805c24da
    // 805c247c 8d45e0          lea   eax,
    lea   eax,
    // 805c247f 50            push    eax
    push    eax
    // 805c2480 56            push    esi
    push    esi
    // 805c2481 56            push    esi
    push    esi
    // 805c2482 8d8548ffffff    lea   eax,
    lea   eax,
    // 805c2488 50            push    eax
    push    eax
    // 805c2489 ff75cc          push    dword ptr
    push    dword ptr
    // 805c248c ff35d8b25580    push    dword ptr
    push    dword ptr
    // 805c2492 53            push    ebx
    push    ebx
    // 805c2493 e862fbfeff      call    nt!ObOpenObjectByName (805b1ffa)
    call    nt_ObOpenObjectByName //此函数也容易被挂勾,最好也重写它 命名为Mynt_ObOpenObjectByName 此处修改为 call Mynt_ObOpenObjectByName
    // 805c2498 8bf8            mov   edi,eax
    mov   edi,eax
    // 805c249a 8d8548ffffff    lea   eax,
    lea   eax,
    // 805c24a0 50            push    eax
    push    eax
    // 805c24a1 e82e5a0200      call    nt!SeDeleteAccessState (805e7ed4)
    call    nt_SeDeleteAccessState;
    // 805c24a6 3bfe            cmp   edi,esi
    cmp   edi,esi
    // 805c24a8 7c13            jl      nt!NtOpenProcess+0x1a7 (805c24bd)
    jl      0x805c24bd
    // 805c24aa c745fc01000000mov   dword ptr ,1
    mov   dword ptr ,1
    L805c24b1:
    // 805c24b1 8b45e0          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c24b4 8b4d08          mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c24b7 8901            mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c24b9 834dfcff      or      dword ptr ,0FFFFFFFFh
    or      dword ptr ,0FFFFFFFFh
    L805c24bd:
    // 805c24bd 8bc7            mov   eax,edi
    mov   eax,edi
    // 805c24bf e9d0000000      jmp   nt!NtOpenProcess+0x27e (805c2594)
    jmp   L805c2594
    // 805c24c4 8b45ec          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c24c7 8b00            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c24c9 8b00            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c24cb 8945c0          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c24ce 33c0            xor   eax,eax
    xor   eax,eax
    // 805c24d0 40            inc   eax
    inc   eax
    // 805c24d1 c3            ret
    ret
    // 805c24d2 8b45c0          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c24d5 e9ac000000      jmp   nt!NtOpenProcess+0x270 (805c2586)
    jmp   L805c2586
    L805c24da:
    // 805c24da 807de700      cmp   byte ptr ,0
    cmp   byte ptr ,0
    // 805c24de 0f84ab000000    je      nt!NtOpenProcess+0x279 (805c258f)
    je   0x805c258f
    // 805c24e4 8975d0          mov   dword ptr ,esi
    mov   dword ptr ,esi
    // 805c24e7 3975d8          cmp   dword ptr ,esi
    cmp   dword ptr ,esi
    // 805c24ea 7425            je      nt!NtOpenProcess+0x1fb (805c2511)
    je   L805c2511
    // 805c24ec 8d45d0          lea   eax,
    lea   eax,
    // 805c24ef 50            push    eax
    push    eax
    // 805c24f0 8d45dc          lea   eax,
    lea   eax,
    // 805c24f3 50            push    eax
    push    eax
    // 805c24f4 8d45d4          lea   eax,
    lea   eax,
    // 805c24f7 50            push    eax
    push    eax
    // 805c24f8 e8517e0000      call    nt!PsLookupProcessThreadByCid (805ca34e)
    call    nt_PsLookupProcessThreadByCid
    L805c24fd:
    // 805c24fd 8bf8            mov   edi,eax
    mov   edi,eax
    // 805c24ff 3bfe            cmp   edi,esi
    cmp   edi,esi
    // 805c2501 7d1c            jge   nt!NtOpenProcess+0x209 (805c251f)
    jge    0x805c251f
    // 805c2503 8d8548ffffff    lea   eax,
    lea   eax,
    // 805c2509 50            push    eax
    push    eax
    // 805c250a e8c5590200      call    nt!SeDeleteAccessState (805e7ed4)
    call    nt_SeDeleteAccessState
    // 805c250f ebac            jmp   nt!NtOpenProcess+0x1a7 (805c24bd)
    jmp   L805c24bd
    L805c2511:
    // 805c2511 8d45dc          lea   eax,
    lea   eax,
    // 805c2514 50            push    eax
    push    eax
    // 805c2515 ff75d4          push    dword ptr
    push    dword ptr
    // 805c2518 e8ed7e0000      call    nt!PsLookupProcessByProcessId (805ca40a)
    call    nt_PsLookupProcessByProcessId
    // 805c251d ebde            jmp   nt!NtOpenProcess+0x1e7 (805c24fd)
    jmp    L805c24fd
    // 805c251f 8d45e0          lea   eax,
    lea   eax,
    // 805c2522 50            push    eax
    push    eax
    // 805c2523 ff75cc          push    dword ptr
    push    dword ptr
    // 805c2526 ff35d8b25580    push    dword ptr
    push    dword ptr
    // 805c252c 56            push    esi
    push    esi
    // 805c252d 8d8548ffffff    lea   eax,
    lea   eax,
    // 805c2533 50            push    eax
    push    eax
    // 805c2534 ff75c8          push    dword ptr
    push    dword ptr
    // 805c2537 ff75dc          push    dword ptr
    push    dword ptr
    // 805c253a e88bfefeff      call    nt!ObOpenObjectByPointer (805b23ca)
    call    nt_ObOpenObjectByPointer
    // 805c253f 8bf8            mov   edi,eax
    mov   edi,eax
    // 805c2541 8d8548ffffff    lea   eax,
    lea   eax,
    // 805c2547 50            push    eax
    push    eax
    // 805c2548 e887590200      call    nt!SeDeleteAccessState (805e7ed4)
    call    nt_SeDeleteAccessState
    // 805c254d 8b4dd0          mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c2550 3bce            cmp   ecx,esi
    cmp   ecx,esi
    // 805c2552 7405            je      nt!NtOpenProcess+0x243 (805c2559)
    je      L805c2559
    // 805c2554 e83916f6ff      call    nt!ObfDereferenceObject (80523b92)
    call    nt_ObfDereferenceObject
    L805c2559:
    // 805c2559 8b4ddc          mov   ecx,dword ptr
    mov   ecx,dword ptr
    // 805c255c e83116f6ff      call    nt!ObfDereferenceObject (80523b92)
    call    nt_ObfDereferenceObject
    // 805c2561 3bfe            cmp   edi,esi
    cmp   edi,esi
    // 805c2563 0f8c54ffffff    jl      nt!NtOpenProcess+0x1a7 (805c24bd)
    jl   L805c24bd
    // 805c2569 c745fc02000000mov   dword ptr ,2
    mov   dword ptr ,2
    // 805c2570 e93cffffff      jmp   nt!NtOpenProcess+0x19b (805c24b1)
    jmp   L805c24b1
    // 805c2575 8b45ec          mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c2578 8b00            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c257a 8b00            mov   eax,dword ptr
    mov   eax,dword ptr
    // 805c257c 8945bc          mov   dword ptr ,eax
    mov   dword ptr ,eax
    // 805c257f 33c0            xor   eax,eax
    xor   eax,eax
    // 805c2581 40            inc   eax
    inc   eax
    // 805c2582 c3            ret
    ret
    // 805c2583 8b45bc          mov   eax,dword ptr
    mov   eax,dword ptr
    L805c2586:
    // 805c2586 8b65e8          mov   esp,dword ptr
    mov   esp,dword ptr
    // 805c2589 834dfcff      or      dword ptr ,0FFFFFFFFh
    or      dword ptr ,0FFFFFFFFh
    // 805c258d eb05            jmp   nt!NtOpenProcess+0x27e (805c2594)
    jmp   L805c2594
    L805c258F:
    // 805c258f b8300000c0      mov   eax,0C0000030h
    mov   eax,0C0000030h
    L805c2594:
    // 805c2594 e8e269f7ff      call    nt!wctomb+0x80 (80538f7b)

    mov pfun,0x80538f7b
    call pfun

    // 805c2599 c21000          ret   10h
    ret   10h
    // 805c259c cc            int   3
    int   3
    // 805c259d cc            int   3
    int   3
    // 805c259e cc            int   3
    int   3
    // 805c259f cc            int   3
    int   3
    // 805c25a0 cc            int   3
    int   3
    // 805c25a1 cc            int   3
    int   3
    // nt!NtOpenThread:
    // 805c25a2 68c0000000      push    0C0h
    // 805c25a7 68d8aa4d80      push    offset n
    }
    }
页: [1]
查看完整版本: 自写 NtOpneProcess 汇编版 XP sp3下 可用