rwkeith1

Untitled

May 11th, 2022
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Current command...
  2. // conveniently our hyperviser driver and dll that is test signed are both of length 0x4A.  We filter NtQueryAttributesFile and NtOpenFile on ours.
  3. // condition checks if process executing syscall is BEService.exe
  4.  
  5. !syscall condition { 65488B042588010000488B80B8000000488B80A805000048B942455365727669634839C874054831C0EB0748C7C001000000C3 } script {
  6.     // fastcall (rcx, rdx, r8, r9, stack)
  7.     if (@rax == 0x17) {
  8.         printf("[*]BES:TID:%d: NtQueryValueKey: %ws\n", $tid, dq(@rdx+0x8));
  9.     }
  10.     elsif (@rax == 0x7) {
  11.         printf("[*]BES:TID:%d: NtDeviceIoControlFile: Handle: %d\n \tIOCTL: 0x %llx\n", $tid, @rcx, (@rsp + 0x30));
  12.     }
  13.     elsif (@rax == 0x12) {
  14.         printf("[*]BES:TID:%d: NtOpenKey: %ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  15.     }
  16.     elsif (@rax == 0x1d) {
  17.         printf("[*]BES:TID:%d: NtCreateKey: %ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  18.     }
  19.     elsif (@rax == 0x16) {
  20.         printf("[*]BES:TID:%d: NtQueryKey: KeyInfoClass: %d\n", $tid, @rdx);
  21.     }
  22.     elsif (@rax == 0x36) {
  23.         printf("[*]BES:TID:%d: NtQuerySystemInformation: SystemInformationClass: %d\n", $tid, @rcx);
  24.     }
  25.     elsif (@rax == 0x3d) {
  26.         StringLen = wcslen(dq(poi(@rcx+0x10)+0x8));
  27.         if (StringLen == 0x4A)
  28.         {
  29.             printf("[*]BES:TID:%d: NtQueryAttributesFile:%ws\nMAKING CHK FAIL?\n", $tid, dq(poi(@rcx+0x10)+0x8));
  30.             @rcx = 0; //<- not safe?
  31.             //strPtr = (poi(@rcx+0x10)+0x8);
  32.             //*strPtr = 0xDEADBEEFDEADBEEF;
  33.             //printf("\t\tNew:%ws\n", dq(poi(@rcx+0x10)+0x8));
  34.         } else { printf("[*]BES:TID:%d: NtQueryAttributesFile: %ws\n", $tid, dq(poi(@rcx+0x10)+0x8)); }
  35.     }
  36.     elsif (@rax == 0x19) {
  37.         printf("[*]BES:TID:%d: NtQueryInformationProcess: Handle: %d\n", $tid, @rcx);
  38.     }
  39.     elsif (@rax == 0x142) {
  40.         printf("[*]BES:TID:%d: NtQueryDirectoryFileEx: FileHandle: %d \n", $tid, @rcx);
  41.     }
  42.     elsif (@rax == 0x48) {
  43.         printf("[*]BES:TID:%d: NtCreateEvent:\n", $tid);
  44.         if (@r8 != 0) {
  45.             printf("\nName:%ws\n", dq(poi(@r8+0x10)+0x8));
  46.         }
  47.     }
  48.     elsif (@rax == 0x55) {
  49.         StringLen = wcslen(dq(poi(@r8+0x10)+0x8));
  50.         if (StringLen == 0x4A)
  51.         {
  52.             printf("[*]BES:TID:%d: NtCreateFile:%ws\nMAKING CHK FAIL\n", $tid, dq(poi(@r8+0x10)+0x8));
  53.             @r8 = 0;
  54.             @rcx = 0;
  55.         } else { printf("[*]BES:TID:%d: NtCreateFile: %ws\n", $tid, dq(poi(@r8+0x10)+0x8)); }
  56.     }
  57.     elsif (@rax == 0x33) {
  58.         printf("[*]BES:TID:%d: NtOpenFile: %ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  59.     }
  60.     elsif (@rax == 0x6) {
  61.         printf("[*]BES:TID:%d: NtReadFile: Handle:0x %llx\n", $tid, @rcx);
  62.     }
  63.     elsif (@rax == 0x119) {
  64.         printf("[*]BES:TID:%d: NtNotifyChangeKey:KeyHdle:0x %llx, EvntHdle: 0x %llx\n", $tid, @rcx, @rdx);
  65.     }
  66.     elsif (@rax == 0x120) {
  67.         printf("[*]BES:TID:%d: NtOpenKeyEx: :%ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  68.     }
  69.     else { printf("[-]BES:TID:%d: Uncased syscall: 0x%x\n", $tid, @rax);
  70.     }
  71. } imm yes
  72.  
  73. !sysret condition { 65488B042588010000488B80B8000000488B80A805000048B942455365727669634839C874054831C0EB0748C7C001000000C3 } script {
  74.     // fastcall (rcx, rdx, r8, r9, stack)
  75.     if ()
  76. }
  77.  
  78.  
  79.  
  80.  
  81. !syscall condition { 65488B042588010000488B80B8000000488B80A805000048B942455365727669634839C874054831C0EB0748C7C001000000C3 } script {
  82.         // fastcall (rcx, rdx, r8, r9, stack)
  83.         if (@rax == 0x17) {
  84.             printf("[*]BEService.exe (TID:%d): NtQueryValueKey : ValueName:%ws\n", $tid, dq(@rdx+0x8));
  85.         }
  86.         elsif (@rax == 0x7) {
  87.             printf("[*]BEService.exe (TID:%d): NtDeviceIoControlFile : Handle: %d\n \tIoControlCode: 0 x %llx\n\tOutBufLen:", $tid, @rcx, (@rsp + 0x30));
  88.         }
  89.         elsif (@rax == 0x12) {
  90.             printf("[*]BEService.exe (TID:%d): NtOpenKey : ObjectAttributes->ObjectName:%ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  91.         }
  92.         elsif (@rax == 0x36) {
  93.             printf("[*]BEService.exe (TID:%d): NtQuerySystemInformation : SystemInformationClass: %d\n", $tid, @rcx);
  94.         }
  95.         elsif (@rax == 0x19) {
  96.             printf("[*]BEService.exe (TID:%d): NtQueryInformationProcess : Handle: %d\n", $tid, @rcx);
  97.         }
  98.         elsif (@rax == 0x142) {
  99.             printf("[*]BEService.exe (TID:%d): NtQueryDirectoryFileEx : FileHandle: %d \n", $tid, @rcx);
  100.             isValid = check_address( poi(@rbp + 0x58) + 0x8 );
  101.             if (isValid == 1) {
  102.                 is_valid = check_address( dq(poi(@rbp + 0x58) + 0x8) );
  103.                 if (is_valid == 1) {
  104.                     printf("\tFileName->Length: %d\n", dd( poi(@rbp + 0x58)) );
  105.                     printf("\tFileName param using stack: %ws\n", dq( poi(@rbp + 0x58) + 0x8) );
  106.                 } else { printf("\tNo filename addr or we failed to offset it?\n"); }
  107.             } else { printf("\tNo filename addr or we failed to offset it?\n"); }
  108.             printf("\n");
  109.         }
  110.         elsif (@rax == 0x55) {
  111.             StringLen = wcslen(dq(poi(@r8+0x10)+0x8));
  112.             printf("[*]BEService.exe (TID:%d): NtCreateFile : ObjectAttributes->ObjectName:%ws\n Name Length: %d\n", $tid, dq(poi(@r8+0x10)+0x8), StringLen);
  113.         }
  114.         elsif (@rax == 0x33) {
  115.             printf("[*]BEService.exe (TID:%d): NtOpenFile : ObjectAttributes->ObjectName:%ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  116.         }
  117.         elsif (@rax == 0x6) {
  118.             printf("[*]BEService.exe (TID:%d): NtReadFile : Handle:%llx\n", $tid, @rcx);
  119.         }
  120.         elsif (@rax == 0x120) {
  121.             printf("[*]BEService.exe (TID:%d): NtOpenKeyEx : ObjectAttributes->ObjectName:%ws\n", $tid, dq(poi(@r8+0x10)+0x8));
  122.         }
  123.         else { printf("[-](TID:%d): Uncased syscall triggered for BEService.exe: 0x%x\n", $tid, @rax); }
  124.     } imm yes
  125.  
  126.             /*if (strLen == 74) {
  127.                 printf("\tOur Driver? I'll pass null: %ws\n", (dq(poi(@r8+0x10)+0x8) + (strLen * 2) - (12 * 2)));
  128.                 // pass a null ptr for it to fail?
  129.                 //@rcx = 0;
  130.             }*/
  131.  
  132. // evaluates to true always
  133. !epthook nt!NtQuerySystemInformation condition { 90 48 ff c0 c3 } script { printf("Test %d", 1); } imm no
  134.  
  135.  
  136. Raw form: 65488B042588010000488B80B8000000488B80A805000048B942455365727669634839C874054831C0EB0748C7C001000000C3
  137.  
  138. mov rax, gs:[0x188]                # Current thread (_KTHREAD)
  139. mov rax, [rax+0xb8]               # Current process (_EPROCESS)
  140. mov rax, [rax+0x5a8]               # (_EPROC + 0x5a8) ImageFileName
  141. movabs rcx, 0x6369767265534542     # compare name of process with BEServic (civreSEB in hex)
  142. cmp rax, rcx
  143. je ReturnTrue
  144.  
  145. xor rax, rax
  146. jmp Return
  147.  
  148. ReturnTrue:
  149. mov rax, 0x1
  150.  
  151. Return:
  152. ret
Advertisement
Add Comment
Please, Sign In to add comment