如下代碼,A程式創建一個名為SHINE的檔案映射物件,B程式是vs內嵌asm代碼,呼叫Openfilemapping函式打開檔案映射物件,但是總是失敗,用匯編
獲取了DOS錯誤碼總是0x6(句柄無效),同時獲取到NT錯誤碼是0xC0000024STATUS_OBJECT_TYPE_MISMATCH(物件型別不匹配)。
A程式:
char v2[] = "SHINE";
HANDLE MappingHandle = NULL;
ULONG_PTR VirtualAddress = NULL;
HANDLE v1 = INVALID_HANDLE_VALUE;
v1 = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 0x1000, v2);
B程式:
VS內嵌的ASM檔案,
OpenFileMappingA函式地址每次啟動都是一樣的所以寫死了
.DATA
INP DB 'SHINE\0'
.CODE
Sub_1 PROC
;獲取命令列引數保存到[rbp+8h]中
mov rax,qword ptr gs:[60h]
mov rax,qword ptr [rax+20h]
mov rax,qword ptr [rax+78h]
mov qword ptr [rbp+8h],rax
;打開名為"SHINE"的檔案映射物件,并獲得記憶體首地址
lea r8,INP
xor rdx,rdx
mov rcx,6
mov rax,00007ffb4ed0f5d0h ;openfilemappingA首地址,我的電腦上固定的所以寫死了
call rax
mov rax,qword ptr gs:[30h];獲得TEB地址
xor rbx,rbx
mov ebx,dword ptr [rax+68h];偏移0x68處獲得LastErrorValue
mov ecx,dword ptr [rax+1250h];偏移0x1250處獲得LastStatusValue
ret
Sub_1 ENDP
END
小弟用win2k原始碼查了下這個函式的呼叫程序,發現它會呼叫ObReferenceObjectByHandle函式,這里面好像有設定NTstatus為STATUS_OBJECT_TYPE_MISMATCH的程序,也不知道是不是這里出的錯,一頭霧水,還望各位前輩幫忙解決下!小弟非常感激!!!!
uj5u.com熱心網友回復:
64位環境呼叫上滿麻煩的,由于OpenFileMapping 還會呼叫其它函式,但你并沒有把引數按約定同時組織在堆疊,只在暫存器,是不是這個緣故;這是假定 call rax正確的。uj5u.com熱心網友回復:
我的rax里存的地址是GetProcAddress得到的,然后我64位傳參的話不知道有沒有問題?很困惑!uj5u.com熱心網友回復:
剛才看了下 kernel32.dll 里 OpenFileMapping() 的代碼,沒有使用到堆疊里的內容,所以應不是引數傳遞上的問題。還是在 call rax 上斷點吧,看看 rax 是不是指向了 OpenFileMapping() 入口,其時幾個引數是否是預想的;或者,用個單獨的 c程式測驗下。
uj5u.com熱心網友回復:
謝樓上,我放棄了A系列函式改用W系列函式就成功了,可是當我把匯編變成shellcode注入到另一個行程中時就崩潰了.....轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/78484.html
標籤:安全技術/病毒
上一篇:輕松電腦伴侶最新版--輸入法選擇快鍵+滑鼠輕松拖動+滑鼠滾輪翻頁
下一篇:請問搭建kms得問題
