Radmin的抓屏和显屏API代码部分分析

Goldberg Steam模拟器编译与应用指南:绕过DRM实现本地与局域网游戏 DRM(数字版权管理)是软件和游戏领域常见的版权保护技术,通过在可执行文件中嵌入验证逻辑,限制未经授权的访问和分发。其核心原理是建立客户端与授权服务器之间的加密握手验证,确保只有合法用户能运行程序。从技术价值看,DRM在保护开发者权益的同时,也给用户带来了平台依赖、网络验证和隐私顾虑等实际问题。因此,在单机游戏存档、局域网联机等特定应用场景下,出现了通过模拟合法客户端环境来绕过DRM检查的技术方案。Goldberg Steam Emulator正是这类方案的代表,它通过模拟Steam客户端的API和网络环境 阅读详情

分析了Radmin的抓屏和显屏API代码,抓屏它采用的是逐行扫描,显屏它采用的是全屏显示。就是不知道他使用的什么压缩,他发送时好像没有用内存XOR运算发送不同的数据,但不知道他使用什么压缩方法发送的。

r_server
  SRCCOPY     = $00CC0020;     { dest = source       


function CreateDCA(lpszDriver, lpszDevice, lpszOutput: PAnsiChar;
  lpdvmInit: PDeviceModeA): HDC; stdcall;

lpszDriver 'DISPLAY'
lpszDevice nil
lpszOutput nil
lpdvmInit nil

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateDCA 的返回值
Index RASTERCAPS    = 38;    { Bitblt capabilities    

function CreateCompatibleDC(DC: HDC): HDC; stdcall;

DC CreateDCA 的返回值

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateDCA 的返回值
Index HORZRES       = 8;     { Horizontal width in pixels       

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateDCA 的返回值
Index VERTRES       = 10;    { Vertical height in pixels      

function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; stdcall;

DC CreateDCA 的返回值
Width GetDeviceCaps HORZRES的返回值
Height 0x00000001

function GetObjectA(p1: HGDIOBJ; p2: Integer; p3: Pointer): Integer; stdcall;

p1 CreateCompatibleBitmap 的返回值
p2 ?24
p3 ?

function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateCompatibleDC 的返回值
Index RASTERCAPS    = 38;    { Bitblt capabilities    


function GetDeviceCaps(DC: HDC; Index: Integer): Integer; stdcall;

DC CreateCompatibleDC 的返回值
Index BITSPIXEL     = 12;    { Number of bits per pixel    

function CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint;
  Bits: Pointer): HBITMAP; stdcall;

Width  5
Height  1
Planes  1
BitCount 10
Bits  0

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 CreateBitmap 的返回值

function SetPixel(DC: HDC; X, Y: Integer; Color: COLORREF): COLORREF; stdcall;

DC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Color 0x000000FF

function GetBitmapBits(Bitmap: HBITMAP; Count: Longint;
  Bits: Pointer): Longint; stdcall;

Bitmap CreateBitmap 的返回值
Count 0x00000002
Bits

function SetPixel(DC: HDC; X, Y: Integer; Color: COLORREF): COLORREF; stdcall;

DC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Color 0x0000FF00

function GetBitmapBits(Bitmap: HBITMAP; Count: Longint;
  Bits: Pointer): Longint; stdcall;

Bitmap CreateBitmap 的返回值
Count 0x00000002
Bits 

function SetPixel(DC: HDC; X, Y: Integer; Color: COLORREF): COLORREF; stdcall;

DC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Color 0x00FF0000

function GetBitmapBits(Bitmap: HBITMAP; Count: Longint;
  Bits: Pointer): Longint; stdcall;

Bitmap CreateBitmap 的返回值
Count 0x00000002
Bits 

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 SelectObject 的返回值

function DeleteObject(p1: HGDIOBJ): BOOL; stdcall;

p1 CreateBitmap 的返回值

function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; stdcall;

DC CreateDCA 的返回值
Width 0x00000400
Height 0x00000015

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 CreateCompatibleBitmap 的返回值


function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc: Integer; Rop: DWORD): BOOL; stdcall;

DestDC CreateCompatibleDC 的返回值
X 0x00000000
Y 0x00000000
Width 0x00000400
Height 0x00000001 变
SrcDC CreateDCA 的返回值
XSrc 0x00000000 变
YSrc 0x0000000F 变
Rop SRCCOPY 

function GetDIBits(DC: HDC; Bitmap: HBitmap; StartScan, NumScans: UINT;
  Bits: Pointer; var BitInfo: TBitmapInfo; Usage: UINT): Integer; stdcall;

DC  CreateCompatibleDC 的返回值
Bitmap  CreateCompatibleBitmap 的返回值
StartScan 0x00000000
NumScans 0x00000001
Bits   
BitInfo  
Usage  0x00000000

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC CreateCompatibleDC 的返回值
p2 CreateCompatibleBitmap 的返回值

function DeleteDC(DC: HDC): BOOL; stdcall;

DC CreateDCA 的返回值

function DeleteDC(DC: HDC): BOOL; stdcall;

DC CreateCompatibleDC 的返回值

function DeleteObject(p1: HGDIOBJ): BOOL; stdcall;

p1 SelectObject 的返回值

radmin

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC
p2

function ExtCreateRegion(XForm: PXForm; Count: DWORD; const RgnData: TRgnData): HRGN; stdcall;

XForm  nil 单元转换
Count  数据大小
RgnData  数据

function SelectClipRgn(DC: HDC; Region: HRGN): Integer; stdcall; -> ->

DC  SelectObject 的DC
Region  ExtCreateRegion 的返回值
返回值  COMPLEXREGION = 3

function SetDIBitsToDevice(DC: HDC; DestX, DestY: Integer; Width, Height: DWORD;
  SrcX, SrcY: Integer; nStartScan, NumScans: UINT; Bits: Pointer;
  var BitsInfo: TBitmapInfo; Usage: UINT): Integer; stdcall;

DC  SelectObject 的DC
DestX  0 服务端屏幕X
DestY  0 服务端屏幕Y
Width  $320 服务端屏幕Width
Height  $258 服务端屏幕Height
SrcX  0
SrcY  0
nStartScan 0
NumScans $258
Bits  数据?
BitsInfo
Usage   不知道DIB_RGB_COLORS

function SelectClipRgn(DC: HDC; Region: HRGN): Integer; stdcall; -> 

DC  SelectObject 的DC
Region  0
返回值  SIMPLEREGION = 2

function DeleteObject(p1: HGDIOBJ): BOOL; stdcall;

p1  ExtCreateRegion 的返回值

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC  原 SelectObject 的DC 
p2  上一个 SelectObject 的返回值

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC  原 SelectObject 的DC
p2  上一个 SelectObject 的返回值

普通模式

function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc: Integer; Rop: DWORD): BOOL; stdcall;

DestDC  
X  0 服务端屏幕X
Y  0 服务端屏幕Y
Width  $320 服务端屏幕Width
Height  $258 服务端屏幕Height
SrcDC  上一个 SelectObject 的返回值 = 上一个 SelectObject 的DC= 原 SelectObject 的DC
XSrc  0
YSrc  0
Rop  SRCCOPY


伸拉模式

function SetStretchBltMode(DC: HDC; StretchMode: Integer): Integer; stdcall;

DC
StretchMode

function StretchBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD): BOOL; stdcall;

DestDC
X
Y
Width
Height
SrcDC
XSrc
YSrc
SrcWidth
SrcHeight
Rop

function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; stdcall;

DC  上一个 SelectObject 的返回值 = 上一个 SelectObject 的DC= 原 SelectObject 的DC
p2  上一个 SelectObject 的返回值

上面是Radmin和R_server所用抓屏和显屏的API函数

某网友的分析,我还不知如何分析 

C++远程控制工具开发:从TCP通信到屏幕捕获的完整实现 远程控制技术是网络编程与系统编程的经典结合,其核心在于通过网络协议实现跨设备指令与数据的可靠传输。从原理层面看,它主要依赖TCP/IP协议栈建立稳定连接,并运用Socket编程进行数据交换。在技术实现上,远程控制的价值在于打通了从网络层到应用层的完整链路,为IT运维、远程协助等场景提供了基础能力。具体到工程实践,开发者需要掌握屏幕捕获、图像压缩、输入模拟等关键技术。例如,在Windows平台可通过BitBlt或DirectX API捕获桌面图像,再使用JPEG或H.264进行压缩以优化传输效率;同时需设计二 阅读详情

相关推荐

Radmin Server:远程管理软件的实现与编程技术

Radmin Server是一种强大的远程管理软件,它允许用户通过局域网或互联网远程管理和控制其他计算机。它提供了诸如远程控制、文件传输、远程任务管理等功能,使管理员能够方便地访问和管理远程计算机。Radmin Server的工作原理是基于客户端/服务器架构。管理员在需要管理的计算机上安装Radmin Server软件,然后通过Radmin Viewer(客户端软件)连接到目标计算机。Radmin Viewer可以在任何具有网络连接的计算机上运行,无需安装额外的软件。

PixelNinja的博客 3177

小谈RADMIN

转载请保留版权信息!谢谢合作!by NetPatchwelcome www.nspcn.org and www.icehack.com最近做渗透测试时常碰到RADMIN一类的东西..一碰到此类的程序,一般我都会先看下对方把RADMIN的端口配置成什么..以及相应的PASS(加密过的)HKEY_LOCAL_MACHINE/SYSTEM/RAdmin/v2.0/Server/Parameters/Pa

MarsLinG的专栏 823

开源轻量堡垒机——Teleport的安装配置和使用

在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,采用一些技术手段进行监控和记录人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为;以便及时处理和审计定责。堡垒机的核心是:可控及审计;(可控即权限可控、行为可控)比如公司的某个工程师要离职或要转岗了,此时如果没有一个统一的权限管理入口,那么对于公司业务来说将是一场梦魇(可能公司的重要业务资料被删除而不知等)。比如我们需要集中禁用某个危险命令,如果没有一个统一入口,操作的难度可想而知。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2696

radmin提示授权码过期_什么是 OAuth 2.0 授权码模式?

原文章 作者:Aaron Parecki译者:MoCha => 摩卡先生前言授权码模式大概是我们所最常见的OAuth 2.0 授权模式。当用户授权给app时,授权码模式就会在网页应用和原生apps中使用到。本文章是本系列文章中的第一部分,我们将探讨常用的OAuth 2.0 授权模式。如果你想在我们深入之前了解更多有关OAuth 2.0的知识,请查看What the Heck is OAuth...

weixin_39631261的博客 3275

Radmin3.2影子版:远程控制软件的高级体验

本文还有配套的精品资源,点击获取 简介:Radmin 3.2影子版是一款流行的远程控制软件,它支持多种操作系统,并提供了远程桌面控制、文件传输、屏幕监控等功能。软件可能包含额外的特性如增强安全设置和隐身模式。它强调效率、稳定性和安全性,支持高速数据传输和多用户同时访问。尽管提供了先进的功能,但使用非官方版本可能会有法律风险和安全问题。 1. Radmin 3.2影...

weixin_35754962的博客 2124

局域网监控不限站点radmin自动连接器

网络唤醒支持内网和外网 内网唤醒服务器条件: ①服务器MAC地址 外网唤醒内网服务器条件: ①服务器MAC地址 ②服务器外网IP地址。需要把目标服务器的内网IP映射到外网,端口随意,协议必须是UDP ③路由器里面必须做目标服务器的IP-MAC绑定,否则收不到外网发到内网的唤醒指令

API Monitor v2.0 Alpha-r13 (32+64) 汉化版

API Monitor v2.0 Alpha-r13 (32+64) 汉化版: 链接: https://pan.baidu.com/s/1jIx5znC 密码: 4538 本软件已最大化汉化,已经趋于完美,其余某些地方汉化了会导致软件异常,比如不能加载API定义等等。 使用教程(官方):http://www.rohitab.com/category/api-monitor...

anyuyu8490的博客 643

屏幕墙控远程电脑Radmin,在线扫描,批量连接在线电脑,批量关闭,批量添加主机,最小化,最大化,自动排列屏幕窗口,可以设置列数

在线扫描,批量连接在线电脑,批量关闭,批量添加主机,最小化,最大化,自动排列屏幕窗口,可以设置列数,行数,适合游戏工作室,

AI落地选型:别把法拉利当SaaS买,先算清交付模型这笔账

云计算时代,IaaS、PaaS、SaaS、DaaS等交付模型定义了IT资源的责任边界,而在AI浪潮中,MaaS(模型即服务)的出现让交付模型更加复杂。按量付费的API与需要长期运维的自建GPU集群,分别对应着不同的成本结构、控制力和风险。理解这些概念背后的原理,是技术决策者评估AI价值的基础。面对高涨的AI泡沫叙事,真正重要的不是追逐最新模型,而是结合业务流量、数据合规、延迟要求,理性计算总拥有成本(TCO)。从低成本的API验证到必要时的私有化部署,正确的选型路径能有效避免‘把法拉利当SaaS买’这一类成

weixin_34060299的博客 674

radmin免输入密码登陆客户机源代码

radmin免输入密码登陆客户机源代码.这个是需要你知道客户机的用户名和密码的.但是是通过内存注入的方式自动输入.区别于其他人的sendmessage输入密码的方法.更稳定,更高效.

Radmin密码验证源代码

Radmin客户端连接时的密码验证源代码,包括加密算法和通信协议。之前用它写过一个Radmin密码扫描器,但有朋友提出要命令行的,我没什么时间写,所以直接把这个代码给出来,有兴趣的可以研究。但请不要用于非法目的。

Laradmin后台管理系统安装与配置指南

Laradmin后台管理系统安装与配置指南 1. 项目目录结构及介绍 Laradmin是一个基于Laravel 5.4的后台管理系统,它利用了一系列流行的PHP扩展和技术来增强其功能。下面是其主要的目录结构和各个部分的简介: app: 核心应用逻辑区域,包括控制器(Controller),模型(Model),视图(Views)和各种其他组件。 Controllers: 包含所有后端控制器,处...

gitblog_00223的博客 1082

Radmin自动连接器1.1

Radmin自动连接器1.1-非常方便,一键连接客户端,网管适用......

域渗透总结

环境搭建 > AD域环境的搭建 基于Server 2008 R2: http://www.it165.net/os/html/201306/5493.html > Acitve Directory 域环境的搭建: http://blog.sina.com.cn/s/blog_6ce0f2c901014okt.html

Zdelta 1313

Radmin 远程控制客户端自动连接外置配置小汤版

继“毒药大师 (他的博客:http://www.poison.net.cn)” 开发的“Radmin自动连接器”进行功能完善: 1、圆点密码框动态加密,进一步安全防范; 2、随即隐藏密码输入窗口,进一步安全防范; 3、增加托盘菜单,最小化至托盘,使用更方便; 4、增设快捷键:Ctrl+- 隐藏窗口,Ctrl+= 显示窗口; 5、增加导入配置、导出配置、清空配置功能; 6、增加启动密码验证,防无聊人使用; 7、内置配置文件,并支持回写(退出程序即保存配置); 8、字符串加密、解密UDF——完美支持中文密码。 ================================================================ 修改:小汤 QQ: 348137508 版权归原作者所有! 本人只是感觉很好,给大家推荐一下! 这工具挺适合网络管理人员用,比如网吧、企业、计算机管理人员!

易语言radmin登录器源码

源码里的资源做了备注,如果把资源集成到源码中比较大,大家可以根据备注自行添加资源进去,登录器因为添加了生成配置信息功能,所以用到了精易模块,源码中大家可以了解一些基本的关于外部程序HOOK的东西。@ftpc。

Windows Server 2008 R2渗透测试实战:从漏洞利用到持久化控制

在网络安全领域,漏洞利用与权限提升是攻防对抗的核心技术环节。其基本原理是通过识别和利用操作系统或应用软件中存在的安全缺陷,绕过既定的访问控制机制,从而获取更高的系统权限。这项技术的价值在于,它不仅能帮助安全人员验证系统的防御能力,更是理解攻击链、构建有效安全基线的基础。在实际应用场景中,针对老旧系统(如已停止支持的Windows Server版本)的渗透测试尤为典型,因为这些环境往往存在未修补的已知漏洞和薄弱的内网权限管理。本文聚焦于Windows Server 2008 R2环境,深入剖析了利用MS16-

weixin_30632883的博客 372

学习C++的递归函数(包含汉诺塔讲解)

简单来讲,递归函数就是函数本身自己调用自己,那么函数又是什么呢?#include <stdio.h> //这行是头文件,不同的头文件可以用不同的函数int main() //这里就是一个main函数//这里是你要编写程序的内容return 0;(这是个小细节如下)所以我们平时用来练习的就是一个main函数,而且是一个整型类型的函数,而这也是最后一句话为什么要加一句 return 0;了,因为它最后要返回整数类型,其它整数也可以,但是大家规定为0,这是C++自带的函数。

2302_81032013的博客 2594

教你如何查找入侵者

一天正在发呆,QQ上的一个朋友向我求救:“我的网站被黑了,首页给换了,SOS!”。最近正好无事,索性就帮帮他吧。 收复失地 刚刚准备在浏览器上输入他网站的地址,结果却停了下来:如果入侵者在首页挂了马,我岂不是也要遭殃?所以我先用查看挂马的工具检查了一下。没有不可见窗体、没有JS调用、没有Object,OK。进了首页看到上面只有入侵者的名字和一些图片,网站里边的具体情况待会再看吧。向朋友要了管理...

touchinsert 152

DSP28335量产升级避坑指南:C2Prog串口烧录.hex文件,为什么我推荐COM1?

本文详细解析了DSP28335量产升级中C2Prog串口烧录.hex文件的最佳实践,重点推荐使用COM1端口以确保稳定性。通过实测数据和底层机制分析,揭示了Windows系统对COM1的特殊优化及C2Prog工具的时钟切换逻辑,帮助开发者规避常见陷阱,提升烧录成功率。

weixin_27066963的博客 384

VBA中如何使用Edge内核Browser?

在微软宣布停止对IE的支持后,许多使用VBA中Web Browser的用户遇到了困境,因为Web Browser使用的IE内核。然而微软并没有给出支持Edge的新版Web Browser,网上许多第三方的库也不够完善。经过调研,libEdge可以较好的和VBA集成,实现在Excel中打开Browser,甚至能够通过执行js代码,获取web页面的信息。项目需要WebView2Loader.dll和LibEdge.dll两个库,区分x86和x64版本。

金木AI 2400
上一篇: 能够生成木马的ShellCode
下一篇: 简单说说SSDT
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值