自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LYSM

[LYing SiMon] tells the lies that he [Loves You So Much]

  • 博客(352)
  • 收藏
  • 关注

原创 [C++] 异或加密

std::string Encrypt(std::string content, std::string secretKey){ for (int i = 0; i < content.length(); i++) { content[i] ^= secretKey[i % secretKey.length()]; } return content;}std::string Decrypt(std::string data, std::str.

2021-07-29 15:13:41 449

原创 [C#] 异或加密

private char[] Encrypt(string content, string secretKey){ char[] data = content.ToCharArray(); char[] key = secretKey.ToCharArray(); for (int i = 0; i < data.Length; i++) { data[i] ^= key[i % key.Length]; } return ...

2021-07-29 14:18:23 395

原创 [Rootkit] 驱动隐藏 - 断链

注意 : 此方法会触发 PG代码参考 1typedef 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

2021-07-12 20:28:49 476

转载 [检测&过检测] 重写 ReadProcessMemory 、WriteProcessMemory

一、本文大纲系统调用的两种方式:中断门和快速调用_KUSER_SHARED_DATA 结构使用 cpuid 指令判断当前CPU是否支持快速调用3环进0环需要更改的4个寄存器以 ReadProcessMemory 为例说明系统调用全过程重写 ReadProcessMemory 和 WriteProcessMemoryint 0x2e 和 sysenter 都做了什么工作?二、中断门和快速调用以我的理解,系统调用,即从调用操作系统提供的3环API开始,到进0环,再到返回结果到3环的全过程

2021-07-12 19:42:11 2300

原创 [C#] 处理 Json

环境搭建点击 NuGet 程序包安装 Newtonsoft.Json添加 using :using Newtonsoft.Json;写 JsonStringWriter sw = new StringWriter();JsonWriter writer = new JsonTextWriter(sw);writer.WriteStartObject();writer.WritePropertyName("password");writer.WriteValue(textBoxT

2021-07-11 23:11:42 146

原创 [C#] 发送 http 请求

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

2021-07-07 11:28:16 459

原创 [C++功能函数] 判断文件&目录是否存在

代码/* 需要引入头文件 #include <io.h> 存在返回 true ,不存在返回 false*/BOOL isFileOrDirExist(PCHAR name){ return _access(name, 0) == 0 ? TRUE : FALSE;}

2021-07-05 14:50:53 221

原创 [Node.js] rsa&aes 加密解密

代码'use strict';const express = require('express')const bodyParser = require('body-parser')var crypto = require('crypto');var NodeRSA = require('node-rsa');// 创建服务器const app = express()// 初始化 bodyParserapp.use(bodyParser.urlencoded({ extend: fal

2021-07-04 22:46:27 364

原创 [Node.js] mongodb 增删查改

代码mydb.js (用来定义表结构、连接数据库)const mongoose = require('mongoose')// 连接数据库 :mongo_testmongoose.connect('mongodb://localhost:27017/mongo_test', { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })// 定义 User 表字段const User = mongoose.

2021-06-25 10:07:48 153

原创 [Node.Js] express 处理 get&post 请求

代码'use strict';const express = require('express')const bodyParser = require('body-parser')// 创建服务器const app = express()// 初始化 bodyParserapp.use(bodyParser.urlencoded({ extend: false }));app.use(bodyParser.json());// 处理主页 get 请求app.get('/', (

2021-06-24 10:48:37 126

原创 [漏洞] 空指针解引用

原理c语言空指针的值为 NULL,一般 NULL指针指向进程的最小地址 0 。视图通过空指针对数据进行访问,会导致运行时错误。 当程序试图解引用一个期望非空但实际为空的指针时,会发生空指针解引用错误,大部分情况下会导致程序崩溃。实例int* p = NULL;*p = 1; // 出错,程序崩溃应用Windows内核漏洞学习-空指针解引用...

2021-06-23 15:08:58 769

原创 [Node.js] 处理 Get&Post 请求

1

2021-06-18 09:58:16 140

转载 [Rootkit] 进程隐藏 - 内存加载(进程寄生)

众所周知,windows下可执行文件必须符合一定的格式要求,微软官方称之为PE文件(关于PE文件的详细介绍这里就不赘述了,google一下可以找到大把);用户在界面双击exe时,有个叫做explorer的进程会监测并接受到这个事件,然后根据注册表中的信息取得文件名,再以Explorer.exe这个文件名调用CreateProcess函数去运行用户双击的exe;PC中用户一般都是这样运行exe的,所以很多用户态的exe都是exlporer的子进程,用process hacker截图如下:那么这个explo

2021-06-11 10:37:09 1506 1

转载 [Rootkit] 无痕 hook - 硬件断点

hook方式有多种,这里做了一个系统性的总结对比,如下:https://www.cnblogs.com/theseventhson/p/14324562.html 之前这里做了接受消息的hook,用的就是最初级的hook方式: jmp到我们自己的处理逻辑。上面也分析了,这种方式缺点非常明显;最牛逼的神级hook:VT读写分离前面已经介绍过了,今天继续介绍高级的hook方式:硬件断点;现代软件开发,尤其是大型软件开发,绝对不可能一步到位,开发期间肯定存在各种bug。为了方便找到这些bug,软件上有专门

2021-06-10 20:57:05 3331

转载 [Rootkit] 进程替换

本文的进程替换是指将正在运行的程序的内存空间用恶意代码替换掉. 如果被替换的进程是合法的进程, 那么恶意代码可以披着合法的外衣干坏事了. 当然坏事干多了还是会被发现的.替换的过程如下:创建一个挂起状态(SUSPEND)的进程, 此时进程的主线程还未开始运行.读取主线程的上下文(CONTEXT), 并读取新创建进程的基址.使用NtUnmapViewOfSection将新创建的进程的内存空间释放掉, 随后可以开始填充恶意代码.设置主线程的上下文, 启动主线程.一. 我将恶意代码当成资源文件, 所

2021-06-10 20:39:11 219

转载 [Rootkit] dll 隐藏 - VAD

3环下要想隐藏dll,仅仅靠断链和抹去PE头信息是不够的;这样做能骗过同样在3环运行的调试器,但是骗不过在0环通过驱动做检测的PChunter、Process Hacker等工具;要想彻底隐藏,需要更进一步搞定驱动层的各种检测,下面会详细介绍隐藏的细节原理和操作方法!1、VAD 虚拟内存管理内存分两种:物理内存和虚拟内存;操作系统和进程共享物理内存,进程独享虚拟内存;物理内存可以通过CR3在进程之间互相隔离,确保进程之间互不侵犯;那么进程内部的虚拟地址该怎么管理了? 32位下,每个进程独享4GB内存,怎

2021-06-10 20:36:00 2020 3

原创 [VT 虚拟化] 资料整合

请转到以下链接食用 (* ̄(oo) ̄)intel:x86架构VT虚拟化(一):基本概念和流程简介intel:x86架构VT虚拟化(二):核心代码入门介绍intel:x86架构VT虚拟化(三):x64多核代码介绍intel:x86架构VT虚拟化(四):x64 无痕hook/shadow walker/页面读写分离...

2021-06-10 14:57:25 545

转载 [驱动开发] 驱动隐藏 - driveEntry返回失败

常见隐藏驱动的方式:驱动模块断链调用MiProcessLoadEntry删除驱动对象(据说不会触发PG)清理MmUnloadDriver List 和 PiDDBCacheTable两处driveEntry返回失败驱动模块加载后立即卸载今天介绍一种driveEntry返回失败隐藏驱动的方法 —— DriverEntry返回失败原理windows会根据DriverEntry的返回值判断驱动是否加载成功。如果返回成功,会在注册表详细记录,并将sys文件复制到System32/drivers

2021-06-10 11:30:13 1477 1

原创 [Node.js] VS2019 开发环境搭建 + Hello World 实例

安装 VS2019 里的 Node.js 支持:安装完成后还需要再去官网下载 Node.js (这一点我很无语,它不能内置在里面么)官网链接:https://nodejs.org/en/左边是稳定版本,右边是最新版本,我选择了稳定版:安装过程在此省略,无脑下一步即可,安装完成后需要重启电脑(因为配置了环境变量),重启后 cmd 输入 node 查看是否安装成功:打开 vs ,创建一个 空白 Node.js 控制台应用程序:可以选择直接在 vs 里启动,但它原始的代码里没有吸收回车,所以闪

2021-06-03 17:04:29 1734

原创 [Node.js] 入坑

什么是 Node.js官网的解释如下:Node.js 不是一门语言,也不是一个库或者框架,而是一个 js 的运行时环境,以前 js 只能依附于浏览器执行,有了 Node.js 后,js 可以脱离浏览器执行。并为 js 提供了一些服务器级别操作的 API。它构建在 Chrome 的 V8 引擎上。关于框架Express 是基于 Node.js 平台,快速、开放、极简的 Web 开发框架:https://github.com/expressjs/expresssequelize 用来把面向对象的

2021-06-03 16:45:35 121

原创 [C#] 代码混淆和加壳

目的对比不同的主流保护工具,针对 dnSpy 反编译出的效果。非混淆代码:using System;using System.ComponentModel;using System.Drawing;using System.Windows.Forms;namespace test_winform{ // Token: 0x02000002 RID: 2 public class Form1 : Form { // Token: 0x06000001 RID: 1 RVA: 0x0

2021-05-26 19:00:34 9393 3

原创 [C#] 使用 dnSpy 反编译

介绍dnSpy是一款针对.NET程序的逆向工程工具 , 可以使用它反编译.NET代码。git 链接:https://github.com/dnspy/dnspy效果为了测试简单写了一个窗体程序,代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using Syste

2021-05-25 16:13:49 3115

原创 [DuiLib] 入坑资料收集

原生 DuiLib:https://github.com/duilib/duilib网易 DuiLib:https://github.com/netease-im/NIM_Duilib_Framework腾讯 DuiLib :https://github.com/tencentyun/TIMSDK/tree/master/cross-platform/Windows/IMApp/Basic/duilib?tdsourcetag=s_pcqq_aiomsgDuiLib 旗舰版:https://githu

2021-05-23 20:30:19 417

转载 char*, wchar_t* 替换子串

char* replace_a(char*s1,char*s2,char*s3=NULL){ char *p,*from,*to,*begin=s1; int c1,c2,c3,c; //串长度及计数 c2=strlen(s2); c3=(s3!=NULL)?strlen(s3):0; if(c2==0)return s1; //注意要退出 while(true) //替换所有出现的串 { .

2021-05-10 16:49:52 438

原创 [C#] 创建自定义控件

首先创建两个项目,一个是控件库,另一个是窗体程序,记住这两个项目都要选 .net framework 而不是 .net core ,否则导入控件的时候会有很多问题(大概意思就是导入了但是不能用,工具箱里看不到),关于这两者的区别参考这里:https://www.cnblogs.com/huchaoheng/p/6295688.html111 是窗体应用程序,222 是窗体控件库:如果想要给自己的控件改名,需要对 UserControl1.cs 重命名(或删除重建)。编译 222 项目,之后打开

2021-05-09 13:57:48 451

原创 [C# WinForm] 窗体美化

前两天想用 mfc 写一个自绘的窗体,折腾了两天把我劝退了,原因是 mfc 对控件透明以及除 bmp 以外的图片支持的很不友好,做出的效果差强人意。 总而言之,我今后再也不用 mfc 搞美化了 , 艹 ????设置无边框(1)设置窗体的 FormBorderStyle 为 None。(2)添加事件,MouseDown、MouseMove、MouseUp ,并分别写入如下代码(目的是让窗口可被拖动) private void Form1_MouseDown(object sender, Mous

2021-04-25 18:55:48 1519

原创 [MFC] 手动美化 MFC 窗体

去除边框1.把窗口边框改成无边框:但只这样做会导致无法拖动窗口。2.在类向导中添加这个消息:OnHcHitTest3.修改这个消息处理函数的返回值为:HTCAPTION添加背景图片1.准备一张 bmp 格式的图片(其他格式我没有实验,可能会有问题),在项目中添加资源,选择 BitMap ,导入:2.在 OnPaint() 函数中添加如下代码:// 上面还有一部分代码,是 vs 自动生成的else { //CDialogEx::OnPaint(); // 这是原本的,注

2021-04-18 23:58:05 5705 3

原创 [Rootkit] 修改 peb 隐藏 dll(断链)

原理PEB 中有一个成员 Ldr:typedef struct _PEB{ UCHAR InheritedAddressSpace; UCHAR ReadImageFileExecOptions; UCHAR BeingDebugged; UCHAR BitField; ULONG ImageUsesLargePages: 1; ULONG IsProtectedProcess: 1; ULONG IsLegacyProcess:

2021-04-16 23:58:11 716

原创 [反调试&进程保护] 使用 hook 的方式保护自身进程

以下 HOOK 需要 全局:函数名作用Hook 后NtOpenThread创建内核线程防止调试器在内部创建线程NtOpenProcess打开进程防止OD等调试工具在调试列表中看到kiAttachProcess附加调试进程防止被附加NtReadVirtualMemory读取虚拟内存防止自己进程被读内存(ReadProcessMemory)NtWriteVirtualMemory写内存防止内存被写KdReceivePacketKDCOM

2021-04-16 17:46:51 1028

原创 [反调试 r0] KdDisableDebugger

原理这是微软提供的一个 api , KdDisableDebugger 例程禁用内核调试器。NTSTATUS KdDisableDebugger();应用直接调用这个 api 可以让 windbg 与被调试机器脱离,对抗的方法就是 hook 这个 api ,在开头返回 STATUS_SUCCESS 。...

2021-04-16 17:37:45 591

原创 [反调试 r0] DebugPort 端口清零

原理debugport 是在 EPROCESS 结构中的.调试时间会通过 DebugPor t端口将调试事件发送给 ring3 进行调试的.如果设置为0.则 ring3 就无法进行调试了。这是我随便找的一个系统下的 _eprocess 结构kd> !strct eprocess!strct eprocessstruct _EPROCESS (sizeof=648)+000 struct _KPROCESS Pcb+000 struct _DISPATCHER_HEADER Header

2021-04-16 17:18:09 885

原创 [Windbg]断点

指令功能bl列出系统中已经有的断点bc清除断点例如: bc 1 -10 删除1 -10的断点. bc*清除全部bd禁用断点be激活断点bp [address][模块名字][偏移]下断点 bp xxModule!DisPatchRead + 0x30bu module!fun模块名加函数下断点.bm module!fun*支持通配符下断点ba [w len] [r len] [e len] address下内存(读、写、执行)断点...

2021-04-15 20:35:04 207

转载 [Windows 驱动开发] 获取时间

开机时间void MyGetTickCount(PULONG msec) //进行传出{ LARGE_INTEGER la; ULONG MyInc; MyInc = KeQueryTimeIncrement(); //返回滴答数 //下方 KeQueryTickCount 的宏的原型. KeQueryTickCount(&la); la.QuadPart *= MyInc; la.QuadPart /= 10000;

2021-04-15 20:00:57 671

转载 [Windows 驱动开发] 清内存强杀进程

原理Attach 到进程进行内存清零.这里提供了两种方法.原理是一样KeAttachProcess方法 与 KeStackAttachProcess方法. 其中第一种属于旧方法了.根据MSDN所说API已经升级为了KeStackAttachProcess#include <ntifs.h>NTKERNELAPI UCHAR* PsGetProcessImageFileName(IN PEPROCESS Process); //未公开的进行导出即可NTKERNELAPI VOID

2021-04-15 11:54:35 1112 1

转载 [Windows 驱动开发] 获取驱动详细信息

驱动对象在内核中. 每一个驱动模块都是一个驱动对象. 都有一个 DRIVER_OBJECT结构体代表。驱动对象结构如下:typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; // // The following links all of the devices created by a single driver // together on a list, and the Flags word

2021-04-15 11:43:45 689

转载 [Windows 驱动开发] 使用 verifier 测试驱动 bug

同时按win + R调出窗口,在窗口中输入cmd,打开cmd命令窗口,并输入verifier,敲击回车。在进入了verifier界面后,我们选择第二个单选框,并点击下一步。勾选除了除“随机低资源模拟”其他全部的测试类型。点击下一步。我们选择最后一个单选框,点击下一步。因为微软自己的驱动程序很少出现问题,所以为了节省时间,大家可以只勾选由<未知>提供程序的驱动程序来进行验证。当然全选也是没有问题的。在点击完成后,会提示必须重新启动电脑后,才能生效,这是自己手动重新启动就可以了。在

2021-04-15 11:32:35 583

原创 [Windows 驱动开发] 驱动中获取函数地址

跟ring3 GetProcAddress相似.PVOID MmGetSystemRoutineAddress( PUNICODE_STRING SystemRoutineName);驱动程序可以使用这个例程来确定一个例程在特定版本的Windows上是否可用。它只能用于内核或HAL导出的例程,不能用于任何驱动程序定义的例程。...

2021-04-15 11:18:09 825

原创 [Windows 驱动开发] 驱动判断地址是否有效

R0 层BOOLEAN MmIsAddressValid( PVOID VirtualAddress);即使 MmIsAddressValid 返回 TRUE,访问地址也可能导致页错误,除非内存已锁定或地址是有效的非分页池地址。

2021-04-15 10:23:44 804

转载 [windows 驱动开发] 不触发 PG 的 Object Protect

首先,最高效的应该是这种办法,但是最不稳定的也是这种办法。 虽然不会触发 PG ,但是由于调用方太多了,所以动不动炸进程或者蓝屏。进程对象(EPORCESS)->PsProcessType线程对象(PETHREAD)->PsThreadType文件对象(FileObject)->IoFileObjectType…具体流程不分析大概是这样,创建对象->Ob插入对象->系统访问(对象,这些对象是分配出来的不归PG管理)->根据对象Index->寻找对应Ob回调

2021-04-13 09:55:13 1027

转载 [windows 驱动开发] r0 枚举进程

#include "ntddk.h"typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, // 0 SystemProcessorInformation, // 1 SystemPerformanceInformation, // 2 SystemTimeOfDayInformation,

2021-04-12 20:27:26 546

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除