Sandboxie循序渐进耳之监控篇上

article/2025/6/9 1:17:20

本文为看雪论坛精华文章

看雪论坛作者ID:一半人生

Sandboxie监控篇笔记太长,引擎打算重写(利于二次开发),业余时间研究会久一些,分为上下篇分享笔记。

上篇主要自编译沙盘部署(合规过程),文件举例回调/r3dll注入分析,沙盘内部构建MSG通信分析(自行添加消息),基于MFC二次开发(抛砖引玉)。

下篇主要接管资源监控数据和重写部分监控引擎,添加hook第三方接口。

本篇是进程监控笔记,以功能为出发点,进一步探讨实现原理与数据应用,参杂排错思路和开发相关知识。

David.SandboxiePlush增添了许多新功能,新鲜感的界面和多交互,确实是不错的一面。

SandBoxiePlush界面

本文基于原生的Sandboxie添加API监视模块,准备改造如下(后续会改进,危险操作将会标红):

沙盘编译部署

进程篇基于调试学习和理解,本篇需要自己实现编译且正常执行,不推荐使用脚本集成化,最好能够理解和学习每一个环节,过程无疑是比较麻烦的,这里补贴一张r3进程篇流程图。

r3-process-run

Release编译全部工程,编译期间如果遇到lib异常,请参考第一篇文章引荐的解决方案,根据错误提示解决问题,目标是能够正常运行自编译的Sandboxie即可:

编译完成后直接运行SbieCtrl.exe会发生错误,SbieSvc.exe需要以服务的方式启动,SbieDrv这时候也没被加载。

后来查看了安装脚本和David-SandMain代码启动流程(保证每个步骤都合规),依赖于KmdUtil进行加载,sandboxie作者已写好模块,只需要调用即可。

SbieControl

1) 如果本机已安装Sandboxie,调试可能会出现版本不匹配,这时候SbieSvc服务和驱动已启动,可以进行LPC查询版本号,需要卸载已安装的Sandboxie,如下所示:

Clinet:

版本检测CMyApp::InitInstance.CInitWait initwait(this);将会通过发送请求MSGID_SBIE_INI_GET_VERSION判断组件之间版本是否一致。

Server:

return GetVersion(msg);}

GetVersion查询当前版本,MY_VERSION_STRING宏声明了版本号:

ULONG ver_len = wcslen(ver_str);ULONG rpl_len = sizeof(SBIE_INI_GET_USER_RPL)+ (ver_len + 1) * sizeof(WCHAR);SBIE_INI_GET_VERSION_RPL *rpl =(SBIE_INI_GET_VERSION_RPL *)LONG_REPLY(rpl_len);if (! rpl)return SHORT_REPLY(STATUS_INSUFFICIENT_RESOURCES);

wcscpy(rpl->version, ver_str);rpl->version_len = ver_len;return &rpl->h;}

检测版本号不匹配,弹窗提示,因为本机安装发行版是v5.33,源码版本是v5.4,自编译的程序应该都是v5.4版本,不会出现上述问题。

版本号校验实际开发中是必要的,多版本迭代,多个组件功能增添和优化,当新版发布后,客户只更新部分组件或某些原因更新失败,新老版参杂运行可能因接口已改动等问题造成很大的风险。

2) 指定的服务未安装,如下所示:

Client:

SbieCtrl.CMyApp::InitInstance.CInitWait.initwait(this).SbieDll_StartSbieSvc(BOOLEAN retry).SbieDll_ConnectPort.当SbieSvc未启动的时候,data->ProtHandle没有句柄。

调用SbieDll_ConnectPort连接服务端,如下所示:

如上图所示,指定服务未安装,SbieControl.exe启动过程中,默认SbieSvc服务是已加载,Server开启监听等待客户端连接,如果Server未启动,SbieControl不会做加载操作。

基于原生Sandboxie添加代码,连接服务失败则重新服务加载,为了有交互性,简单弹窗或Dlg告知用户是否需要加载SbieSvc和Drv(只提示一次),当然也可以用脚本完成服务安装和驱动安装,这里通过添加代码熟悉每一个环节,如下所示:

if (! NT_SUCCESS(status)) {// 如果失败,提示是否加载服务和驱动 只提示一次安装服务比较合适,nServiceloadflag标志是否第一次提示if (!nServiceloadflag && (IDYES == MessageBoxW(NULL, L"是否重新加载服务和驱动", L"RPC-Server Connect失败", MB_OK | MB_YESNOCANCEL))){// 加载......MessageBoxW(NULL, L"加载成功", L"Waring", NULL);}else{nServiceloadflag = TRUE;if (!ErrorReported) {if (!Silent)SbieApi_Log(2203, L"connect %08X", status);ErrorReported = TRUE;}return FALSE;}}

这只是一个最简单的示例,如果点击是(Y)则加载驱动和服务,如下所示:

KimUtil:

编写服务管理模块,阅读KimUtil源码,它负责SbieDrv和SbieSvc生命周期管理,ReadMe.txt介绍如下:

KmdUtil (installkmdutil). Builds KmdUtil.exe which is used during the installtion process. E.g. to start/stop the Sbie driver (SbieDrv.sys).

// 安装if (Command == CMD_INSTALL) {ok = Kmd_Install_Service(Driver_Name, Driver_Path, Driver_Display, Driver_Group, Options);if (ok) {if (! Driver_MsgFile)Driver_MsgFile = Driver_Path;ok = Kmd_Register_Event_Source(Driver_Name, Driver_MsgFile);if (ok && Driver_Altitude)ok = Kmd_Register_MiniFilter(Driver_Name, Driver_Altitude);if (! ok) {Kmd_Unregister_Event_Source(Driver_Name);Kmd_Delete_Service(Driver_Name);}}}

// 启动if (Command == CMD_START)ok = Kmd_Start_Service(Driver_Name);

// 停止if (Command == CMD_STOP)ok = Kmd_Stop_Service(Driver_Name);

参考David.SandboxiePlush管理模块用法,初始化源码如下:

为了方便调试,可以使用cmd就可以完成安装/启动/停止等工作,循序不能乱,先加载驱动,梳理如下所示:

如果没有签名就会出现无法验证数字,解决方案,简单粗暴开机F8,如下:

驱动加载成功之后,fltmc可以查看已加载的实列和高度:

服务加载成功后如下:

如果开启SbieSvc服务遇到了拒绝访问等权限问题,先核查注册表可执行路径,确认是否因SbieSvc.exe绝对路径导致问题。在排查目录权限,百度自行解决即可(注意先启动驱动/后启动服务)。

给原生Sandboxie添加服务/驱动管理代码,至此SbieCtrl.exe界面运行成功。

Error1:运行后发现无法正常执行,会出现配置文件错误,如下所示:

解决方案:拷贝installTemplates.ini文件至沙箱编译运行目录下即可。

Error2:执行进程再次遇到错误,如下所示:

找不到对象名称?ALPC连接失败?如何出现的这个错误?当前项目共找到三处MSG_2101调用处,但是根据上下文只有一处命中,错误源于Syscall_CheckObject函数的检测,源码如下:

WCHAR msg[256];swprintf(msg, L"%S (%08X) access=%08X initialized=%d", syscall_entry->name, status, HandleInfo->GrantedAccess, proc->initialized);Log_Msg(MSG_2101, msg, Name != NULL ? Name->Name.Buffer : L"Unnamed object");}

解决方案:

SbieDrv添加断点,编译安装,Name值为空,ALPC未连接成功,alpc意味着可能未初始化,该问题上两周没有找到解决方案,因为时间花在了引擎二次开发和界面改进,有时间的朋友可以研究。

控制权限

抛砖引玉:本篇以文件操作举例,使用Hook API, fsd hook,disk hook,Ntfs(MFT)篡改都可以实现文件权限控制(可读,可写,可访问)重定向。

沙盘已实现限制功能,可控制多进程之间的权限管理,Sandboxie自带资源访问监控,如下所示:

本篇以文件限制/资源访问两项功能为主线,进一步学习源码,分析实现原理,添加更直观的数据展示。

测试demo:

CreateFile( OPEN_ALWAYS)-->Userinput-->WriteFile-->CloseHand-->CreateFile( OPEN_EXISTING)-->ReadFile做为API序列。

文件限制:

1) 为了测试沙盘隔离效果,本机C盘创建1.txt文件,并且写入字符,然后Sandboxie执行Demo,创建1.txt并且写入输入的字符,如下图所示,Demo执行之后,本地1.txt没有发生任何改变:

2) 沙盘目录下已创建了C1.txt,且写入了Demo中输入的字符串,这就是重定向。

文件权限:

如何去构造进程监控?r3层跨进程hook依赖远程线程注入Dll或shellcode,对目标进程API挂钩实现过滤。Sandboxie如何实现重定向和监控呢?一起寻找答案如果windbg过程中寻找答案,那将是非常耗费精力的事情,善于搜索源码,Sandboxie以各类消息进行通信,注入也会有消息定义,可以搜索关键字。

SVC_LOOKUP_SID,SVC_INJECT_PROCESS,SVC_CANCEL_PROCESS,SVC_UNMOUNT_HIVE,SVC_LOG_MESSAGE,SVC_RESTART_HOST_INJECTED_SVCS,

SVC_LAST};

其中SVC_INJECT_PROCESS/SVC_RESTART_HOST_INJECTED_SVCS字面意思很明显,服务注入进程,通过代码搜索调用函数及回溯。进程篇发现执行过程中r3没有做hook代码?如何实现进程监控呢?这里阐述驱动初始化过程( 文件),一开始是想放到原理篇( SbieDrv完整性分析)。

1. _FX NTSTATUS DriverEntrySbieDrv驱动入口点,驱动加载时候将会执行方法,Process_Init

if (ok)ok = Process_Init;

2. Process_Init函数函数负责注册回调,PsSetCreateProcessNotifyRoutine ,进程创建/结束将会调用回调函数Process_NotifyProcess

status = PsSetCreateProcessNotifyRoutine(Process_NotifyProcess, FALSE);

3. Process_NotifyProcess函数进程创建将会处理Process_NotifyProcess_Create

if (Create) {

if (ParentId) {

Process_NotifyProcess_Create(ProcessId, ParentId, NULL);}

} else {

Process_NotifyProcess_Delete(ProcessId);}}

4. 负责进程相关的结构填充,通过Process_Low_Inject发送SVC_INJECT_PROCESS至SbieSvc告知注入,等待SbieSvc的挂钩处理。

if (! Api_SendServiceMessage(SVC_INJECT_PROCESS, sizeof(msg), &msg))status = STATUS_SERVER_DISABLED;

5. SbieSvc接收到消息之后,DriverAssist.cpp.MsgWorkerThread开始工作,如下:

InjectLow(data_ptr);

} else if (msgid == SVC_RESTART_HOST_INJECTED_SVCS) {

RestartHostInjectedSvcs;}

6. 响应SVC_INJECT_PROCESS,call InjectLow负责处理和目标进程注入,最后通知注入完成。

7. svc注入进程其实与平常注入无二样,通过VirtualProtectEx/WriteProcessMemory来写入目标进程,它选择覆盖了LdrInitializeThunk函数来挂钩执行。

sandboxie-mastercoresvcDriverAssistInject.cpp有具体hook过程,包括判断了是否已经被hook等处理,这里将不全部刨析。dll注入后如何监控呢,dll源码寻找初始化hook的痕迹,如下所示:

Sboxdll.file_init

SbieDll_Hook函数是实现r3-inlinehook的主要模块,如下所示:

函数原型可知,参数一标识函数名,参数二/三分别是原函数地址和过滤函数地址。

Sandboxie实现inlinehook,经过了以下几个步骤(x32举例):

1) 函数源地址参数校验

2) 检测沙箱hook支持,x32/x64不同,找到函数hook的点。

for (i = 0; i < 20; i++, longs++){if (longs[0] == 0x5208EC83 && longs[1] == 0x0C24548B &&longs[2] == 0x08245489 && longs[3] == 0x0C2444C7 &&longs[5] == 0x042444C7){SourceFunc = (void *)longs[4];break;}}}

3) 检测是否已被挂钩,如果是0xEB(short jmp)

4) 0xE9(near jump)

5) 调用驱动来创建跳板

6) inlinehook指针替换

if (!VirtualProtect(&func[-8], 20, PAGE_EXECUTE_READWRITE, &prot)) {

ULONG err = GetLastError;SbieApi_Log(2303, _fmt2, SourceFuncName, 33, err);return NULL;}diff = (UCHAR *)DetourFunc - (func + 5);func[0] = 0xE9; // JMP DetourFunc*(ULONG *)(&func[1]) = (ULONG)diff;VirtualProtect(&func[-8], 20, prot, &dummy_prot);func = (UCHAR *)(ULONG_PTR)(tramp + 16);

整个过程与平常编写的inlinehook如出一辙,Sandboxie已商用化10几年,inlinehook稳定性/兼容性比较靠谱,按照固定格式添加hook的函数即可,或者修改已定义的过滤函数,实现格外的过滤功能。

DLL几乎接管了常见的API,但WMI等不在这个范围内,需要格外的编写监控模块,添加到沙盘机制中。

CreateFile过滤函数

hook过程我没有调试,所以不一定严谨,想自己接管引擎在开发中,沙盘中的进程调用NtCreateFile,将会执行已被挂钩函数File_NtCreateFileImpl,如上图可以看到函数源码近1200行,Snadboxie作者考虑周全细致,学到了很多知识,详细请自行“食用”源码。

界面开发:

界面初始化流程

定位代码随便加入一行尝试是否生效,界面源码appscontrol目录,添加测试属性如下,ProcListCtrl.Create为例:

这样添加不合理,会出问题,暂时先这样处理。资源访问控制功能设计模态,当监视窗口弹出无法对主界面做任何操作。

appscontrolMonitorDialog.cpp,后面会详细介绍MSG自定义添加消息处理,如下所示:

注意,Dlg应该没有构建类,无法通过向导绑定资源变量(目前本机测试是这样),需要自己用CListCtrl类获取组件ID进行操作。MFC作者重写了控件类,CMyxxx标识为重构的类。上述ListCtrl添加完成后,属性ID=ID_MESSAGE_LIST_MONITORL,使用CListCtrl代码如下:

如何构建非模态对话框呢,这是一个麻烦的过程,尝试后果断放弃,耗时费力不讨好,有更好的方案来代替。弃用Sandboxie作者写的监控窗口,移植到Master主页面,如何设计呢?具备可扩展性?考虑BaseDlg可伸缩,随意调整大小,不改动原有的界面,没有原型图,直接手绘就好了,按钮有点多余,可以添加到菜单栏,否则显得太突兀,点击即可显示,如开篇所示。

1. 第一步,添加菜单按钮,Api监视模块,一般都是绑定菜单处理,处理输入名称即可,该工程需要全部手工完成。

2. 上述编号3411~3451对应着主界面菜单,0x3461其实已被占用,5160~7000之间ID标识未被使用,添加的ID做好维护,菜单处理代码:

CMenu *pMenu = CMyApp::MyLoadMenu(L"TOP_MENU");

遵循作者消息规范操作,通过查询Dll来获取对应的字符串。菜单初始化通过循环完成,TOP_MENU主菜单,MSG_3411消息号递增10(10个以内子菜单)。一开始以为基于msgs.h生成,几经折腾,Parse工程负责将本地txt生成mc,转换msgs.h文件,MSG工程编译dll,共享内存使用。

创建msgs.mc文件:

自定义MSG-ID只有写入Sbie-English-1033.txt文件才会生效,编译后的msgs.h才会包含,自定义格式如下:

5162;txt;01&ProcessAPiMonitor.

3. MyFarMe.Cpp添加菜单响应消息手动添加,如下所示:

2. Map映射,OnCmdPackTools响应菜单点击函数BEGIN_MESSAGE_MAP(CMyFrame, CFrameWnd){......ON_COMMAND(ID_MEUN_APIMONITOR, OnCmdPackTools)......}

3. 方法实现,如何操作:void CMyFrame::OnCmdPackTools{AfxMessageBox(L"1");}

4. 第二步,List宽度对于当前窗口减半,初始化新的监控List窗口(占据另一半 。菜单检测没有使用Checks属性,自己实现,同样List也被重构,ProcessList/FileList都对应的初始化如下:

5. m_procList/m_filelist组件对象,可以通过变量来控制组件属性。梳理List继承,MyListCtr继承基类CListCtrl,封装使用单独继承MyListCtr,每个功能模块都可以继承封装。

创建进程API监控类.cpp/.h,继承CMyListCtrl或者直接用ProcListCtrl类,编写控制List大小函数。

总结

虽然没有介绍初始化过程和原理,进程篇到监控篇学习至少可以掌握代码增删改查,能够执行/测试,编写部分功能和模块,对各组件之间联系更深一步,函数调用关系愈发清晰,目前来说这些是足够的。

可以按照个人的意愿修改源码,这不同于进程篇的调试和理解,从这里开始你将可以基于Sandboxie做一些认为好的事情,这将是一个新的里程碑。

原理篇放在最后是因为Sandboxie工程量偏大,设计与代码质量高,二次开发中不断学习,久而久之才能更好理解每一个过程,才能严谨的对Sandboxie原理完善总结。

最后很多人搞混轻量级沙盘和恶意软件分析沙箱的概念,准确来说二者完全不是一回事,除了虚拟化安全这条理念,设计出发点不同。

个人使用Sandboxie一直以来用于游戏多开和安装未知软件,你会发现Sandboxie社区散户大多是用来安装软件( 包括移植)和游戏,它并不是为了恶意软件分析而设计,但是开源后的Sandboxie,如果你愿意它完全可以成为Windows下优秀的恶意软件分析沙箱之一。

希望更多对底层安全开发的人一起学习研究。引入rootkit监控(动态拦截),成熟后引入vt框架ept_apimonitor,这是比较有意思的攻防对抗。

看雪ID:一半人生

求分享

求点赞

求在看

“阅读原文 立即报名吧


http://www.hkcw.cn/article/vwBOtlcrqG.shtml

相关文章

五十款可爱的立体蛋糕~ ~艺术感满满,时尚简单更漂亮!!!

蛋糕装饰,原来这样的蛋糕简单更漂亮, 师傅们经常做难的蛋糕,试试这个也不错哦。 现在蛋糕手工是越来越强了, 你可以用各种角度去欣赏一下。 50款经典蛋糕+你看这些逼近艺术的蛋糕,它们已经不像蛋糕了,完全是个艺术品,谁说蛋糕就是为了吃的呢?没有天赋还真的创作不出来呢…

何炅屡陷“断背”绯闻!揭秘何炅鲜为人知的六段情史

何炅1974年4月28日出生湖南长沙,是中国知名的主持人,也是北京外国语大学阿拉伯语系教师。自1998年起,他主持湖南卫视的《快乐大本营》栏目长达十余年,被无数的观众熟知并喜爱。然而在看似一帆风顺的主持道路上,也有着不为人知的艰辛。何炅曾经一度想放弃大本营,退出主持行…

原创都快糊穿地心了还被人追着骂惯三,她到底冤不冤?

这一周末的大锤咣咣砸,有人就是想演“众筹唾沫星子淹死我自己”的戏码,拦都拦不住。具体的来龙去脉昨天的小号已经帮大家整理了一遍,需要补课的宝宝们可以猛戳↓↓↓: 铁锅炖自己,成就大女主,真不愧是史上最清爽的出轨瓜! 陈翔到底是啥人咱就不讨论了,“见仁”——见智…

原创张东健与太太挽手走红毯,失去滤镜,夫妻俩油腻憔悴呈现真实50岁

本文素材来自网络。若与实际情况不符或存在侵权,请联系我们删除。 不久前,韩国著名明星夫妇张东健和高小英罕见地共同亮相某活动。他们跨越太平洋,飞往美国洛杉矶,参加第11届洛杉矶艺术博物馆年度艺术和电影活动,向韩国总统电影导演和美国艺术家海伦帕什吉安致敬。当时会场…

原创小姐姐穿性感紧身裤,勾勒出迷人凸凹身姿,拉长腿部曲线!

想要魅力吸睛,性感紧身裤让你瞬间华丽变身风姿卓绝 。非常适合这个季节出行,提升气质更显女人气息,完美曲线让人不想移开眼睛!如玉般洁白修长的美腿秀出修长双腿,简约时髦搭配,性感高跟鞋大写的时尚,大写的美,眼神迷离小蛮腰美女妩媚性感!身材不够好可以通过穿衣搭配来…

原创宋钟基终于帅回结婚前!拍6月刊大片,穿西装戴玫瑰花闷骚十足

宋仲基离婚后的事业终于重回巅峰。前不久,新剧的成功播出让宋仲基的演技再次爆发,新女主cp的幽默感也很吸引大家,不过宋仲基的老态在剧中还是能看的一清二楚戏,主要是他眼神的变化,已经失去了之前的任何表情。 不过不久前宋仲基的最新大片曝光,让他的状态回到了结婚时的巅…

现实版杨过和小龙女最终能否幸福?答案惊为天人!

杨过早年丧父,成了流浪儿童。在世漂流的时光,练就了一身自我保护的好功夫。一方面防御极强,另一方面极度自尊。虽然不曾受其父亲杨康教养,却遗传了其父敏感自负的气质和性格。83年陈玉莲版小龙女,玉女素颜 被郭靖收留之后,无法和师兄妹相处,不得已而送上终南山。可是刚烈…

三网合一什么意思

"三网合一"是指电信网络(电话网络)、有线电视网络和计算机网络(互联网)这三大传统的通信网络通过技术整合和业务融合,实现资源共享和功能互补,从而提供更加高效、便捷和多样化的通信服务。这一概念旨在打破不同网络之间的壁垒,实现网络间的无缝对接和业务的互…

罗大伦:从医三十年,发现一个大补气血的方子,只需两味药

生活中,我们留心观察下会发现: 有的女人面色红润,肤若凝脂,精神饱满,让人赏心悦目; 有的女人却面色萎黄,瘦弱苍白,疲倦乏力...... 差别为什么这么大呢?主要原因,就是气血不足。 气血不足即中医学中的气虚和血虚,气血不足的结果会导致脏腑功能的减退,引起早衰的病变…

采桑子丨沉思往事立残阳

《采桑子》 叶广芩 著 《采桑子》是“老舍之后,京味文学的旗手”叶广芩作品中的双璧之一。 一个世家的败落,一群子弟的飘零,一幅充满文化意蕴的斑斓画卷,一曲直面沧桑、感喟人生的无尽挽歌。《采桑子》由九个既相互关联,又彼此游离的故事连缀而成,讲述了民国以后满族贵胄…

张艺兴上快本公主抱鞠婧祎 意外引粉丝战火

网友爆料截图 张艺兴日前受邀登上《快乐大本营》,节目中,他不顾自己有腰伤,抱起女团“SNH48”成员鞠婧祎下腰,然而这个片段曝光之后,令粉丝感到非常心疼不满,意外掀起激烈的战火。 许多网友近日在微博上爆料,指张艺兴日前录制《快乐大本营》,为了配合游戏安排,用“…

王俊凯古装造型英俊 TFBOYS三个小鲜肉古装照谁帅

日前TFBOYS王俊凯曝光了古装宣传片,拉弓射箭英气十足。其实王源、易烊千玺也有不俗的古装扮相,或乖巧卖萌,或温润如玉……究竟哪款才是你的最爱呢?一起来看一下!王俊凯王俊凯古装造型展开全文王俊凯露笑王俊凯眉眼清秀王俊凯拉弓射箭王俊凯古装造型俊朗古装造型显温柔王源王源…

刘德华节目爆粗“全家死光”惹怒全港!登报道歉黑锅揹20年真相曝光...

刘德华贵为亚洲演艺圈天王,个性却相当亲民毫无大牌架子,对粉丝更是有求必应,EQ也好的没话说,但其实他过去也闹过失言风波,引起全香港民众震怒,纷纷打到电视台抗议。刘德华1995年曾上过TVB电视台台庆活动,录影长达5、6个小时,其中有个短剧单元,大明星全部演出,疑似是因…

万达集团创始人王健林宣布退出公司并将全部股权转让给中国儒意!

点上方[建造云]→点右上方[]→点选[设为星标★] 请将建造云加为星标或每次看完后点击一下页面下端的“在看”,拜托了! 来源:鹏飞深文,凤凰东方传媒,数局,网络 在商海中,孰强孰弱,胜败乃兵家常事。进入2024年,王健林和他的万达集团几乎一直是“风雨飘摇”。 在这个商界…

孙艺珍年轻时好美,五官不输刘诗诗,演技堪比章子怡

在整容泛滥的韩国,女明星整容已经是家常便饭了,有的人十八岁的礼物就是去整容。在韩国娱乐圈,明星整容更是一堂公开课,因此韩国民众一直都十分推崇天生丽质的大美女,今天小编就来给大家介绍一位天生丽质的韩国女演员,她就是被誉为韩国仙女的孙艺珍。如今已经36岁的孙艺珍…

一首夜曲,恬静淡然,悠然生活

舒伯特小夜曲 歌声穿过深夜 向你轻轻飞去 在这幽静的小树林里 皎洁月光照耀大地 树梢在耳语在一个迷人的夏夜,听上一首轻柔委婉,旋律如行云流水,又如清风拂面的恋人小夜曲是最合适不过了。它既能平静白日里躁动不安的心灵,也能让失落的心得到最温柔的抚慰。 小夜曲是一种最…

中山百度负责人

中山百度区域经理13431098695中山百度公司位于中山市东区起湾道元位大楼三楼、五楼;中山百度公司深耕粤港澳大湾区企业,通过精准营销及优质内容生产运营的有效联动,实现一站式整合网络推广服务。

韩国推新综艺《我们离婚了》,网友想看宋慧乔宋仲基张柏芝谢霆锋

有报道称韩国将推出离婚夫妻互动类同居综艺《我们离婚了》,听到这个综艺的名字,小编就炸掉了,离婚还能上综艺?离婚后还能一起愉快的同居吗?据了解这档综艺的主旨就是希望,离婚后的夫妻再一次住在一起,通过镜头反思自己的婚姻生活,了解自己婚姻中出现的问题。《我们离婚…

刚刚,平湖地震了?!好多大楼在晃,不少人逃下楼!当湖/钟埭/乍浦...多地出现震感!

刚刚!平湖地震啦?! 平湖市区的龙盛蓝郡、 金色港湾、温州商会大厦等高楼 有明显晃动感,大家纷纷跑下楼…… #地震快讯#中国地震台网正式测定: 04月18日13时01分在台湾花莲县海域(北纬24.02度,东经121.65度)发生6.7级地震,震源深度24千米。 台湾6.7级地震, 这震级不小…

单机版《cf》你见过吗?双持大炮、雷神手斧功能强大,手雷亮了!

大家好,我是殿堂君,今天带大家看一看网络上一位大神自制的单机版《CF》。最近,小编从网络上找到了一位大神,他历时四个月的时间,敲了4w行代码,自己写出了一款单机版的《CF》。他制作的这款《CF》十分有趣,不仅里面的武器非常强大,手雷更是令人笑掉大牙,接下来小编就带…