首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

逆向分析 QQ/RTX 螢幕截圖 DLL 介面與呼叫技巧

     編輯:關於VC++

前言

發現 RTX (騰訊企業通) 內建的 camerawnd.dll 提供類似 QQ 截圖功能,經簡單逆向分析,記錄其匯出函數與呼叫方式,供參考。

DLL 匯出函數

使用 Depends.exe 查看,發現三個匯出函數:

  • CameraSubArea — 區域截圖
  • CameraWndArea — 視窗截圖
  • CameraScreen — 全螢幕截圖

動態載入測試

typedef void (*FUN)();
HMODULE hInst = LoadLibrary(_T("CameraWnd.dll"));
if (hInst != NULL) {
    FUN pFunc = (FUN)GetProcAddress(hInst, "CameraSubArea");
    if (pFunc != NULL) pFunc();
}

CameraSubArea 與 CameraWndArea 均可正常觸發對應截圖模式;CameraScreen 直接呼叫會異常,推測需參數。

反組譯分析參數

以 VC 偵錯模式追蹤呼叫指令:

; CameraSubArea
push 40800000h
push 1
push 1
call 100010E0

; CameraWndArea
push 40800000h
push 0
push 2
call 100010E0

; CameraScreen 入口
push ebp
mov ebp, esp
push 0FFh
push 10007973h

推測前兩者均呼叫 CameraScreen(mode, showMagnifier, param3):

void CameraSubArea()   { CameraScreen(1, 1, 0x40800000); }
void CameraWndArea()   { CameraScreen(2, 0, 0x40800000); }
  • 第 1 參數:模式 (1=區域, 2=視窗, 其他=全螢幕)
  • 第 2 參數:是否顯示放大鏡 (BOOL)
  • 第 3 參數:影響放大鏡顯示內容,推測為放大鏡參數結構指標

注意事項

  • CameraScreen 應有回傳值 (判斷使用者是否取消/完成截圖),無回傳值則需自行檢查剪貼簿
  • 若截圖失效,可能因其他程式佔用剪貼簿未釋放,此時系統 PrintScreen 也會失效

結語

附帶原始碼可直接編譯測試,有興趣可自行嘗試修改參數探索更多功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved