12

[原创]EasyAnticheat的内存特征算法

 3 years ago
source link: https://bbs.pediy.com/thread-268032.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
[原创]EasyAnticheat的内存特征算法-编程技术-看雪论坛-安全社区|安全招聘|bbs.pediy.com
[系统内核] [原创]EasyAnticheat的内存特征算法
2021-6-10 13:40 3411

anticheat一般都会有内存扫描的操作,来与数据库中的非法程序进行对比。

在进行扫描前,ac会先判断地址是否正确

99882_WYHRZ33XPDPXQWT.jpg

判断是否是用户态的可读地址

99882_RQSRAQW53AC985J.jpg

如果没问题,则进行内存特征的操作

99882_M5DPDWG4TGPNTSN.jpg

根据这个这个表,很容易知道这是hde的反汇编引擎,和crc的哈希99882_RF49J2ATAE9PZ53.jpg

Y283PCRX6N4RNXD.jpg99882_6CUX2WW9S4AZYWK.jpg

具体步骤:

  1. eac先根据获取当前附加进程的架构x86,还是x64

    99882_7Z2W59W53AEZPCP.jpg

  2. 接着开始循环遍历内存块,直到找到特定机器码起始的地址

99882_YNN2U5Y39DQSBVN.jpg

可以看到,x64是寻找sub rsp,xxxx /push rbp或者mov rbp,rsp 。x86则是寻找push ebp /mov ebp,esp

3.如果找不到,则+0x10个字节继续寻找。如果找到了,先计算当前指令的crc(x64 4个字节,x86 3个字节,这里crc的初始值是0),接着开始遍历下面的内存

99882_ZA7REF9J793DKNP.jpg

从上面找到地址来看,判断架构,x先用hde尝试获取指令长度,如果反汇编成功,64则判断是否是否0x48或0x0f开头,则crc 2个字节,否则只crc一个字节。x86同理,直到碰到inst_filter中的opcode为止,输出看一下

99882_Y2UPFNG9VGJYHY2.jpg

碰到这些opcode则结束循环,并把计算的crc保存到全局数组中

99882_A7J559HEKMYEFWK.jpg

下面来仿写这个算法试试,对ntdll的.text段进行提取特征

99882_WS3QW5VDPJJWNUZ.jpg

[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年秋季班火热招生!!

收藏 ・13

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK