<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LYSM]]></title><description><![CDATA[[LYing SiMon] tells the lies that he [Loves You So Much]]]></description><link>https://blog.youkuaiyun.com/Simon798</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Simon798]]></copyright><item><title><![CDATA[[C++] 异或加密]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/119212055</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/119212055</guid><author>Simon798</author><pubDate>Thu, 29 Jul 2021 15:13:41 +0800</pubDate><description><![CDATA[std::string Encrypt(std::string content, std::string secretKey)
{
    for (int i = 0; i &lt; content.length(); i++)
    {
        content[i] ^= secretKey[i % secretKey.length()];
    }

    return content;
}

std::string Decrypt(std::string data, std::str.]]></description><category></category></item><item><title><![CDATA[[C#] 异或加密]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/119208114</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/119208114</guid><author>Simon798</author><pubDate>Thu, 29 Jul 2021 14:18:23 +0800</pubDate><description><![CDATA[private char[] Encrypt(string content, string secretKey)
{
    char[] data = content.ToCharArray();
    char[] key = secretKey.ToCharArray();
    for (int i = 0; i &lt; data.Length; i++)
    {
         data[i] ^= key[i % key.Length];
    }

    return ...]]></description><category></category></item><item><title><![CDATA[[Rootkit] 驱动隐藏 - 断链]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118683282</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118683282</guid><author>Simon798</author><pubDate>Mon, 12 Jul 2021 20:28:49 +0800</pubDate><description><![CDATA[注意 ： 此方法会触发 PG
代码参考 1
typedef struct _driverdata
{
	LIST_ENTRY listentry;
	ULONG unknown1;
	ULONG unknown2;
	ULONG unknown3;
	ULONG unknown4;
	ULONG unknown5;
	ULONG unknown6;
	ULONG unknown7;
	UNICODE_STRING path;
	UNICODE_STRING name;
}driverdata;



VOI]]></description><category></category></item><item><title><![CDATA[[检测&过检测] 重写 ReadProcessMemory 、WriteProcessMemory]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118682399</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118682399</guid><author>Simon798</author><pubDate>Mon, 12 Jul 2021 19:42:11 +0800</pubDate><description><![CDATA[一、本文大纲

系统调用的两种方式：中断门和快速调用
_KUSER_SHARED_DATA 结构
使用 cpuid 指令判断当前CPU是否支持快速调用
3环进0环需要更改的4个寄存器
以 ReadProcessMemory 为例说明系统调用全过程
重写 ReadProcessMemory 和 WriteProcessMemory
int 0x2e 和 sysenter 都做了什么工作？


二、中断门和快速调用
以我的理解，系统调用，即从调用操作系统提供的3环API开始，到进0环，再到返回结果到3环的全过程]]></description><category></category></item><item><title><![CDATA[[C#] 处理 Json]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118661988</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118661988</guid><author>Simon798</author><pubDate>Sun, 11 Jul 2021 23:11:42 +0800</pubDate><description><![CDATA[环境搭建
点击 NuGet 程序包

安装 Newtonsoft.Json

添加 using ：
using Newtonsoft.Json;


写 Json
StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);

writer.WriteStartObject();
writer.WritePropertyName("password");
writer.WriteValue(textBoxT]]></description><category></category></item><item><title><![CDATA[[C#] 发送 http 请求]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118542638</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118542638</guid><author>Simon798</author><pubDate>Wed, 07 Jul 2021 11:28:16 +0800</pubDate><description><![CDATA[http post 请求 ，参数使用 json 格式
using System.Net;
using System.IO;


public static string PostUrl(string url, string postData)
{
    string result = "";
    byte[] data = Encoding.UTF8.GetBytes(postData);

    HttpWebRequest req = (HttpWebRequest)WebRequest.Cre]]></description><category></category></item><item><title><![CDATA[[C++功能函数] 判断文件&目录是否存在]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118489920</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118489920</guid><author>Simon798</author><pubDate>Mon, 05 Jul 2021 14:50:53 +0800</pubDate><description><![CDATA[代码
/*
	需要引入头文件 #include &lt;io.h&gt;
	存在返回 true ，不存在返回 false
*/
BOOL isFileOrDirExist(PCHAR name)
{
	return  _access(name, 0) == 0 ? TRUE : FALSE;
}


]]></description><category></category></item><item><title><![CDATA[[Node.js] rsa&aes 加密解密]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118469058</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118469058</guid><author>Simon798</author><pubDate>Sun, 04 Jul 2021 22:46:27 +0800</pubDate><description><![CDATA[代码
'use strict';

const express = require('express')
const bodyParser = require('body-parser')
var crypto = require('crypto');
var NodeRSA = require('node-rsa');

// 创建服务器
const app = express()

// 初始化 bodyParser
app.use(bodyParser.urlencoded({ extend: fal]]></description><category></category></item><item><title><![CDATA[[Node.js] mongodb 增删查改]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118211213</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118211213</guid><author>Simon798</author><pubDate>Fri, 25 Jun 2021 10:07:48 +0800</pubDate><description><![CDATA[代码
mydb.js (用来定义表结构、连接数据库)
const mongoose = require('mongoose')

// 连接数据库 ：mongo_test
mongoose.connect('mongodb://localhost:27017/mongo_test', { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })

// 定义 User 表字段
const User = mongoose.]]></description><category></category></item><item><title><![CDATA[[Node.Js] express 处理 get&post 请求]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118180228</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118180228</guid><author>Simon798</author><pubDate>Thu, 24 Jun 2021 10:48:37 +0800</pubDate><description><![CDATA[代码
'use strict';

const express = require('express')
const bodyParser = require('body-parser')

// 创建服务器
const app = express()

// 初始化 bodyParser
app.use(bodyParser.urlencoded({ extend: false }));
app.use(bodyParser.json());

// 处理主页 get 请求
app.get('/',  (]]></description><category></category></item><item><title><![CDATA[[漏洞] 空指针解引用]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118153516</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118153516</guid><author>Simon798</author><pubDate>Wed, 23 Jun 2021 15:08:58 +0800</pubDate><description><![CDATA[原理
c语言空指针的值为 NULL，一般 NULL指针指向进程的最小地址 0 。视图通过空指针对数据进行访问，会导致运行时错误。 当程序试图解引用一个期望非空但实际为空的指针时，会发生空指针解引用错误，大部分情况下会导致程序崩溃。
实例
int* p = NULL;

*p = 1;			// 出错，程序崩溃


应用
Windows内核漏洞学习-空指针解引用

...]]></description><category></category></item><item><title><![CDATA[[Node.js] 处理 Get&Post 请求]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/118016743</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/118016743</guid><author>Simon798</author><pubDate>Fri, 18 Jun 2021 09:58:16 +0800</pubDate><description><![CDATA[1

]]></description><category></category></item><item><title><![CDATA[[Rootkit] 进程隐藏 - 内存加载（进程寄生）]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117808047</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117808047</guid><author>Simon798</author><pubDate>Fri, 11 Jun 2021 10:37:09 +0800</pubDate><description><![CDATA[众所周知，windows下可执行文件必须符合一定的格式要求，微软官方称之为PE文件（关于PE文件的详细介绍这里就不赘述了，google一下可以找到大把）；用户在界面双击exe时，有个叫做explorer的进程会监测并接受到这个事件，然后根据注册表中的信息取得文件名，再以Explorer.exe这个文件名调用CreateProcess函数去运行用户双击的exe；PC中用户一般都是这样运行exe的，所以很多用户态的exe都是exlporer的子进程，用process hacker截图如下：

那么这个explo]]></description><category></category></item><item><title><![CDATA[[Rootkit] 无痕 hook - 硬件断点]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117791214</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117791214</guid><author>Simon798</author><pubDate>Thu, 10 Jun 2021 20:57:05 +0800</pubDate><description><![CDATA[hook方式有多种，这里做了一个系统性的总结对比，如下：

https://www.cnblogs.com/theseventhson/p/14324562.html  之前这里做了接受消息的hook，用的就是最初级的hook方式: jmp到我们自己的处理逻辑。上面也分析了，这种方式缺点非常明显；最牛逼的神级hook：VT读写分离前面已经介绍过了，今天继续介绍高级的hook方式：硬件断点；
现代软件开发，尤其是大型软件开发，绝对不可能一步到位，开发期间肯定存在各种bug。为了方便找到这些bug，软件上有专门]]></description><category></category></item><item><title><![CDATA[[Rootkit] 进程替换]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117790978</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117790978</guid><author>Simon798</author><pubDate>Thu, 10 Jun 2021 20:39:11 +0800</pubDate><description><![CDATA[本文的进程替换是指将正在运行的程序的内存空间用恶意代码替换掉. 如果被替换的进程是合法的进程, 那么恶意代码可以披着合法的外衣干坏事了. 当然坏事干多了还是会被发现的.
替换的过程如下:

创建一个挂起状态(SUSPEND)的进程, 此时进程的主线程还未开始运行.
读取主线程的上下文(CONTEXT), 并读取新创建进程的基址.
使用NtUnmapViewOfSection将新创建的进程的内存空间释放掉, 随后可以开始填充恶意代码.
设置主线程的上下文, 启动主线程.

一. 我将恶意代码当成资源文件, 所]]></description><category></category></item><item><title><![CDATA[[Rootkit] dll 隐藏 - VAD]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117790931</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117790931</guid><author>Simon798</author><pubDate>Thu, 10 Jun 2021 20:36:00 +0800</pubDate><description><![CDATA[3环下要想隐藏dll，仅仅靠断链和抹去PE头信息是不够的；这样做能骗过同样在3环运行的调试器，但是骗不过在0环通过驱动做检测的PChunter、Process Hacker等工具；要想彻底隐藏，需要更进一步搞定驱动层的各种检测，下面会详细介绍隐藏的细节原理和操作方法！
1、VAD 虚拟内存管理
内存分两种：物理内存和虚拟内存；操作系统和进程共享物理内存，进程独享虚拟内存；物理内存可以通过CR3在进程之间互相隔离，确保进程之间互不侵犯；那么进程内部的虚拟地址该怎么管理了？ 32位下，每个进程独享4GB内存，怎]]></description><category></category></item><item><title><![CDATA[[VT 虚拟化] 资料整合]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117779536</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117779536</guid><author>Simon798</author><pubDate>Thu, 10 Jun 2021 14:57:25 +0800</pubDate><description><![CDATA[请转到以下链接食用 (*￣(oo)￣)
intel：x86架构VT虚拟化(一)：基本概念和流程简介
intel：x86架构VT虚拟化(二)：核心代码入门介绍
intel：x86架构VT虚拟化(三)：x64多核代码介绍
intel：x86架构VT虚拟化(四)：x64 无痕hook/shadow walker/页面读写分离

...]]></description><category></category></item><item><title><![CDATA[[驱动开发] 驱动隐藏 - driveEntry返回失败]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117768965</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117768965</guid><author>Simon798</author><pubDate>Thu, 10 Jun 2021 11:30:13 +0800</pubDate><description><![CDATA[常见隐藏驱动的方式：

驱动模块断链
调用MiProcessLoadEntry删除驱动对象（据说不会触发PG）
清理MmUnloadDriver List 和 PiDDBCacheTable两处
driveEntry返回失败
驱动模块加载后立即卸载

今天介绍一种driveEntry返回失败隐藏驱动的方法 —— DriverEntry返回失败

原理
windows会根据DriverEntry的返回值判断驱动是否加载成功。如果返回成功，会在注册表详细记录，并将sys文件复制到System32/drivers]]></description><category></category></item><item><title><![CDATA[[Node.js] VS2019 开发环境搭建 + Hello World 实例]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117528321</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117528321</guid><author>Simon798</author><pubDate>Thu, 03 Jun 2021 17:04:29 +0800</pubDate><description><![CDATA[安装 VS2019 里的 Node.js 支持：

安装完成后还需要再去官网下载 Node.js （这一点我很无语，它不能内置在里面么）
官网链接：https://nodejs.org/en/
左边是稳定版本，右边是最新版本，我选择了稳定版：

安装过程在此省略，无脑下一步即可，安装完成后需要重启电脑（因为配置了环境变量），重启后 cmd 输入 node 查看是否安装成功：

打开 vs ，创建一个 空白 Node.js 控制台应用程序：

可以选择直接在 vs 里启动，但它原始的代码里没有吸收回车，所以闪]]></description><category></category></item><item><title><![CDATA[[Node.js] 入坑]]></title><link>https://blog.youkuaiyun.com/Simon798/article/details/117521088</link><guid>https://blog.youkuaiyun.com/Simon798/article/details/117521088</guid><author>Simon798</author><pubDate>Thu, 03 Jun 2021 16:45:35 +0800</pubDate><description><![CDATA[什么是 Node.js
官网的解释如下：
Node.js 不是一门语言，也不是一个库或者框架，而是一个 js 的运行时环境，以前 js 只能依附于浏览器执行，有了 Node.js 后，js 可以脱离浏览器执行。并为 js 提供了一些服务器级别操作的 API。
它构建在 Chrome 的 V8 引擎上。

关于框架

Express 是基于 Node.js 平台，快速、开放、极简的 Web 开发框架：https://github.com/expressjs/express
sequelize 用来把面向对象的]]></description><category></category></item></channel></rss>