Windows服务原理&调试方法_win service 工作 原理-程序员宅基地

技术标签: 恶意软件分析  

Windows服务原理&调试方法

教程参考自《逆向工程核心原理》


1.概述

服务程序比较难调试,有时,即使是逆向分析经验丰富的人调试起来也并非易事。本文通过服务的原理来简单介绍下服务的调试方法。


2.原理

Service(服务程序)由SCM(Service Control Manager)管理,运行Service时,需要由sc(控制器)执行启动命令。sc向SCM提出服务控制请求,SCM向Service传递控制命令,并接收其返回的值。PS:sc无法直接向Service下达命令,必须通过SCM传达。
1

SCM可以理解为是一个抽象化的服务接口,一般通过函数OpenSCManager调用。
2

而sc就是我们常用的服务控制器,可以通过:services.msc打开或直接使用命令行运行sc.exe进行操作。
3

所有Service都是由sc调用StartService() API启动的,若Service为自启动服务,则由SCM调用StartService()启动。
4

Service启动过程:

[1]sc调用StartService()
sc调用StartService()的同时,SCM会创建相应的Service进程,然后执行Service进程的EP代码。

[2]Service进程调用StartServiceCtrlDispatcher()
为了以服务形式运行,必须在服务进程内部调用StartServiceCtrlDispatcher() API来注册服务主函数SvcMain()的地址d调用StartServiceCtrlDispatcher()时,返回sc的StartService()函数。SCM调用Service进程的服务主函数SvcMain()。

[3]服务进程调用SetServiceStatus()
虽然已经创建了Service进程,但尚未以服务的形式运行。当前状态仍为SERVICE_START_PENDING。在服务主函数SvcMain()内部调用SetServiceStatus(SERVICE_RUNNING) API后,才正式以Service进程形式运行。


3.代码演示

根据有无运行参数,本例程序可分别以服务模式(无参数)或常规模式(有参数)运行。以服务模式运行时会调用StartServiceCtrlDispatcher() API,启动服务主函数(SrvMain());以常规模式运行时,根据所给参数的种类,分别调用InstallService()/UninstallService()函数,它们分别用来安装或卸载服务。

主函数
5

6

InstallServie()函数
7

UninstallService()函数
8

8

服务主函数SvcMain()
9

服务控制函数SvcCtrlHandler()
10


4.程序演示

在命令行下运行程序DebugMe1.exe,加上参数install。
11

从services.msc中可以看到服务SvcTest已被创建。
12

SvcTest服务的进程(DebugMe1.exe)是以services.exe进程的子进程形式运行的,起始所有服务进程都以该形式运行。Services.exe进程就是SCM。
13

对于EXE文件形态的Windows服务程序而言,必须在其EP代码内部调用StartServiceCtrlDispatcher() API,将服务主函数(SvcMain())的地址通知给SCM。对于DLL文件形式为Windows服务而言,服务主函数(默认为ServiceMain)为导出函数,SCM会调用运行导出函数,所以不需要另外调用StartServiceCtrlDispatcher() API。


5.调试服务

使用IDA可以快速找到ServiceMain(),如下图,对应的地址为0x1000C8C0。
14

然后使用OD加载程序,直接在ServiceMain(0x1000C8C0)处右键->此处为EIP。
15

大家可能有个疑问,那么直接?不会造成什么寄存器、栈的访问错误吧。答案是一般不会,ServiceMain()是一个较独立的函数(名字都叫Main函数了),很少接收外界传来的参数,所以可以将EIP指过去直接运行。不过有时出现下面这种情况需要注意,ServiceMain需要传来的ServiceName参数,这时我们若不构建一个ServieName,将会出现内存访问错误。
16

a2是一个双重指针,在栈中0x12F870的位置,我们在其写入一个伪造的地址,这里地址为0x1001A424,然后再在0x1001A424中写入地址0x1001A434(ServiceName存放的地址),最后,再在0x1001A434下填入服务名就行了,这样就实现了参数填充,不会再出现内存访问错误了。PS:0x1001A424和0x1001A434不是特定的,自己找块空闲的内存写就行。
17

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37552052/article/details/82390354

智能推荐

黑马程序员JAVA 颜色过滤器 程序_技术成长笔记_新浪博客-程序员宅基地

文章浏览阅读82次。import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.colorchooser.*;public class ColorChooserDemo extends JPanel implementsChangeListe..._java shell 颜色字符过滤

谈谈前华为荣耀软件测试工程师校招面试(已拿到offer)_荣耀测试工程师机考题目-程序员宅基地

文章浏览阅读9.4k次,点赞3次,收藏26次。截止到现在,一共参加了2次笔试,2次面试,具体时间参照截图机试:一共三道编程题,共500分好像,全对了一道,就是提交后通过测试,另外两道写完了,但是提交测试没通过题目一:从一份人员名单中(限定5个),抽取幸运奖,人名的各个单词在26个英文字母的顺序累加起来为每个人的幸运值(a&A为1,b&B为2…),先挑选一名嘉宾XX,人后在参加抽奖的人员名单中选取一个人名幸运值与嘉宾XX的幸运值最接近的一个作为幸运奖,若果最接近的有多个以最后一个输入的名字优先。(人名长度不超过10,大小写处理_荣耀测试工程师机考题目

css的mediaquery查询几种不生效的原因_media- query 不生效-程序员宅基地

文章浏览阅读6.3k次。今天上午搞了半个小时,在webstrom中修改了css样式,用chrom浏览器浏览不生效,在网上查了半天,看是不是webstrom的有写保护,或者chorm浏览器不支持,最后发现少and后面少了一个空格导致css mediaquery查询不生效,即使在chrom中的network中css样式文件已经被加载了。@media screen and 不起作用原因汇总。首先确认是不是css本身的问题,而不..._media- query 不生效

Arduino 语法、函数使用、最常用函数、arduino教程、arduino笔记、参考手册_arduino常用函数手册-程序员宅基地

文章浏览阅读1w次,点赞38次,收藏194次。函数部分数字 I/OpinMode()描述将指定的引脚配置成输出或输入。详情请见digital pins。语法pinMode(pin, mode)参数pin:要设置模式的引脚mode:INPUT或OUTPUT返回无例子ledPin = 13 // LED连接到数字脚13 void setup() { pinMode(ledPin,OUTPUT);//设置数字脚为输..._arduino常用函数手册

MySQL数据库概览_后,我们首先就来看一下,mysql数据库中有多少个数据库(你可以理解为,mysql数据库是-程序员宅基地

文章浏览阅读257次。SQL语句分类:DCL: 数据控制语言 GRANT、DENY、REVOKEDDD: 数据定义语言 CREATE、ALTER、DROP、TRUNCATEDML: 数据操纵语言 SELECT、DELETE、UPDATE、SELECTMysql默认数据库有4个(version 5.7及8)mysql: mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中_后,我们首先就来看一下,mysql数据库中有多少个数据库(你可以理解为,mysql数据库是

H3C S5500-52C-EI SSH 服务器发送了断开连接数据包_服务器发送了断开连接的数据包-程序员宅基地

文章浏览阅读2.9k次。H3C S5500-52C-EI SSH 服务器发送了断开连接数据包The connection is closed by SSH Server.(code:2)_服务器发送了断开连接的数据包

随便推点

VirtualBox - Error In supR3HardenedWinReSpawn_virualbox verr_sup_vp_not_known_dll_or_exe-程序员宅基地

文章浏览阅读4.8k次。VirtualBox - Error In supR3HardenedWinReSpawn(rc=-5640)Please try reinstalling VirtualBox.where supR3HardenedWinReSpawn what: 1VERR_SUP_VP_THREAD_NOT_ALONE (-5640) - Process Verification Failure:..._virualbox verr_sup_vp_not_known_dll_or_exe

抖音短视频怎样引流?有哪些方法?_抖音短视频引流发多少条-程序员宅基地

文章浏览阅读1.5k次。许多人在玩抖音,抖音短视频引流怎么做?这是许多有这方面需求的小伙伴关心的问题。下面就带大家了解一下!一、利用昵称引流。1、不包括贬义:过激的昵称容易产生负面联想的名字,给人不好的印象,失去好感。2、个性和特点:选择名字不能选择大众化的名字。太大众的名字容易混淆。3、尽量短小精悍:取昵称时,尽量短。可以使用描述具体场景的词。例如:“办公室小野”描述了其内容围绕的空间特征,“七舅脑爷”“陈翔六点半”容易考虑具体行为。4、选择能够强调账号内涵或个人特征的词:例如,“大嘴博士”“小豆先生”等词语可以首先了_抖音短视频引流发多少条

GNN金融应用之Classifying and Understanding Financial Data Using Graph Neural Network学习笔记_using external knowledge for financial event predi-程序员宅基地

文章浏览阅读1.1k次。Classifying and Understanding Financial Data Using Graph Neural Network1. 概述2. 数据表示-加权图3. GNN利用边权值4. 解释图结构数据的信息成分4.1 Maximal Mutual Information (MMI) Mask4.2 Guided Gradient (GGD) Salience4.3 Edge Weighted Graph Attention (E-GAT)4.4 Culturing Node Class S_using external knowledge for financial event prediction based on graph neura

【Python强化】使用pandas和csv读取csv文件_导入pandas库,读取data文件夹中的order.csv文件,编码格式为“gbk”,打印出所有列-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏7次。一、pandas读取方式1、csv介绍csv文件是一种以逗号分割字符的文件形式我们创建一个简单的文件demo.csv,如下格式的形式进行存储,以,进行分割name,score,age,sexlhh,100,24,男wcy,99,28,女2.读文件直接读取import pandas as pd# 读取csv文件 全文件读取data = pd.read_csv('demo.csv',encoding="gbk") # 中文显示需要指定编码格式df = pd.DataFrame(_导入pandas库,读取data文件夹中的order.csv文件,编码格式为“gbk”,打印出所有列

Subdomain Visit Count_count,subdomain-程序员宅基地

文章浏览阅读171次。A website domain like "discuss.leetcode.com" consists of various subdomains. At the top level, we have "com", at the next level, we have "leetcode.com", and at the lowest level, "discuss.leetcode.com"..._count,subdomain

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化技术_深度学习框架遥感-程序员宅基地

文章浏览阅读930次,点赞2次,收藏8次。深度卷积网络采用“端对端”的特征学习,通过多层处理机制揭示隐藏于数据中的非线性特征,能够从大量训练集中自动学习全局特征(这种特征被称为“学习特征”),是其在遥感影像自动目标识别取得成功的重要原因,也标志特征模型从手工特征向学习特征转变。为使广大学者能理解卷积神经网络背后的数学模型和计算机算法,掌握利用PyTorch为基础的遥感影像地物分类,遥感图像目标检测,以及遥感图像目标分割等应用。1.现有几个优秀模型结构的演变原理,包括AlexNet,VGG,googleNet,ResNet,DenseNet等模型。_深度学习框架遥感

推荐文章

热门文章

相关标签