kernl.asm
上传用户:haohao_zhu
上传日期:2014-08-15
资源大小:2446k
文件大小:4k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. .386
  2. .model flat,stdcall
  3. option casemap:none
  4. include masm32includewindows.inc
  5. include masm32includeuser32.inc
  6. include masm32includekernel32.inc
  7. includelib masm32libuser32.lib
  8. includelib masm32libkernel32.lib
  9. ;struct copied from four-f's kmdkits ntddk.inc :)
  10. NTSTATUS typedef        SDWORD
  11. PVOID typedef  PTR
  12. PROCESS_BASIC_INFORMATION STRUCT ; sizeof = 18h
  13. ExitStatus NTSTATUS ?
  14. PebBaseAddress PVOID ? ; PPEB
  15. AffinityMask DWORD ?
  16. BasePriority DWORD ? ; KPRIORITY
  17. UniqueProcessId DWORD ?
  18. InheritedFromUniqueProcessId DWORD ?
  19. PROCESS_BASIC_INFORMATION ENDS
  20. PPROCESS_BASIC_INFORMATION typedef PTR PROCESS_BASIC_INFORMATION
  21. .data
  22. deb_det             db "debugger was detected process can be terminated here",0
  23. caption             db "error",0
  24. ModuleName          db "ntdll.dll",0
  25. proc_name           db "NtQueryInformationProcess",0
  26. proc_name1          db "ZwOpenProcess",0
  27. proc_name2          db "RtlNtStatusToDosError",0
  28. hardcoded_string    db "Internal OLLYDBG error",0
  29. .data
  30. string              db 100 dup (?)
  31. hwnd_ntdll          dd ?
  32. proc_addr           dd ?
  33. proc_addr1          dd ?
  34. proc_addr2          dd ?
  35. curr_procid         dd ?
  36. proc_handle         dd ?
  37. par_proc_handle     dd ?
  38. align 4
  39. pbi PROCESS_BASIC_INFORMATION <>
  40. .code
  41. DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
  42. .if reason==DLL_PROCESS_ATTACH
  43.         invoke IsDebuggerPresent
  44.         .if EAX != 0
  45.             invoke MessageBox ,NULL,offset deb_det,offset caption, NULL
  46.         .endif
  47. .elseif reason==DLL_PROCESS_DETACH
  48. .elseif reason==DLL_THREAD_ATTACH
  49.         invoke GetModuleHandle,offset ModuleName                ;ntdll
  50.         mov hwnd_ntdll ,eax
  51.         invoke GetProcAddress,hwnd_ntdll,offset proc_name       ;NtQueryProcessInformation
  52.         mov proc_addr ,eax
  53.         invoke GetProcAddress,hwnd_ntdll,offset proc_name1      ;ZwOpenProcess
  54.         mov proc_addr1,eax
  55.         invoke GetProcAddress,hwnd_ntdll,offset proc_name2      ;RtlNtStatusToDosError
  56.         mov proc_addr2,eax
  57.         invoke GetCurrentProcessId
  58.         mov curr_procid,eax
  59.         invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,curr_procid
  60.         mov proc_handle,eax
  61.         push NULL
  62.         PUSH sizeof pbi
  63.         push OFFSET pbi
  64.         push NULL
  65.         push proc_handle
  66.         call proc_addr                                          ;NtQueryProcessInformation
  67.         push pbi.InheritedFromUniqueProcessId
  68.         push FALSE
  69.         push PROCESS_VM_READ or PROCESS_VM_OPERATION or PROCESS_VM_WRITE
  70.         call blah                                                                   ;calling simulated code to ZwOpenProcess
  71.         mov par_proc_handle,eax
  72.         invoke ReadProcessMemory,par_proc_handle,04b0642h,offset string,22,NULL     ;reading a string from ollydbg :)
  73.         invoke lstrcmp,offset string,offset hardcoded_string
  74.         .if eax == 0
  75.         invoke MessageBox,NULL,offset string,offset caption,NULL                    ;if run under debugger this will be called
  76.         .endif
  77.         invoke CloseHandle,proc_handle
  78.         invoke CloseHandle,par_proc_handle
  79.         
  80.       .else        
  81. .endif
  82. mov  eax,TRUE
  83. ret
  84. DllEntry Endp
  85. Messagebox proc
  86.         invoke MessageBox ,NULL,offset deb_det,offset caption, NULL
  87.         ret
  88. Messagebox endp
  89. ;simulated call to ZwOpenProcess from kernel32.dll :)
  90. blah:
  91.   PUSH    EBP
  92.   MOV     EBP, ESP
  93.   SUB     ESP, 20h
  94.   MOV     EAX, DWORD PTR SS:[EBP+10h]
  95.   PUSH    ESI
  96.   MOV     DWORD PTR SS:[EBP-8h], EAX
  97.   MOV     EAX, DWORD PTR SS:[EBP+0Ch]
  98.   XOR     ESI, ESI
  99.   MOV     DWORD PTR SS:[EBP-20h], 18h
  100.   NEG     EAX
  101.   SBB     EAX, EAX
  102.   MOV     DWORD PTR SS:[EBP-4h], ESI
  103.   AND     EAX, 2h
  104.   MOV     DWORD PTR SS:[EBP-1Ch], ESI
  105.   MOV     DWORD PTR SS:[EBP-14h], EAX
  106.   LEA     EAX, DWORD PTR SS:[EBP-8h]
  107.   PUSH    EAX
  108.   LEA     EAX, DWORD PTR SS:[EBP-20h]
  109.   PUSH    EAX
  110.   LEA     EAX, DWORD PTR SS:[EBP+10h]
  111.   PUSH    DWORD PTR SS:[EBP+8h]
  112.   MOV     DWORD PTR SS:[EBP-18h], ESI
  113.   MOV     DWORD PTR SS:[EBP-10h], ESI
  114.   MOV     DWORD PTR SS:[EBP-0Ch], ESI
  115.   PUSH    EAX
  116.   CALL proc_addr1
  117.   CMP     EAX, ESI
  118.   JL      clah
  119.   MOV     EAX, DWORD PTR SS:[EBP+10h]
  120. elah:
  121.   POP     ESI
  122.   LEAVE
  123.   RETN    0Ch
  124. clah:
  125.   PUSH    EAX
  126.   CALL    dlah
  127.   XOR     EAX, EAX
  128.   JMP     elah
  129. dlah:
  130.   PUSH    ESI
  131.   PUSH    DWORD PTR SS:[ESP+8h]
  132.   CALL    proc_addr2
  133.   MOV     ESI, EAX
  134.   PUSH    ESI
  135.   CALL    SetLastError
  136.   MOV     EAX, ESI
  137.   POP     ESI
  138.   RETN    4
  139. End DllEntry