向日葵远控软件识别码外部读取 - Touale Cula's Blog

前言

之前开源过一个向日葵识别码读取的项目,版本号是向日葵正式版,基于配置文件读取账号以及基于内存方式读取密码。可是上述方案无法迁移到企业版的向日葵,而且刚好有个客户通过一些渠道加上我,同时也愿意花钱让我帮帮忙,实现企业级的向日葵识别码读取。好吧,最近太穷了,迫于生活,抱着研究研究的态度看看吧!


分析

基于配置文件的向日葵识别码分析

首先回到正式版的向日葵,它能够实现读取,好在向日葵app有把自身的识别码保存在配置文件中,具体路径在于:

1
"C:\Program Files (x86)\Oray\SunLogin\SunloginClient\config.ini"

但是不一定是保存在C盘中,不过没关系,除了盘符不同,子目录下基本保持一致!所以可以直接遍历,比如4个盘,遍历以下路径:

1
2
3
4
"C:\Program Files (x86)\Oray\SunLogin\SunloginClient\config.ini"
"D:\Program Files (x86)\Oray\SunLogin\SunloginClient\config.ini"
"E:\Program Files (x86)\Oray\SunLogin\SunloginClient\config.ini"
"F:\Program Files (x86)\Oray\SunLogin\SunloginClient\config.ini"

另外,由于系统版本问题,也可能不在x86下,可能保存在该配置下

1
:\Program Files\Oray\SunLogin\SunloginClient\config.ini

基于上述文件,很容易就可以找到配置相关信息。完整的配置文件信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[base]
config_path=C:\ProgramData\Oray\SunloginClient\config.ini
tracksvr=
macaddress=K38:00:25:bf:47:17
encry_pwd=zZNAl3FMvk8=
has_uu=0
showupdatetip=0
hostname=default
hostdesc=
level=
levelname=
levelchanel=
istransfer=
ismessage=
expires=
skin=
sunlogincode=
isfastcodelogin=1
logintype=2
license=3d50-9013-a392-66da
licensepsw=
fastcode=k967594961
fastcodepsw=RaBYp76DzfcZNAhdIB1Qz5lUflair4zi
sunloginserver=rc10-fc.oray.com:443
slapiserver=slapi.oray.net
account=
language=0
first_run=0
green_tip=3
lastview=1
open_eyes=0
screenshots_path=C:\Users\lenovo\Documents\Sunlogin Files


[green]
startup=1

通过比对,可以很容易发现 [base] 下的 fastcode 就是我们想要找的向日葵识别码 967594961!


OK啊,基于上述原理,回到企业版的向日葵,客户反馈说用之前开源的东西不得行。刚接手时,个人觉得是不是配置文件发生了变更,或者版本不对。

所以第一步就是装上了向日葵企业版,并且保持版本信息和客户一致!

初步检索,发现配置文件好像好存在,通过everything检索sunlonginclient发现有关的config和之前路径相同,但是比对发现问题,ini配置文件的code和真实的识别码并不是相同的。

所以我个人的猜测应该是旧版本卸载时没有清理干净..无语

ok,果然把有关的config.ini删除,然后重启向日葵,发现config并没有重新生成,所以,软件之间的映射关系消失了….

但是有个很敏感的文件,在于sunlogin下的config,这个是安装时生成的,但是其中并没有相关的code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
[base]
installautorun=
no_window_user_pwd=0
isopened=1
config_path=D:\向日葵\SunloginClient\config.ini
tracksvr=
macaddress=C2:73:B1:D9:55:79
has_uu=0
showupdatetip=0
language=0
enable_print=0
width=1920
height=1080
open_eyes=1
screenshots_path=C:\Users\lenovo\Documents\Oray\Sunlogin Files
hostname=default
hostdesc=
level=
levelname=
levelchanel=
istransfer=
ismessage=
expires=
security_tips_display=1
skin=
isfastcodelogin=1
logintype=2
slapiserver=slapi.oray.net
account=
login_duration=1000
remindtime=2022-05-15 15:16:18
access_token=
refresh_token=
access_token_expires_time=
login_event_upload=1
need_upload_asset=0
openmicrolive=0
publish_time=1653117355
selectmode=2
updatemode=1
cpu=5sB4yWxK+5xBGLBPCzmvfr6/qAZCykVTDFNpwZXXnNpu4na9sozb7VRFMfBQ/+7aMUp7rNF5qPe6w7iQDEsj3l+j5cWlEAaJa7Xi+LbD5QHY8g9g7KBqXmOkoY/3czZGBhzF8wLQtVa/iGN7PlmrP+RbT+SX8uUdX9mEEtZMBOC9y2EqMzgVtvnhqbn7bMoP59PxQaqYTUhGmDfuffwNXLxj0cagh/PgwZLo5mTm2ETaMM0qyrFSbjPgrpsNK6kamO1DE2PZy5YFwuLBjzv3Iw==
memory=Ct7HM1VSRxw=
baseboard=5sB4yWxK+5xBGLBPCzmvfvcfONrfh+Zm9dRTootVyVt7uAeeptNvPFbUzz9Yg4IJjbdh5Q9Rte66w7iQDEsj3omcQ/tsAjOSeHMxc/ayoOOlRoc0gQviB4sN9A0jJmL09M2fkab0Zq5nI8oUBDBv92bkGu7uvXVYgMHmWo/6lwloFSpk/PBbvCXCzFxsx1RRCmEf8RlGxbQ=
videocontroller=5sB4yWxK+5xBGLBPCzmvfpsNW6EnJEuGOc7oETI5Ni+C0sF509/x+XFYDwqtMZcSisgy62axgUG6w7iQDEsj3mNkFnsL1xFvVEi9/bVyWZMZG72DkwdZHHFMqqq6AyDcDhq/1nXFC1Q3FkK/Owh1mm+eyt2uGFOI0tFpTLSVFou6Mt9EpzclfZlVCRnNNH/P8F7ufnmq4Ez3drczjnAEkw==
networkadapter=5sB4yWxK+5xBGLBPCzmvfsalJM6xa19LH5HD5xCDQQMJJh6vp1m8xXvlVLzFjvUbiPvZfxwAXCS6w7iQDEsj3qyI8sWNrcesDe9e5cjJtoGkaVgXejjp+/nhqbn7bMoP59PxQaqYTUhGmDfuffwNXOfFQ9Zn4xqr9mFd5ZXYcXgGisa5i7SyGw==
desktop_monitor_info=5sB4yWxK+5xBGLBPCzmvfhw0dGh5C3dN1mGjS0qBtuBaMq21IZR8LqBzqfg/MgjCGiJgUXGoUt+6w7iQDEsj3gulQBqIB9nGI1IWKg2XOXuRQN8GcntdhJjq0E6ee+tmG+Wr3fbsZ/QsslsRSb0wKTqBMOycjRURZuQa7u69dVgL/zVPlis6cyIdbEgErMBB
keyboard_info=5sB4yWxK+5xBGLBPCzmvfmLZpzB9jlf6/c2qigy4G5bTcb7967bItZRvQAPFOInLgJAkv96xy8i6w7iQDEsj3l+j5cWlEAaJcwMxh4Fv/u0cjWtl81avM+JZU5dLvLptgXIQ5xdlJmdv96sElIFEx9W6LMwrqrWAg7p5MpWN7Agx7PlSDoBx1L43NIN45LeL
os_name=aDyPwYldEfIopeqYYZktKieT3zjNobg2gmerHxUlads=
diskdrive=5sB4yWxK+5xBGLBPCzmvfjLaX9p9JpjSFwGpyEA3nZEqCND8Qo+/sJq2oXbx/RMqmZjWRSrpHo26w7iQDEsj3jB/wb7qjZMCKQYl0bgl534n8HnXis4BAXWTKn6p2863ZuQa7u69dVj84S6ncQckuF6p3+0FK4e0/Lz+97IilukJpOKHrgpqi7iIJcJ5TpI4nksRCcRBopq1f8YdCtx7lu3Gviq8IzjR/wpG7REZnW1DP1GHGw6+57ztR136ogN92zTzJXUkifIki2RrtUpqDT/f0mMWgn0nz+Sv14cJv40QGcjqfgcJMGfjym4uD0WDzmiHiAQ9wTa1el8t7VY4WyIvRfpA79QOBcLiwY879yM=
is_enterprise=1
firstclickadvance=1
auto_proxy=0
[local_security]
certificate=0
enabledpms=0
autolockdesktop=0
[advance]
recordpath=C:\Users\lenovo\Documents\Oray\Sunlogin Files
[common]
autorun=1
enablevpn=0
projection=1
timeout=10
autoclose=1
notify=1
serviceonly=0
enableremotecontrol=1
askforquit=1
enablewakeup=0
openshareurl=0
buyshareurl=0
shareurl=
[desktopmonitor]
enable=0
desktop=1
framerate=1
times=
motiondetection=0
sensitivity=
area=
[security]
custompassword=
usecustompassword=0
usewindowuser=1
wakeuppassword=
wakeupselected=0
whitelist=
blacklist=
switch=0
enable=0
limitloginaccesstime=
enablelimitloginaccess=0
harassoption=1
landiscovery=1
password=
autolock=0
code_access_request=0
host_id_freq=0
[desktop]
clsid={3D7855BD-C91B-4B47-AC5C-1EDFBD30927B}
section=MODULES_LIST
operatingenvironment=2
enable=1
manuconfirm=0
confirmtime=15
autoauth=1
autolockws=0
defaultresponse=1
enablemirrordriver=1
disabledesktopeffects=1
remoteswitchctrl=
[forward]
clsid={92EEE51B-DEC5-477A-874A-66461B5A95BF}
section=MODULES_LIST
friendlyname=绔彛杞彂
homepage=/html/forward/index.html
channels=name=%E5%BE%AE%E8%BD%AF%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2&pro=&addr=127%2E0%2E0%2E1%3A3389;name=%E8%B7%AF%E7%94%B1%E5%99%A8&pro=http&addr=192%2E168%2E0%2E1%3A80;
[fastcode_error]
fastcode_after=10
[network]
open=0
type=2
address=127.0.0.1
port=8889
domain=
username=
password=
ip=

而且相关信息貌似是base64编码,不过解码后乱码,应该不是直接编码,而是经过某算法加密

其中有关很敏感的键名baseboard,和一开始的config节点base有点像…这个时候如果要解密,需要涉及逆向,最极端的方式就是hook…反编译,会导致整个流程非常复杂。

所以,配置文件这条路应该走不通。

好吧,换条路!


基于协议的向日葵识别码分析

这个路,有点奇葩,一开始不是找配置嘛,发现一个log日志文件夹…

sunlogin_service.20220521-164550.log 中有几个比较关键的日志信息捕获到:

1
2
3
4
5
6
7
8
9
10
11
12
13
2022-05-21 16:45:51.223	- Info  -	Current client status: 2
2022-05-21 16:45:51.223 - Info - send status_changed notify 2
2022-05-21 16:45:51.223 - Info - Login task time 0
2022-05-21 16:45:51.224 - Info - Do login( type: 2 ) at 410
2022-05-21 16:45:51.224 - Info - [http call3] new call id:1, url:https://slapi.oray.net/remote/get-fastcode
2022-05-21 16:45:51.226 - Info - [http call3] id:1 create new connection : https://slapi.oray.net:443
2022-05-21 16:45:51.544 - Info - attempt to connect server slapi.oray.net:443(114.215.172.2:443)
2022-05-21 16:45:52.760 - Info - [http call3] id:1, url:https://slapi.oray.net/remote/get-fastcode, status code:200
2022-05-21 16:45:53.036 - Info - attempt to connect server rc10-fc10.oray.com:443(121.40.171.186:443)
2022-05-21 16:45:53.656 - Info - [service] attempted logon
2022-05-21 16:45:53.899 - Info - [service] logon server OK. public ip:183.236.0.85
2022-05-21 16:45:54.054 - Info - [online] attempted client online
2022-05-21 16:45:54.357 - Info - [online] client online OK.

仔细观察,有一个httpcall 是 https://slapi.oray.net/remote/get-fastcode

fastcode是向日葵识别码,那么get-fastcode不就是获取识别码的意思嘛!

于是乎,有个大胆的想法,首先先来个直接访问
返回xml格式数据:

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>remote</category>
<action>getfastcode</action>
<code>1004</code>
<message>MISSING_PARAMETERS</message>
<datas>
<data type="field" name="param">mac</data>
</datas>
</response>

大概意思就是缺少字段嘛,比如mac字段…

新吧,那就抓个包看看内部传输协议传输了什么数据

果断祭出神器charles,打通8889的socket代理,然后把向日葵设置个内部代理

然后重启下向日葵

ok,捕获到4条链接

提交了

1
2
3
4
5
GET /remote/get-fastcode?fastcode=767585688&fastcodepwd=Byzlwou99GKf2TzQ3mjTe1dYHOm6M4Ln&isforced=0&mac=C2%3A73%3AB1%3AD9%3A55%3A79&code=&version=3%2E2%2E1%2E44986&client=Windows%2Cx64%2CEnt%2Cappname%3DsunloginRemoteClient& HTTP/1.1
Accept: */*
Host: slapi.oray.net
User-Agent: SLRC/3.2.1.44986 (Windows,x64,Ent,appname=sunloginRemoteClient)
Content-Type: application/x-www-form-urlencoded

返回了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK
Date: Sat, 21 May 2022 12:09:24 GMT
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Front-End-Https: on
Connection: keep-alive

<?xml version="1.0" encoding="utf-8"?>
<response>
<category>remote</category>
<action>getfastcode</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<data type="field" name="fastcode">k767585688</data><data type="field" name="license">0e14-eb23-fcc1-b470</data><data type="field" name="password">Byzlwou99GKf2TzQ3mjTe1dYHOm6M4Ln</data><data type="field" name="lastusetime">1653134964</data><data type="field" name="slapi">slapi.oray.net</data><data type="field" name="sysserviceid">0</data><data type="field" name="expiredate">-1</data><data type="field" name="login">rc10-fc10.oray.com</data><data type="field" name="httpsserver">rc10-fc10.oray.com:443</data><data type="field" name="pubsvr">pubsub02.oray.net</data><data type="field" name="tracksvr"></data><data type="field" name="lastmodifytime">1653134964</data><data type="field" name="statuscode">2579</data><data type="field" name="security_tips_display">1</data><data type="field" name="force_login">1</data><data type="field" name="retryinterval">30</data><data type="field" name="expiredate_timestamp">1653167364</data>
</datas>
</response>

一看到返回中有了fastcode,767585688刚刚好和真实的识别码一毛一样,我靠,非常激动,就这么简单啊。等等,我发现一个事情,提交的参数中也有fastcode!

…无语了一下,不知道是不是必要参数,果断把参数删除,顺便删除其他参数,只保留一开始的mac

大概缩减陈过这样:

1
https://slapi.oray.net/remote/get-fastcode?isforced=0&mac=C2%3A73%3AB1%3AD9%3A55%3A79

提交,ok啊,返回了fastcode,一毛一样,原来还是这么简单啊,也就是通过mac映射识别码啊!

不急着把代码首先,先和客户要了台服务器,准备测试一下。

有个细节说一下,向日葵提交的mac是C2%3A73%3AB1%3AD9%3A55%3A79

如果通过cmd的ipconfig获取,有时候对照不上,不过没关系,向日葵下的config.ini中保存了mac,从那里直接读取就好!

ok,连上客户服务器,一顿操作猛如虎,发现一个离谱的事情,返回的fastcode和真实的识别码不同。。

裂开,一开始以为是mac有问题,或者对发起者ip也进行了校验,但是发现无论是我还是客户机,查询客户机的mac对应的识别码就是对不上!

回到本机,多查了几次,发现….被风控封了

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>remote</category>
<action>getfastcode</action>
<code>1220</code>
<message>GET_FASTCODE_TOO_MUCH</message>
<datas>

</datas>
</response>

而且向日葵程序也加载不出来识别码了

然后经过下面的过程。。。。

1.还是访问获取fast-code

1
https://slapi.oray.net/remote/get-fastcode?fastcode=767585688&fastcodepwd=Byzlwou99GKf2TzQ3mjTe1dYHOm6M4Ln&isforced=0&mac=C2%3A73%3AB1%3AD9%3A55%3A79&code=&version=3%2E2%2E1%2E44986&client=Windows%2Cx64%2CEnt%2Cappname%3DsunloginRemoteClient&

返回了个新的fastcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK
Date: Sat, 21 May 2022 12:31:37 GMT
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Front-End-Https: on
Connection: keep-alive

<?xml version="1.0" encoding="utf-8"?>
<response>
<category>remote</category>
<action>getfastcode</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<data type="field" name="fastcode">k999677784</data><data type="field" name="license">e391-d78d-8b89-a052</data><data type="field" name="password">ys8nWP0tVtSLMJ3IbHZthhkxiMmi0tPI</data><data type="field" name="lastusetime">1653136297</data><data type="field" name="slapi">slapi.oray.net</data><data type="field" name="sysserviceid">0</data><data type="field" name="expiredate">-1</data><data type="field" name="login">rc10-fc12.oray.com</data><data type="field" name="httpsserver">rc10-fc12.oray.com:443</data><data type="field" name="pubsvr">pubsub02.oray.net</data><data type="field" name="tracksvr"></data><data type="field" name="lastmodifytime">1653136297</data><data type="field" name="statuscode"></data><data type="field" name="security_tips_display">1</data><data type="field" name="force_login">1</data><data type="field" name="retryinterval">30</data><data type="field" name="expiredate_timestamp">1653168697</data>
</datas>
</response>

到这一步申请了个新的识别码,999677784

2.进行更新操作

1
2
3
4
5
6
7
8
POST /sunlogin/remote-info.update HTTP/1.1
Accept: */*
Host: slapi.oray.net
User-Agent: SLRC/3.2.1.44986 (Windows,x64,Ent,appname=sunloginRemoteClient)
Content-Type: application/x-www-form-urlencoded
Content-Length: 506

code=e391%2Dd78d%2D8b89%2Da052&auth=&fastcode=k999677784&fastcodeauth=ys8nWP0tVtSLMJ3IbHZthhkxiMmi0tPI&mask=2578&statuscode=2579&pcname=TOUALECULA&phversion=44986&version=3%2E2%2E1%2E44986&cpu=Intel%28R%29%20Core%28TM%29%20i5%2D8265U%20CPU%20%40%201%2E60GHz&cpu_num=&memory=20293MB&osname=Microsoft%20Windows%2010%20%E5%AE%B6%E5%BA%AD%E7%89%88&baseboard=LENOVO%20LNVNB161216&diskdrive=RPFTJ256PDD2MWX&videocontroller=NVIDIA%20GeForce%20MX250&networkadapter=Intel%28R%29%20Wireless%2DAC%209462&enterprise=1&

返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK
Date: Sat, 21 May 2022 12:31:38 GMT
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Front-End-Https: on
Connection: keep-alive

<?xml version="1.0" encoding="utf-8"?>
<response>
<category>sunlogin</category>
<action>remoteinfoupdate</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<data type="field" name="configmodifiedtime">1653136298</data>
</datas>
</response>

3.响应UI

这个时候,我的识别码真正变化了无语

这时候还是回去访问一开始缩短的链接,也就是通过mac查识别码

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<response>
<category>remote</category>
<action>getfastcode</action>
<code>0</code>
<message>SUCCESS</message>
<datas>
<data type="field" name="fastcode">k883600822</data><data type="field" name="license">3655-9fca-27b7-113e</data><data type="field" name="password">vqRgXU5niFP3SSz3MukQ5znadf09t2bZ</data><data type="field" name="lastusetime">1653136486</data><data type="field" name="slapi">slapi.oray.net</data><data type="field" name="sysserviceid">0</data><data type="field" name="expiredate">-1</data><data type="field" name="login">rc08-fc01.oray.com</data><data type="field" name="httpsserver">rc08-fc01.oray.com:443</data><data type="field" name="pubsvr">pubsub02.oray.net</data><data type="field" name="tracksvr"></data><data type="field" name="lastmodifytime">1653136486</data><data type="field" name="statuscode"></data><data type="field" name="security_tips_display">1</data><data type="field" name="force_login">1</data><data type="field" name="retryinterval">30</data><data type="field" name="expiredate_timestamp">1653168886</data>
</datas>
</response>

这个时候才发现。。。。mac和识别码的映射关系。。。。。

不过还好,说明mac不能反查识别码,要不然,这个还是很恐怖的隐私漏洞!

到了这里,可能会觉得说基于协议的这条路是不是走不通了!

其实,也不完全是,技术上是能够实现的,思路如下:

  1. 通过代码搭建一个socket服务器,具备存储转发功能
  2. 向日葵设置代理
  3. socket代理服务器检查到特征,进行code提取

这个识别,首先对客户来说,非常不友好,因为凭什么我要这么麻烦去设置代理呢?对开发人员,我凭什么做一个小功能专门这么麻烦去做这个。。。。

所以,此路说走得通也走得通,走不通也走不通


基于窗口句柄的内容提取

这个思路应该是大多数人想到了,但是很遗憾走不通

非常简单,找个窗口句柄对组件进行解析,发现:

发现只能解析一个窗口,其他组建解析不了

不像其他软件,可以解析到具体的按钮组件等

原因嘛,很easy,向日葵是自绘窗口,所以嘛

切换到UI绑定看看

UI探测也不行,不过有一说一。tv远程软件可以通过绑定句柄进行识别码获取,qq虽然也是自绘窗口,句柄探测找不到组建,但是ui探测是读取到一些信息,比如聊天记录啦

好吧,这条路不行


基于动态内存的向日葵识别码提取

这条路,是最终的路,也是可行的。

不过也是我最不愿意的,因为有点类似hook,涉及内存的操作其实都是很危险的!

先前提到配置文件,不管信息是保存在配置文件,还是保存在数据库,或者是云端,不管有没有加密,其实最终数据都会加载在内存中。。。

那就直接祭出CE大法

搜索关键字

21个结果,emmm等一会,如果这个值过一会发生了变化,说明不是长久存在,需要找个一个恒定值

剔除变化结果,浏览在内存的表现形式

像这种表现得独立的,忽略吧,他的特征难以让我们定位到的所在

这种还行

这个就非常不错,表现出json格式,所以我们只要找到 “fastcode”:”k 这个关键词即可

转换成 hex 形式

1
22 66 61 73 74 63 6F 64 65 22 20 3A 20 22 6B

实现代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
.版本 2
.支持库 ncdx98
.支持库 spec

mess.初始化 ()
mess.提高权限 () ' 一键提高自身权限

进程_枚举 (dname, did)
.计次循环首 (取数组成员数 (dname), i)
.如果真 (dname [i] = “SunloginClient.exe”)
id = did [i]
调试输出 (id)
hProcess = OpenProcess (2035711, 0, id)
.如果真 (hProcess = 0)
到循环尾 ()
.如果真结束
调试输出 (hProcess)
Number = 内存搜索_x64 (hProcess, “22 66 61 73 74 63 6F 64 65 22 20 3A 20 22 6B”, , , , , , , , Array, 3)

调试输出 (Array)
.如果真 (Number = 0)
到循环尾 ()
.如果真结束
CloseHandle (hProcess)
句柄 = mess.打开进程 (id)
.计次循环首 (取数组成员数 (Array), j)
res = dealBuff (到文本 (mess.读文本型 (句柄, Array [j], , 64)))
调试输出 (res)
.如果真 (取文本长度 (res) = 9)
mess.关闭句柄 (句柄)
返回 (res)
.如果真结束

.计次循环尾 ()
mess.关闭句柄 (句柄)

跳出循环 ()
.如果真结束

.计次循环尾 ()

返回 (“”)

结果:

顺利读取…下班了!