主頁 > 軟體工程 > 還是要請蔣晟老師和趙4老師等高手幫我指點迷津,替換OCX的問題

還是要請蔣晟老師和趙4老師等高手幫我指點迷津,替換OCX的問題

2020-09-17 04:39:44 軟體工程

原帖:https://bbs.csdn.net/topics/392434614
自己寫個名字叫做XCDZIP35.OCX的組件,把XCDZIP35.OCX的注冊資訊替換掉,我想問一下
1.舊XCDZIP35.OCX是不是得改名(能改名嗎)
2.舊XCDZIP35.OCX的UUID是不是得改
3.新的XCDZIP35.OCX的UUID是不是應該跟未改動前的舊的XCDZIP35.OCX一樣

uj5u.com熱心網友回復:

我看了你的原貼, 首先得確認一下呼叫ocx的程式是不是你寫的?
如果是你寫的, 那么你只為了記錄呼叫ocx時的引數, 那這些引數肯定通過你程式的某個方法的, 你完全可以直接記錄
但如果程式不是你寫的, 你無法直接記錄的話, 那你再做一個ocx做中轉的作用就沒什么用了, 我建議你還是去研究趙4的方法吧
舊ocx不是你寫的, 你不能重新編譯, 那就代表你無法改變它的 uuid
ocx的呼叫是根據類名去注冊表查詢ocx的資訊, 如果你把舊ocx的資訊替換成你新的ocx, 那么程式能呼叫你的ocx
但問題是你的新ocx是根據舊ocx的資訊去加載舊ocx的, 而舊ocx的注冊資訊已經替換成新ocx的資訊了, 那你猜猜會發生什么事情

uj5u.com熱心網友回復:

舊ocx不需要改名,但是注冊表里的資訊需要移動到一個新的CLSID下,這樣你的新ocx才可以創建這個舊的ocx,因為舊ocx的原CLSID被你的新OCX劫持。
檔案名改不改無所謂,改的話,注冊表資訊里的檔案名也一起改。
新的ocx的CLSID必須和舊ocx的原CLSID一樣因為這個ID被宿主程式用來創建ocx。

當然你也可以這樣
舊OCX的CLSID不改
新OCX的CLSID用自建的
把宿主程式里面的舊OCX的CLSID改成新OCX的CLSID
但是這需要破解宿主程式找到CLSID的存盤格式,以及找到每一個CLSID的位置……
還是直接劫持那個CLSID一勞永逸。

uj5u.com熱心網友回復:

uj5u.com熱心網友回復:

參考 1 樓 Sandrer 的回復:
我看了你的原貼, 首先得確認一下呼叫ocx的程式是不是你寫的?
如果是你寫的, 那么你只為了記錄呼叫ocx時的引數, 那這些引數肯定通過你程式的某個方法的, 你完全可以直接記錄
但如果程式不是你寫的, 你無法直接記錄的話, 那你再做一個ocx做中轉的作用就沒什么用了, 我建議你還是去研究趙4的方法吧
舊ocx不是你寫的, 你不能重新編譯, 那就代表你無法改變它的 uuid
ocx的呼叫是根據類名去注冊表查詢ocx的資訊, 如果你把舊ocx的資訊替換成你新的ocx, 那么程式能呼叫你的ocx
但問題是你的新ocx是根據舊ocx的資訊去加載舊ocx的, 而舊ocx的注冊資訊已經替換成新ocx的資訊了, 那你猜猜會發生什么事情


參考 1 樓 Sandrer 的回復:
我看了你的原貼, 首先得確認一下呼叫ocx的程式是不是你寫的?
如果是你寫的, 那么你只為了記錄呼叫ocx時的引數, 那這些引數肯定通過你程式的某個方法的, 你完全可以直接記錄
但如果程式不是你寫的, 你無法直接記錄的話, 那你再做一個ocx做中轉的作用就沒什么用了, 我建議你還是去研究趙4的方法吧
舊ocx不是你寫的, 你不能重新編譯, 那就代表你無法改變它的 uuid
ocx的呼叫是根據類名去注冊表查詢ocx的資訊, 如果你把舊ocx的資訊替換成你新的ocx, 那么程式能呼叫你的ocx
但問題是你的新ocx是根據舊ocx的資訊去加載舊ocx的, 而舊ocx的注冊資訊已經替換成新ocx的資訊了, 那你猜猜會發生什么事情


你好!
確實都不是我寫的,是感覺有點復雜,我也查了一下,舊OCX無法改變其UUID,所以新OCX呼叫舊OCX可能導致新OCX起不到中間作用

uj5u.com熱心網友回復:

建議一個偷偷替換的方法,看是否可行。步驟如下:
1.把舊的XXXX.ocx修改檔案名,然后注冊了,不告訴別人你是用這個控制元件,別人就不知道了
2.自己撰寫一個新的ocx控制元件,然后在這個控制元件內部的視窗OnCreate訊息中自己建立這個控制元件物件,顯示在新的控制元件的視窗區中
3.給新的ocx控制元件建立一些方法和訊息,實際就是轉發舊的ocx控制元件的方法和訊息,當然你可以稍微修改一下函式引數等

uj5u.com熱心網友回復:

要想人不知,除非己莫為。

uj5u.com熱心網友回復:

參考 5 樓 wwwfffhhh 的回復:
建議一個偷偷替換的方法,看是否可行。步驟如下:
1.把舊的XXXX.ocx修改檔案名,然后注冊了,不告訴別人你是用這個控制元件,別人就不知道了
2.自己撰寫一個新的ocx控制元件,然后在這個控制元件內部的視窗OnCreate訊息中自己建立這個控制元件物件,顯示在新的控制元件的視窗區中
3.給新的ocx控制元件建立一些方法和訊息,實際就是轉發舊的ocx控制元件的方法和訊息,當然你可以稍微修改一下函式引數等

今天想試試修改OCX里的PutPassword的代碼,想跟進去OCX里看看這個方法的代碼是哪段,跟來跟去,跟不到,用了VS2010的tstcon,OCX加載的時候地址是在10100000上吧,結果除錯的時候一直在tstcon里轉,到不了,本來想在反匯編里截指令代碼在OCX檔案里面或用OD加載找,找不到!!頭大,不知代碼在哪,不知如何下斷點

uj5u.com熱心網友回復:

WinAPIOverride32
WinAPIOverride64

uj5u.com熱心網友回復:

趙老師有沒有WinAPIOverride64的使用說明

uj5u.com熱心網友回復:

一直沒有發現鉤了OCX,只看到MFC40,MFC100,是在哪設定,趙老師

uj5u.com熱心網友回復:

上面只看到呼叫都的地址,但OCX里的我猜測沒有,因為是加載到10001000上的吧

uj5u.com熱心網友回復:

C:\WinApiOverride\WinAPIOverride.chm

uj5u.com熱心網友回復:

我看了說明的,還是有點不明白,加載后HOOKE顯示成功,但就是不能顯示呼叫OCX的入口

uj5u.com熱心網友回復:

關閉UAC、防火墻、殺毒軟體、……
以管理員身份運行
……

uj5u.com熱心網友回復:

謝謝,我設定一下,還要請問一下,除錯的時候,我查了記憶體,我的OCX確實是加載在10001000地址上的,我用IDA加載TSTCON32,除錯OCX,始終到了不這個地方(代碼部分),是不是我思路有問題呢,除錯不到OCX里面

uj5u.com熱心網友回復:

無法獲取,老樣子,從資訊視窗無法觀察到

uj5u.com熱心網友回復:

沒有金剛鉆,別攬瓷器活。

uj5u.com熱心網友回復:

不知道趙4老師有沒有這個介紹

If an interface A is derived only from IUnknown we have 

pInterfaceA QueryInterface 
AddRef 
Release 
InterfaceA_Method_1 
InterfaceA_Method_2 
... 
InterfaceA_Method_N 
 

In this case we have pInterfaceA==pIUnknown 

 
If an interface B is derived from IDispatch we have 

pInterfaceB QueryInterface 
AddRef 
Release 
GetTypeInfoCount  
GetTypeInfo 
GetIDsOfNames 
Invoke 
InterfaceB_Method_1 
InterfaceB_Method_2 
... 
InterfaceB_Method_N 
 

In this case we have pInterfaceB==pIUnknown==pIDispatch 

WinAPIOverride對OCX的檔案結構分析,但各部分的大小怎么算

uj5u.com熱心網友回復:

按我的想法,我不會使用這種檔案+注冊表替換方式,而是運行時替換。
簡單概括:搶先注冊類廠。
作業原理是自己有代碼在主行程中執行,自己寫的代碼好說,別人的二進制應用就下鉤子,然后預先加載自己的組件,保證在請求原組件之前加載即可。在我的組件被加載時,由組件自己注冊同CLSID的類廠,剩下的事情就不用考慮了,系統創建組件會直接使用你注冊的類廠,而不是讀注冊表尋找原組件。

這種方式的應用非常簡單成熟,早期我把V8腳本引擎封裝成符合ms的腳本規范,然后使用IE控制元件,啟動的腳本引擎是我的封裝庫,而不是jscript.dll,就是想跟IE自帶的腳本引擎做一個性能對比。

uj5u.com熱心網友回復:

嗯,都是不錯的想法,我正看COM原理與應用及技術內幕,看完再請教

uj5u.com熱心網友回復:

趙四老師

uj5u.com熱心網友回復:

參考 21 樓 arpnet99 的回復:
趙四老師

提醒:再牛×的老師也無法代替學生自己領悟和上廁所!

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/62505.html

標籤:ATL/ActiveX/COM

上一篇:VS2010 C++視窗應用程式視窗之間傳遞引數的實體

下一篇:關于MFC多執行緒控制多個軟體執行順序怎么實作

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more