(27)TLB番外篇——ShadowWalker
一、全代码校验、CRC检测
很多程序会对自己的代码做CRC检测,当有人修改了代码,就会被CRC检测线程发现。下面我编写一个小程序演示这个操作:
我的代码没有真的用CRC,我只是将函数代码所在的页拷贝了一份,然后用一个线程不停地 memcmp,效果和CRC是类似的。
// GameWithCRC.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include <Windows.h>
#include <time.h>void attack()
{srand(time(0));while (1){int damage = rand() % 1000;printf("attack(%p): 造成了 %4d 点伤害.\n", attack, damage);Sleep(1000);}
}// 代码拷贝
BYTE record[0x1000];// 检测代码是否被修改
DWORD WINAPI CheckModify()
{while (1){if (memcmp(record, attack, 0x1000) != 0){printf("有坏人HOOK了attack函数!!!\n");}Sleep(1000);}return 0;
}int _tmain(int argc, _TCHAR* argv[])
{memcpy(record, (LPVOID)attack, 0x1000);CreateThread(0,0,(LPTHREAD_START_ROUTINE)CheckModify,0,0,0);attack();return 0;
}
当我试图在函数内下断点的时候,就会被校验线程发现:
二、ShadowWalker 简介
这篇博客是中级课程的番外,学习TLB时,老师提到了一种利用TLB机制实现内存隐藏的方式——ShadowWalker。这种技术利用了TLB会缓存线性地址到物理地址映射的特性,当CRC线程检查某段代码时,它使用的线性地址会缓存到TLB的数据页表缓存(Data-TLB)中。而当EIP运行到这段代码时,又会把代码的线性地址缓存到TLB的指令页表缓存(Instruction-TLB)中。这样CPU中就缓存了同一个地址的两份记录,CRC线程从数据页表缓存中读取物理地址,EIP执行流从指令页表缓存中读取物理地址,这两个物理地址是相同的。
ShadowWalker技术的核心就在于修改指令页表缓存中的物理地址,让CRC线程读取原来的代码,而程序真正执行的时候则跳转到其他代码。
这种方式在3环是不稳定的,原因是TLB经常刷新。
(27)TLB番外篇——ShadowWalker相关推荐
- yxy和志愿者小姐姐番外篇之大宝宝123追番记(补题,淘汰赛)
1264: yxy和志愿者小姐姐番外篇之大宝宝123追番记 时间限制: 1 Sec 内存限制: 64 MB ...
- Java微信公众平台开发--番外篇,对GlobalConstants文件的补充
转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...
- 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
转载自:https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程:给深度学习入门者的Python快速教程 - 基础篇 给深度学习入门者的Python快速教程 - ...
- hg226g 虚拟服务器,华为HG8245H救砖番外篇之利用JTAG完成硬件初始化
原文发在我的bloghttp://blog.csersoft.net/archives/196 前言 前几天使用UBoot恢复mtd分区时因为误操作导致flash全部被擦除.这下设备上电时连Start ...
- 浅析android手游lua脚本的加密与解密(番外篇之反编译的对抗)
前言 去年在看雪论坛写了一篇<浅析android手游lua脚本的加密与解密>的精华文章,今年写一篇番外篇,将一些lua反编译对抗的内容整合一起,并以3个实例作为说明(包括2018腾讯游 ...
- [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法
数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...
- 『中级篇』docker之wordpress容器SSL(番外篇)(78)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之wordpress容器SSL(番外篇)(78) 搞了2天终于搞定了,现在分享给大家. apache2 ...
- 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81) 之前一直用的原生的centos7的源镜像安装虚拟机,然 ...
- 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏
为什么80%的码农都做不了架构师?>>> 转自:http://blog.csdn.net/pongba/archive/2008/09/21/2958094.aspx 数学之美 ...
最新文章
- asp.net core系列 53 IdentityServer4 (IS4)介绍
- python实现冒泡排序视频_Python实现冒泡排序算法的完整实例
- 实现手机左右滑屏效果
- phpexcel导出大量数据合并单元格_php 数据导出到excel 2种带有合并单元格的导出...
- DDD理论学习系列(11)-- 工厂
- 原创 | 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?
- extern 与 #define 使用说明
- oracle试图怎么使用,oracle 视图的介绍和使用
- windows。forms.timer设置第一次不等待_混凝土密封固化剂个人简易施工方案(不打磨)...
- 剑指offer题解 带讲解 python版 第一部分
- 傅里叶变换和拉普拉斯变换
- 死亡之ping (ping of death)
- Ubuntu安装桌面环境以及远程桌面连接
- Python少儿编程入门篇(1)基本数据类型
- 软件岗位--CTO、技术VP、技术总监、首席架构师
- Re: 一个公司如何才能留住员工呢?
- hdu4939思维DP
- 不管发生什么事,最重要的是拥有乐观积极的心态,困难总会过去的。
- SuperMap地图发布
- OAuth2.0 里面的 state 参数是干什么的?
热门文章
- python3编译器怎么下载_Python编译器及Sublime Text3安装及开发环境配置
- Python之pandas:pandas中缺失值与空值处理的简介及常用函数(drop()、dropna()、isna()、isnull()、fillna())函数详解之详细攻略
- CV:cv2实现检测几何形状并进行识别、输出周长、面积、颜色、形状类型
- 成功解决mxnet.base.MXNetError: C:\Jenkins\workspace\mxnet-tag\mxnet\3rdparty\dmlc-core\src\io\local_file
- Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别
- TF之DNN:利用DNN【784→500→10】对MNIST手写数字图片识别数据集(TF自带函数下载)预测(98%)+案例理解DNN过程
- ARIMA模型详细讲解
- Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...
- 408. Valid Word Abbreviation有效的单词缩写
- Mathematica数据处理(11)--标签