非矩阵方法画线
非矩阵画线先说好,因为是是通过数学大致推出坐标,大致画线,所以实际上并不准确,但是作为新手学习下原理也是不错的
代码已经能跑了,当然不是很完美,但是简单定位是没问题了,但是因为精度实在太差……..我去学矩阵了😂
Dll入口函数首先在Dll入口函数创建线程,Sleep看自己电脑是否受得了
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748// dllmain.cpp : 定义 DLL 应用程序的入口点。#include "pch.h"#include "周围对象.h"#include "绘制.h"DWORD WINAPI ThreadFunc(LPVOID lpParam){ HWND hwnd = FindWindowA(NULL, "Counter-Strike"); 绘制 FPS绘制(hwnd); while (TRUE) { ...
CE指针扫描操作
昨天朋友发来一个三国小游戏,让我找金币的基地址
本以为会一帆风顺,结果还是花了好长时间,才找到一个地址,改动会使得金币变化
费劲千辛万苦,终于找到了这个地址,但是很遗憾,这玩意是黑色的,也就是说明这个地址是会变动的,属于堆栈地址。很明显,这个就要去找指针。
凭借我三脚猫的功夫,之前在CE教程学的,我觉得徒手找
首先我去查找是啥玩意改变了这个地址
成功找到这三个值,点进去发现,它们改的地址都是
于是我非常自信的去搜索是哪一块内存存了这个0x351F15C
扫出来有俩,然后再分别去找究竟是什么地址访问了这个地址
果然出了意外,击杀完怪物,迟迟等不到有地址访问
后来我仔细琢磨了一下,很有可能是因为(举个例子)
1234mov [edi+0x55],ecxadd edi,0x55mov [edi],ecx
这玩意,导致我搜索访问不到
所以这回我们就要启用CE的一个强大功能,就是
点开后,点击显示高级选项,我觉得为了防止有些游戏偏移不对齐,所以我选择把 地址必须是32位(4字节)对齐取消掉,以免有些地址找不到,然后最大级别改为8(也是为了防止极端情况吧),小游戏应该够了
然后 ...
Cs1.6找基地址
找基地址最近在搞FPS的外挂研究,拿CS1.6学的,不得不说,像是一个新的领域,学得确实让我感到心力交瘁,就例如这次的找基地址,让人难受
又干到凌晨了,我真服了,记录下找基地址的辛酸泪,以免忘掉
找自身坐标这个算是比较好找的了,分为X,Y,Z坐标,最快的方法就是去找Z坐标,因为这个比较好控制变大,变小,所以很容易就能找到
不断筛选,筛了个大概,然后一般是选择绿色的,因为绿色的是相对固定的,不是堆栈空间
把它们添加到下栏里边
点击数值可以进行排序
剩下的就是瞅着顺眼的数值就整体用来半分法,一直找到修改后人物会飞天的效果(记得要锁定)
要让人物产生飞天的效果应该只有自己可以,不能让对面玩家飞起来,因为在真实环境下,对面人物的坐标都在服务器上,就算改了,也只是在你的本地视觉上稍微飞天了(超级快就被服务器修正了),所以我们能实现飞天的只有自己(有时候服务器还会修正,看游戏本身吧)
最终追到了俩基地址,貌似改哪个都行,都能产生飞天的效果(貌似还不止两个….)
浏览周围的数据,还能找到自身人物的X,Y坐标.随便记录下
12345自身X坐标:hw.dll+10F7F60-8自身Y坐标:hw. ...
Windows内核(13)——TSS任务段和中断门初探
Windows参考文章: Linux 学习笔记(九):基于 TSS 的进程切换-CSDN博客
任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符_tss段描述符-CSDN博客
保护模式第六讲-IDT表-中断门 陷阱门 任务门 - iBinary - 博客园 (cnblogs.com)
上一节的通过Cr3任意读写如何防?
如何在自己运行的时候cr3是正确的,但是别的进程拿的时候是错误的?
中断/系统调用钩子
在操作系统级别拦截系统调用或中断处理程序,并在适当的时候修改 CR3。通过这种方式,可以在当前进程执行时使用正确的 CR3,而在其他进程尝试获取 CR3 时返回伪造的值。
实现步骤:
钩住所有对 CR3 的访问,包括直接读取寄存器、查询系统状态等。
当检测到当前进程访问时,返回正确的 CR3;否则,返回伪造的 CR3。
特权指令拦截
在具有硬件虚拟化技术(如 Intel VT-x、AMD-V)的环境中,可以通过设置控制寄存器的访问权限,使用虚拟化技术拦截对 CR3 的访问。
实现步骤:
使用虚拟化技术将自己运行在虚拟机内,虚拟机管理 ...
Windows内核(12)——通过CR3修改进程内存
Windows修改对方进程内存步骤1.获取对方进程的页目录表
2.让自己程序的Cr3=对方进程的页目录表
3.然后执行自己程序,访问对方进程的内存地址,就可以对对方的内存进行操作
4.再还原成自己程序的Cr3
以上步骤有几个值得思考的问题问题11.为什么把自己进程的Cr3修改为对方进程的页目录表还是可以执行自己的代码?自己的虚拟地址按照cr3进行查表,查出来的物理地址不会变吗??
这是有要求的,自己的程序必须是驱动,这样才能运行在系统的高两G。而高两G是享有一样的页表的,才能保证在进程间共享
问题22.CPU在切换线程的时候,CR3会改变,那咋整
有时候我们写的驱动程序不一定只有一个线程,那么假设我们有两个线程,一个线程去执行将自己的cr3修改为一个三环进程的cr3,当修改成功后,好巧不巧,cpu将进程切换了,正巧切换成自己程序的另一个线程,那么cr3可能就会被改回原来的cr3,此时线程继续执行,因为cr3已经不是对方进程的了,因此访问对方进程就会崩溃,系统蓝屏。
那如何解决这个问题?
提升IRQL?别以为稳了,因为如果碰巧要访问的地址是分页内存,被交换到了硬盘上,那就直接 ...
Windows内核(11)——分页机制(2-9-9-12)
Windows分页机制 2-9-9-12名词解释:PTE(Page Table Entry):页表项
PTE是页表中的一个条目,用于存储一个页面的物理地址和一些控制信息,比如页面是否有效、是否可读写等。通过页表,可以将虚拟地址转换为物理地址。
PDE(Page Directory Entry):页目录项
PDE是页目录中的一个条目,用于指向一个页表。每个PDE包含指向页表的物理地址和控制信息。页目录本身是一个包含多个PDE的表,用于管理多个页表。
PTT(Page Table):页表
页表是一个结构,包含多个PTE。每个PTE指向一个物理页的地址。页表用于虚拟地址到物理地址的转换。在分层页表结构中,一个页表对应一个页目录项。
PDI(Page Directory Index):页目录索引
PDI是虚拟地址的一部分,用于索引页目录中的某个PDE。通过PDI,操作系统可以找到页目录中对应的PDE,从而找到指向的页表。
页目录索引(PDI, Page Directory Index):用于查找页目录中的某个页目录项(PDE)。
页表索引(PTI, Page Table Ind ...
Windows内核(10)——分页机制(10-10-12)
Windows分页机制(10-10-12)参考文章:https://github.com/0voice/kernel_memory_management/blob/main/%E2%9C%8D%20%E6%96%87%E7%AB%A0/%E4%B8%80%E6%96%87%E5%B8%A6%E4%BD%A0%E4%BA%86%E8%A7%A3%EF%BC%8C%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98%E3%80%81%E5%86%85%E5%AD%98%E5%88%86%E9%A1%B5%E3%80%81%E5%88%86%E6%AE%B5%E3%80%81%E6%AE%B5%E9%A1%B5%E5%BC%8F%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86.md
为什么要用分页机制?因为分段机制效率低,是为了解决分段粒度大,因为段需要整段的加载进内存以及整段换出,造成内存碎片大,不易于管理,虽然可以通过将段置换出磁盘再加载的方式减少碎片,但是效率实在太低
分页管理通过划分物理空间为一块块固定大小的页与之对应,能够将程序分割成一页 ...
IDA位段的应用
IDA位段设置位段我们创建这个位段,以下是代码:
12345678910struct{ uint8_t isCatch : 1; // 1 if this represents a catch funclet, 0 otherwise uint8_t isSeparated : 1; // 1 if this function has separated code segments, 0 otherwise uint8_t BBT : 1; // Flags set by Basic Block Transformations uint8_t UnwindMap : 1; // Existence of Unwind Map RVA uint8_t TryBlockMap : 1; // Existence of Try Block Map RVA uint8_t EHs ...
Windows内核(9)——保护模式下的内存管理(分段机制)
Windows保护模式下的内存管理:注:主要参考来自 内核第二讲,内存保护的实现,以及知识简介,局部描述符,全局描述符. - iBinary - 博客园 (cnblogs.com)
Win32汇编–Windows 的内存管理机制 - 木屐 - 博客园 (cnblogs.com) (来源小甲鱼)
80386指的是32位系统
三种模式实模式: 指的是操作系统在启动的时候,这时候访问的内存都是实际的物理内存.也就是在这个时机,系统会在实模式下填写全局描述符表 GDT
保护模式: 当各种表填写好了,那么我们的内存也被保护了.这个是否我们的进程就不会直接访问物理地址了.进而产生了保护行为,我们的内存就有了 可读 可写,可执行一说了.
虚拟86模式: 操作系统启动的是否,运行的都是实际的16位汇编.那么现在我们假设有一个16位程序要启动.那么修改了我们物理地址的内存,那么保护模式不就没用了.所以为了防止这一情况的产生,操作系统做了一个虚拟86模式,也就是说可以运行16位汇编程序.
保护模式如何保护内存操作系统启动的会从实模式启动,然后会切换到保护模式,此时操作系统会通过做表,然后通过查表, ...
Windows内核(8)——多线程&内核
Windows多线程创建&同步创建线程 PsCreateSystemThread 是一个用于创建内核模式线程的函数。
123456789NTSTATUS PsCreateSystemThread( OUT PHANDLE ThreadHandle, IN ULONG DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ProcessHandle OPTIONAL, OUT PCLIENT_ID ClientId OPTIONAL, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext);
**ThreadHandle (OUT PHANDLE)**:
类型:输出参数,指向一个句柄变量。
描述:当线程创建成功时,此参数将返回线程的句柄。你可以使用此句柄来操作线程,例如关闭线程句柄或获取线程状态。
**DesiredAccess (IN ULONG)**:
类型:输入参数。
描述: ...