RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函數分析之創建一個RPCRT4!OSF_CCALL--RPC源代碼分析

RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函數分析之創建一個RPCRT4!OSF_CCALL


第一部分:
1: kd> p
RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION+0x167:
001b:77bf6957 393dec35c877??? cmp???? dword ptr [RPCRT4!gfRPCVerifierEnabled (77c835ec)],edi
1: kd> r
eax=0000015c ebx=007cf938 ecx=00ce1ad4 edx=00000000 esi=00ce1958 edi=00000000
eip=77bf6957 esp=007cf8c0 ebp=007cf8cc iopl=0???????? nv up ei pl nz na pe nc
cs=001b? ss=0023? ds=0023? es=0023? fs=003b? gs=0000???????????? efl=00000206
RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION+0x167:
001b:77bf6957 393dec35c877??? cmp???? dword ptr [RPCRT4!gfRPCVerifierEnabled (77c835ec)],edi ds:0023:77c835ec=00000000
1: kd> x RPCRT4!gfRPCVerifierEnabled
77c835ec????????? RPCRT4!gfRPCVerifierEnabled = 0n0


??????? else
??????????? {
??????????? CachedCCall = new (ClientInfo->SendContextSize+sizeof(PVOID))
?? ??? ??? ?OSF_CCALL(pStatus);
??????????? }

第二部分:
1: kd> p
RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION+0x184:
001b:77bf6974 e83a150200????? call??? RPCRT4!operator new (77c17eb3)
1: kd> p
RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION+0x189:
001b:77bf6979 3bc7??????????? cmp???? eax,edi
1: kd> r
eax=00ce1b98

第三部分:
1: kd> dt ccall 00ce1b98
RPCRT4!CCALL
?? +0x000 __VFN_table : 0xbaadf00d
?? +0x004 MagicLong??????? : 0xbaadf00d
?? +0x008 ObjectType?????? : 0n-1163005939
?? +0x00c RefCount???????? : INTERLOCKED_INTEGER
?? +0x010 NestingCall????? : 0xbaadf00d CALL
?? +0x014 pAsync?????????? : 0xbaadf00d _RPC_ASYNC_STATE
?? +0x018 NotificationIssued : 0n-1163005939
?? +0x01c AsyncStatus????? : 0n-1163005939
?? +0x020 CachedAPCInfo??? : RPC_APC_INFO
?? +0x030 CachedAPCInfoAvailable : 0n-1163005939
?? +0x034 CallingThread??? : 0xbaadf00d THREAD
?? +0x038 UuidSpecified??? : 0n-1163005939
?? +0x03c ObjectUuid?????? : _GUID {baadf00d-f00d-baad-0df0-adba0df0adba}
?? +0x04c EEInfo?????????? : 0xbaadf00d tagExtendedErrorInfo

第四部分:
1: kd> t
RPCRT4!OSF_CCALL::OSF_CCALL:
001b:77bf5662 55????????????? push??? ebp
1: kd> kc
?#
00 RPCRT4!OSF_CCALL::OSF_CCALL
01 RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION
02 RPCRT4!OSF_CASSOCIATION::AllocateCCall
03 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall
04 RPCRT4!OSF_BINDING_HANDLE::NegotiateTransferSyntax
05 RPCRT4!I_RpcGetBufferWithObject
06 RPCRT4!I_RpcGetBuffer
07 RPCRT4!NdrGetBuffer
08 RPCRT4!NdrClientCall2
09 ADVAPI32!LsarGetUserName
0a ADVAPI32!LsaGetUserName
0b ntdll!RtlpWaitOrTimerCallout


OSF_CCALL::OSF_CCALL (
??? RPC_STATUS __RPC_FAR * pStatus
??? ) : CallMutex(pStatus),
????? SyncEvent(pStatus, 0),
????? fAdvanceCallCount(0)
{
??? LogEvent(SU_CCALL, EV_CREATE, this);

??? ObjectType = OSF_CCALL_TYPE;
??? ReservedForSecurity = 0;
??? SecBufferLength = 0;
??? SavedHeaderSize = 0;
??? SavedHeader = 0;
??? InReply = 0;
??? EEInfo = NULL;
??? CachedAPCInfoAvailable = 1;
??? CallbackLevel = 0;

??? CallSendContext = (char *) this+sizeof(OSF_CCALL)+sizeof(PVOID);
??? *((PVOID *) ((char *) CallSendContext - sizeof(PVOID))) = (PVOID) this;
}


1: kd> dv
?????????? this = 00ce1b98
??????? pStatus = 0x007cf938

1: kd> p
RPCRT4!OSF_CCALL::OSF_CCALL+0x6c:
001b:77bf56ce 8d8638010000??? lea???? eax,[esi+138h]
1: kd> r
eax=00000000 ebx=00000001 ecx=00000000 edx=00000000 esi=00ce1b98

??? [+0x0c0] CallSendContext? : 0x0 [Type: void *]

第五部分:

? ObjectType = OSF_CCALL_TYPE;
??? ReservedForSecurity = 0;
??? SecBufferLength = 0;
??? SavedHeaderSize = 0;
??? SavedHeader = 0;
??? InReply = 0;
??? EEInfo = NULL;
??? CachedAPCInfoAvailable = 1;
??? CallbackLevel = 0;

1: kd> dt RPCRT4!OSF_CCALL 00ce1b98
?? +0x000 __VFN_table : 0x77bd3278
?? +0x004 MagicLong??????? : 0x89abcdef
?? +0x008 ObjectType?????? : 0n32?? ??? ??? ?ObjectType = OSF_CCALL_TYPE;
?? +0x00c RefCount???????? : INTERLOCKED_INTEGER
?? +0x010 NestingCall????? : 0xbaadf00d CALL
?? +0x014 pAsync?????????? : 0xbaadf00d _RPC_ASYNC_STATE
?? +0x018 NotificationIssued : 0n-1163005939
?? +0x01c AsyncStatus????? : 0n-1163005939
?? +0x020 CachedAPCInfo??? : RPC_APC_INFO
?? +0x030 CachedAPCInfoAvailable : 0n1
?? +0x034 CallingThread??? : 0xbaadf00d THREAD
?? +0x038 UuidSpecified??? : 0n-1163005939
?? +0x03c ObjectUuid?????? : _GUID {baadf00d-f00d-baad-0df0-adba0df0adba}
?? +0x04c EEInfo?????????? : (null)
?? +0x050 CurrentState???? : 0xbaadf00d (No matching name)
?? +0x054 Connection?????? : 0xbaadf00d OSF_CCONNECTION
?? +0x058 BindingHandle??? : 0xbaadf00d OSF_BINDING_HANDLE
?? +0x05c CallbackLevel??? : 0n0
?? +0x060 Bindings???????? : OSF_CCALL::__unnamed
?? +0x068 CurrentBuffer??? : 0xbaadf00d Void
?? +0x06c fDataLengthNegotiated : 0n-1163005939
?? +0x070 CurrentOffset??? : 0n-1163005939
?? +0x074 CurrentBufferLength : 0xbaadf00d
?? +0x078 CallId?????????? : 0xbaadf00d
?? +0x07c RcvBufferLength? : 0xbaadf00d
?? +0x080 FirstSend??????? : 0n-1163005939
?? +0x084 DispatchTableCallback : 0xbaadf00d RPC_DISPATCH_TABLE
?? +0x088 MaximumFragmentLength : 0xbaadf00d
?? +0x08c MaxSecuritySize? : 0xbaadf00d
?? +0x090 MaxDataLength??? : 0xbaadf00d
?? +0x094 ProcNum????????? : 0n-1163005939
?? +0x098 ReservedForSecurity : (null)
?? +0x09c SecBufferLength? : 0
?? +0x0a0 HeaderSize?????? : 0xbaadf00d
?? +0x0a4 AdditionalSpaceForSecurity : 0xbaadf00d
?? +0x0a8 SavedHeaderSize? : 0
?? +0x0ac SavedHeader????? : (null)
?? +0x0b0 LastBuffer?????? : 0xbaadf00d Void
?? +0x0b4 SyncEvent??????? : EVENT
?? +0x0b8 ActualBufferLength : 0xbaadf00d
?? +0x0bc NeededLength???? : 0xbaadf00d
?? +0x0c0 CallSendContext? : 0x00ce1cd0 Void
?? +0x0c4 fAdvanceCallCount : INTERLOCKED_INTEGER
?? +0x0c8 fPeerChoked????? : 0n-1163005939
?? +0x0cc Flags??????????? : CompositeFlags
?? +0x0d0 fLastSendComplete : 0n-1163005939
?? +0x0d4 CallMutex??????? : MUTEX
?? +0x0ec RecursiveCallsKey : 0n-1163005939
?? +0x0f0 AllocHint??????? : 0xbaadf00d
?? +0x0f4 CallStack??????? : 0n-1163005939
?? +0x0f8 fCallCancelled?? : 0n-1163005939
?? +0x0fc CancelState????? : 0xbaadf00d (No matching name)
?? +0x100 BufferQueue????? : QUEUE
?? +0x12c InReply????????? : 0n0
?? +0x130 fChoked????????? : 0n-1163005939

?? +0x0c0 CallSendContext? : 0x00ce1cd0 Void
? ?
1: kd> dd 00ce1b98+138
00ce1cd0? baadf00d baadf00d baadf00d baadf00d
00ce1ce0? baadf00d baadf00d baadf00d baadf00d


??? *((PVOID *) ((char *) CallSendContext - sizeof(PVOID))) = (PVOID) this;

1: kd> dd 00ce1b98+134
00ce1ccc? 00ce1b98


第六部分:

1: kd> dt osf_CConnection 00ce1958
RPCRT4!OSF_CCONNECTION
?? +0x000 __VFN_table : 0x77bd3994
?? +0x004 MagicLong??????? : 0x89abcdef
?? +0x008 ObjectType?????? : 0n128
?? +0x00c RefCount???????? : INTERLOCKED_INTEGER
?? +0x010 Association????? : 0x00ce1840 OSF_CASSOCIATION
?? +0x014 CurrentCall????? : 0xbaadf00d OSF_CCALL
?? +0x018 ConnectionKey??? : 0n-1
?? +0x01c State??????????? : 0 ( ConnUninitialized )
?? +0x020 WireAuthId?????? : 0 ''
?? +0x022 MaxFrag????????? : 0x200
?? +0x024 ThreadId???????? : 0xffffffff
?? +0x028 CachedCCallAvailable : 0n-1163005939
?? +0x02c MaxSavedHeaderSize : 0
?? +0x030 CachedCCall????? : 0x00ce1b98 OSF_CCALL


第七部分:

??? CachedCCallAvailable = 0;
??? CurrentCall = CachedCCall;
??? ConnectionReady = 0;

}


1: kd> dt osf_CConnection 00ce1958
RPCRT4!OSF_CCONNECTION
?? +0x000 __VFN_table : 0x77bd3994
?? +0x004 MagicLong??????? : 0x89abcdef
?? +0x008 ObjectType?????? : 0n128
?? +0x00c RefCount???????? : INTERLOCKED_INTEGER
?? +0x010 Association????? : 0x00ce1840 OSF_CASSOCIATION
?? +0x014 CurrentCall????? : 0x00ce1b98 OSF_CCALL

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77328.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77328.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77328.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

量化視角:比特幣美債黃金三角博弈的DeepSeek推演

【AI分析】近期全球金融市場呈現罕見的三重分化態勢:比特幣單日振幅超35%、美債收益率創年內最大單日波動、黃金價格突破3271美元/盎司,刷新有記錄以來的最高價。這種極端行情背后,折射出AI模型捕捉到的市場結構性矛盾與資金流動新邏輯。 一…

markdown導出PDF,PDF生成目錄

1、vscode中安裝markdown插件,將編輯的文件導出PDF。 2、安裝PDF Guru Anki軟件 百度網盤:通過網盤分享的文件:PDFGuruAnki 鏈接: https://pan.baidu.com/s/1nU6avM7NUowhEn1FNZQKkA 提取碼: aues PDF中不同的標題需要通過矩形框標注差異&a…

FastAPI與SQLAlchemy數據庫集成

title: FastAPI與SQLAlchemy數據庫集成 date: 2025/04/17 15:33:34 updated: 2025/04/17 15:33:34 author: cmdragon excerpt: FastAPI與SQLAlchemy的集成通過創建虛擬環境、安裝依賴、配置數據庫連接、定義數據模型和實現路由來完成。核心模塊包括數據庫引擎、會話工廠和聲…

OSCP - Proving Grounds - DriftingBlues6

主要知識點 路徑爆破dirtycow內核漏洞提權 具體步驟 總體來講,這臺靶機還是比較直接的,沒有那么多的陷阱,非常適合用來學習 依舊是nmap開始,只開放了80端口 Nmap scan report for 192.168.192.219 Host is up (0.42s latency). Not shown: 65534 cl…

電視盒子 刷armbian

參考 中興電視盒子中興B860AV3.2-M刷Armbian新手級教程-CSDN博客 1.刷安卓9 帶root版本 a. 下載安卓線刷包 鏈接:https://pan.baidu.com/s/1hz87_ld2lJea0gYjeoHQ8A?pwdd7as 提取碼:d7as b.拆機短接 3.安裝usbburning工具 使用方法 ,…

Redisson分布式鎖全攻略:用法、場景與要點

目錄 1. 普通可重入鎖(RLock) 2. 公平鎖(RFairLock) 3. 讀寫鎖(RReadWriteLock) 4. 多重鎖(RedissonMultiLock) 1. 普通可重入鎖(RLock) import org.redisson.Redisson; import org.redisson.api.RLoc…

Node.js 中 Token 原理簡單介紹 + 示例代碼

目錄 ? 什么是 Token? 🔁 原理簡述: 🧩 示例項目:使用 Node.js jsonwebtoken 實現 Token 登錄驗證 📁 文件結構如下: 🔹 server.js(JavaScript) &…

每日OJ_牛客_ruby和薯條_排序+二分/滑動窗口_C++_Java

目錄 ruby和薯條_排序二分/滑動窗口 題目解析 C代碼 Java代碼 ruby和薯條_排序二分/滑動窗口 ruby和薯條 描述: ruby很喜歡吃薯條。 有一天,她拿出了n根薯條。第i根薯條的長度為ai。 ruby認為,若兩根薯條的長度之差在l和r之間&#xf…

從 ComponentActivity 看 Android Activity 的演變與 Jetpack 架構融合

在 Jetpack Compose 出現后,開發者可能會注意到一個變化:項目的主 Activity 默認從過去熟悉的 AppCompatActivity 變成了 ComponentActivity。這個變化并非偶然,而是 Android 架構在向現代組件化演進過程中一個關鍵的轉折點。本文將圍繞 Comp…

Linux 防火墻( iptables )

目錄 一、 Linux 防火墻基礎 1. 防火墻基礎概念 (1)防火墻的概述與作用 (2)防火墻的結構與匹配流程 (3)防火墻的類別與各個防火墻的區別 2. iptables 的表、鏈結構 (1)規則表 …

大數據 - 2. Hadoop - HDFS(分布式文件系統)

前言 為什么海量數據需要分布式存儲技術? 文件過大時,單臺服務器無法承擔,要靠數量來解決。數量的提升帶來的是網絡傳輸、磁盤讀寫、CPU、內存等各方面的提升。 眾多的服務器一起工作,如何保證高效且不出錯 ? 大數…

使用cursor進行原型圖設計

1.下載cursor 2.模式設置: 模型使用claude-3.7-sonnet的think模式 3.引導詞模板: 我想要開發一個中高考英語口語考試的模擬考試系統,我需要將上面的這個應用輸出成高保真的原型圖設計。請考慮以下的規范: 用戶體驗&#xff1…

極狐GitLab 功能標志詳解

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 功能標志 (BASIC ALL) 使用功能標志,您可以將應用程序的新功能小批量部署到生產環境中。您可以為部分用戶打開和…

AI與無人駕駛汽車:如何通過機器學習提升自動駕駛系統的安全性?

引言 想象一下,在高速公路上,一輛無人駕駛汽車正平穩行駛。突然,前方的車輛緊急剎車,而旁邊車道有一輛摩托車正快速接近。在這千鈞一發的瞬間,自動駕駛系統迅速分析路況,判斷最安全的避險方案,精…

【NLP 63、大模型應用 —— Agent】

人與人最大的差距就是勇氣和執行力,也是唯一的差距 —— 25.4.16 一、Agent 相關工作 二、Agent 特點 核心特征: 1.專有場景(針對某個垂直領域) 2.保留記憶(以一個特定順序做一些特定任務,記憶當前任務的前…

RAGFlow本地部署教程 :多模態檢索+動態生成,用AI重構企業知識生產力

RAGFlow是一款基于檢索增強生成(RAG)技術的智能工作流平臺,通過整合多源數據檢索與生成式AI模型,優化企業知識管理、智能問答及自動化報告生成,核心功能包括: 多源數據融合:支持數據庫、文檔庫、…

【C/C++】深入理解指針(二)

文章目錄 深入理解指針(二)1.const修飾指針1.1 const修飾變量1.2 const修飾指針變量 2.野指針2.1 野指針成因1.指針未初始化2. 指針越界訪問3.指針指向的空間釋放 2.2 如何規避野指針2.2.1 指針初始化2.2.2 小心指針越界2.2.3 指針變量不再使?時,及時置NULL&#x…

【verilog】在同一個 always 塊中寫了多個“看起來獨立”的 if / if-else,到底誰先誰后,怎么執行?會不會沖突?

🔍 問題本質 在一個 always (posedge clk) 塊中,所有的代碼都是順序執行的。但這不意味著它就像軟件一樣“一條一條執行”,因為最終是電路!電路是并行存在的! Verilog 是硬件描述語言(HDL)&am…

【React】什么是 Hook

useStateuseEffectuseRef 什么是hook?16.8版本出現的新特性。可以在不編寫class組件的情況下使用state以及其它的React特性 為什么有hook?class組件很難提取公共的重用的代碼,然后反復使用;不編寫類組件也可以使用類組件的狀態st…

如何查看自己抖音的IP屬地?詳細教程及如何修改

在當今互聯網時代,IP屬地信息已成為各大社交平臺(如抖音、微博、快手等)展示用戶真實網絡位置的重要功能。以下是關于如何查看抖音IP屬地的詳細教程及常見問題解答,幫助您快速了解相關信息: 一、如何查看抖音賬號的IP屬…