IoBlockLegacyFsFilters - wut ?
четверг, 17 марта 2016 г.
понедельник, 14 марта 2016 г.
apisetschema.dll from windows 10 build 14279
Several new modules was added:
- onecoreuap-print-render
- onecoreuap-settingsync-status
- win-core-ums
- win-gdi-internal-uap
- net-eap-sim
- win-audiocore-coreaudiopolicymanager
- win-casting-shell
- win-com-psmregister
- win-desktopappx
- win-direct2d-desktop
- win-dx-ddraw
- win-gaming-xinput
- win-kernelbase-packagebreakaway
- win-media-avi
- win-mf-vfw
- win-ntuser-private
- win-rtcore-ntuser-wmpointer
- win-security-shutdownext
- win-uwf-servicing-apis
четверг, 3 марта 2016 г.
lxcore syscall table
I can`t get symbols for lxcore.sys so I just write simple idc scipt. Each item in table has very simple structure:
IDC script to dump syscall table from lxcore.sys:
And table itself
PAGE:00000001C0046620 imul r14, r12, 38h ; size of item in syscall table
PAGE:00000001C0046624 mov r15, rax
PAGE:00000001C0046627 lea rax, lx_ssdt
PAGE:00000001C004662E add r14, rax
PAGE:00000001C0046631 cmp r12, 136h ; count of items in syscall table
PAGE:00000001C0046638 jnb loc_1C00467AE
string with name of method and arguments located at offset 0x10IDC script to dump syscall table from lxcore.sys:
#include <idc.idc>
static main(void)
{
auto addr, name, fp, idx, s_addr;
fp = fopen("lx.dmp", "w");
if ( !fp )
{
return;
}
addr = 0x1C0008110;
for ( idx = 0; idx < 0x136; idx = idx + 1, addr = addr + 0x38 )
{
s_addr = Qword(addr + 0x10);
fprintf(fp, "%X\t", idx);
if ( s_addr != 0 )
{
// dump string
for ( ; ; s_addr = s_addr + 1 )
{
name = Byte(s_addr);
if ( !name )
break;
fprintf(fp, "%c", name);
}
}
fprintf(fp, "\n");
}
fclose(fp);
}
And table itself
пятница, 8 января 2016 г.
CFG with LLVM
On holydays I read book "LLVM Cookbook" (not very good - lots of meaningless copy-pasted code blocks are annoying) and played a bit with fresh llvm-3.7.1 (was released 5 january)
So I decided to check whether it is possible to implement MS CFG in llvm. I have two news - good and bad, as usually
Good: yes, you can easy add instrumentation in llvm - just add some plugin for IR derived from FunctionPass and add call to your guard_check_icall before each VTBL call (or even on any ptr call). I think it will take one day for any CS-student
Bad: you need integration with MS linker and it seems that support of CFG in COFF files is totally undocumented. LLVM itself cannot make load_config and even more - their definition of coff_load_configuration in include\llvm\Object\COFF.h has no fields for CFG (like GuardCFCheckFunctionPointer and GuardCFFunctionTable)
So I decided to check whether it is possible to implement MS CFG in llvm. I have two news - good and bad, as usually
Good: yes, you can easy add instrumentation in llvm - just add some plugin for IR derived from FunctionPass and add call to your guard_check_icall before each VTBL call (or even on any ptr call). I think it will take one day for any CS-student
Bad: you need integration with MS linker and it seems that support of CFG in COFF files is totally undocumented. LLVM itself cannot make load_config and even more - their definition of coff_load_configuration in include\llvm\Object\COFF.h has no fields for CFG (like GuardCFCheckFunctionPointer and GuardCFFunctionTable)
суббота, 5 декабря 2015 г.
WNF identifiers
I have made a mistake in my previous article about WNF. It seems that WNF idenificators are not standard IID but pair of DWORDs, so struct my_wnf_item actually looks like:
Sample from windows 10 build 10586:
List of some WNF identifiers (sure is not completed):
// struct can be ripped from ntdll!RtlpCreateWnfNameSubscription
struct wnf_name
{
/* 0x0 */ DWORD tag; // 0x980912 under x64, 0x700912 under x86
/* 0x4 */ DWORD unk4;
/* 0x8 */ DWORD unk8;
/* 0xC */ DWORD unkC;
/* 0x10 */ DWORD id1;
/* 0x14 */ DWORD id2;
};
struct my_wnf_item
{
LIST_ENTRY List; // linked list of my_wnf_item
wnf_name *wnfId;
PBYTE notify;
};Sample from windows 10 build 10586:
CheckProcess PID 420 (csrss.exe):
PEB.NtGlobalFlag: 0
PEB.Ldr: 00007FF946ED5200
PEB.GdiSharedHandleTable: 000001EFD8BC0000
WnfRoot: 000001EFD8A05BF0
Wnf[0] at 000001EFD8A08238: id1 A3BC4035 id2 96003D (WNF_PNPA_PORTS_CHANGED_SESSION) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[1] at 000001EFD8A080C8: id1 A3BC3875 id2 96003D (WNF_PNPA_PORTS_CHANGED) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[2] at 000001EFD8A07F58: id1 A3BC3035 id2 96003D (WNF_PNPA_HARDWAREPROFILES_CHANGED_SESSION) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[3] at 000001EFD8A07DE8: id1 A3BC2875 id2 96003D (WNF_PNPA_HARDWAREPROFILES_CHANGED) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[4] at 000001EFD8A07C78: id1 A3BC2035 id2 96003D (WNF_PNPA_VOLUMES_CHANGED_SESSION) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[5] at 000001EFD8A07B08: id1 A3BC1875 id2 96003D (WNF_PNPA_VOLUMES_CHANGED) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[6] at 000001EFD8A04EF8: id1 A3BC1035 id2 96003D (WNF_PNPA_DEVNODES_CHANGED_SESSION) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)
Wnf[7] at 000001EFD8A05058: id1 A3BC0875 id2 96003D (WNF_PNPA_DEVNODES_CHANGED) - 00007FF943335410 (C:\Windows\system32\winsrv.DLL)List of some WNF identifiers (sure is not completed):
четверг, 19 ноября 2015 г.
Подписаться на:
Сообщения (Atom)