一、全代码校验、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相关推荐

  1. yxy和志愿者小姐姐番外篇之大宝宝123追番记(补题,淘汰赛)

    1264: yxy和志愿者小姐姐番外篇之大宝宝123追番记 时间限制: 1 Sec  内存限制: 64 MB                                               ...

  2. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  3. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    转载自:https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程:给深度学习入门者的Python快速教程 - 基础篇 给深度学习入门者的Python快速教程 - ...

  4. hg226g 虚拟服务器,华为HG8245H救砖番外篇之利用JTAG完成硬件初始化

    原文发在我的bloghttp://blog.csersoft.net/archives/196 前言 前几天使用UBoot恢复mtd分区时因为误操作导致flash全部被擦除.这下设备上电时连Start ...

  5. 浅析android手游lua脚本的加密与解密(番外篇之反编译的对抗)

    前言   去年在看雪论坛写了一篇<浅析android手游lua脚本的加密与解密>的精华文章,今年写一篇番外篇,将一些lua反编译对抗的内容整合一起,并以3个实例作为说明(包括2018腾讯游 ...

  6. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法

    数学之美番外篇:平凡而又神奇的贝叶斯方法 Tags: 数学, 机器学习与人工智能, 计算机科学 save it69 saved tags: 贝叶斯 math bayesian algorithm 数学 ...

  7. 『中级篇』docker之wordpress容器SSL(番外篇)(78)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之wordpress容器SSL(番外篇)(78) 搞了2天终于搞定了,现在分享给大家. apache2 ...

  8. 『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』docker之虚拟机创建vagrant技巧(番外篇)(81) 之前一直用的原生的centos7的源镜像安装虚拟机,然 ...

  9. 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏

    为什么80%的码农都做不了架构师?>>>    转自:http://blog.csdn.net/pongba/archive/2008/09/21/2958094.aspx 数学之美 ...

最新文章

  1. asp.net core系列 53 IdentityServer4 (IS4)介绍
  2. python实现冒泡排序视频_Python实现冒泡排序算法的完整实例
  3. 实现手机左右滑屏效果
  4. phpexcel导出大量数据合并单元格_php 数据导出到excel 2种带有合并单元格的导出...
  5. DDD理论学习系列(11)-- 工厂
  6. 原创 | 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?
  7. extern 与 #define 使用说明
  8. oracle试图怎么使用,oracle 视图的介绍和使用
  9. windows。forms.timer设置第一次不等待_混凝土密封固化剂个人简易施工方案(不打磨)...
  10. 剑指offer题解 带讲解 python版 第一部分
  11. 傅里叶变换和拉普拉斯变换
  12. 死亡之ping (ping of death)
  13. Ubuntu安装桌面环境以及远程桌面连接
  14. Python少儿编程入门篇(1)基本数据类型
  15. 软件岗位--CTO、技术VP、技术总监、首席架构师
  16. Re: 一个公司如何才能留住员工呢?
  17. hdu4939思维DP
  18. 不管发生什么事,最重要的是拥有乐观积极的心态,困难总会过去的。
  19. SuperMap地图发布
  20. OAuth2.0 里面的 state 参数是干什么的?

热门文章

  1. python3编译器怎么下载_Python编译器及Sublime Text3安装及开发环境配置
  2. Python之pandas:pandas中缺失值与空值处理的简介及常用函数(drop()、dropna()、isna()、isnull()、fillna())函数详解之详细攻略
  3. CV:cv2实现检测几何形状并进行识别、输出周长、面积、颜色、形状类型
  4. 成功解决mxnet.base.MXNetError: C:\Jenkins\workspace\mxnet-tag\mxnet\3rdparty\dmlc-core\src\io\local_file
  5. Keras之CNN:基于Keras利用cv2建立训练存储卷积神经网络模型(2+1)并调用摄像头进行实时人脸识别
  6. TF之DNN:利用DNN【784→500→10】对MNIST手写数字图片识别数据集(TF自带函数下载)预测(98%)+案例理解DNN过程
  7. ARIMA模型详细讲解
  8. Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)【转】...
  9. 408. Valid Word Abbreviation有效的单词缩写
  10. Mathematica数据处理(11)--标签