CE了解

admin 2025年2月11日00:39:23评论11 views字数 4360阅读14分32秒阅读模式

ce了解

基础

应用层->微信,qq

驱动层->系统内核(驱动程序)

硬件层->内存,键盘,硬盘

个人理解

ce一般就是改内存值的,多用于游戏,现在客户端什么的,有时候也会用用

入门部分其实就是它自带的教程和游戏

主要是地址扫描值的修改

进阶一点就是,基址查找代码注入等、过驱动过检测。。。

这个都是之前的笔记了,知识点整理来自:https://space.bilibili.com/157504840

练手

首先写一个简单的c或cpp代码

#include<iostream>int num=2500;intmain(){while(1)    {        std::cout<<"Now the num is:---> "<<num;system("PAUSE");        num=num-10;    }}运行后:Now the num is:---> 2500请按任意键继续. . . Now the num is:---> 2490请按任意键继续. . . Now the num is:---> 2480请按任意键继续. . . Now the num is:---> 2470请按任意键继续. . . Now the num is:---> 2460请按任意键继续. . . 

那么用ce捕捉这个值,比如2490,因为没任何加密,可以轻松捕获,那么双击后修改该值为9999999

Now the num is:---> 2500请按任意键继续. . .Now the num is:---> 2490请按任意键继续. . .Now the num is:---> 2480请按任意键继续. . .Now the num is:---> 9999989请按任意键继续. . .

找到数据有什么用,该到对应代码(右键->找出是谁改写了这个->再运行程序->查看反汇编)得到

1.exe+15F8 - 83 E8 0A              - sub eax,0A { 10 }把这个sub改成addNow the num is:---> 9999989请按任意键继续. . .Now the num is:---> 9999999请按任意键继续. . .Now the num is:---> 10000009请按任意键继续. . .Now the num is:---> 10000019请按任意键继续. . .

这只是一个基本操作,如果防御方加密怎么搞,一般都会自己自定义一个数据类型

因为对于int来讲,比如65535,四字节,那它就是ffff,在内存里会是 ffff0000, 是连续的值,如果想保护,那就在内存随机放置,这样在ce直接搜65535是搜不到的

动态分配内存,读取的时候再组合过来即可

这里有个缺陷就是,如果它存取的数值刚好是255或者以下呢?

也就是 ff000000往小的值搜,不就可以直接搜到了

一样,那就可以去看代码了

当然,防御的话,异或一个随机值,那ce就找不到了

hook

钩子函数,一般代码都是按流程顺序执行,hook就是劫持这个流程,更改执行顺序

原流程:早起->上班->吃饭->下班->睡觉

hook完后:早起->下班->睡觉

用于跳过某个步骤,系统的驱动层也是这样的机制

情况1

再看一个流程

B攻击A->A扣血->判断A的血量>0,否则A死亡

这里的hook是使得B攻击A->判断A的血量>0,直接跳过扣血阶段

sub [edi+10],edi上行改为nop

情况2

但是有时候由于源代码缘故,比如两种角色可互相伤害,使用的是函数封装,方法调用

也就是说,主角A和敌人B都用同一种方法,这样ce一跳过的话(也就是使得关键代码为nop)A和B都变成一种假性无敌了

那么如何只使得A无敌,而B不无敌,主要依靠this指针(仅本例而言)

这样的话,要找到代表A的语句,cmp判断一下,是A,那就使得得到的伤害为0,比如:

cmp esi,4cef08 (是A)jmp 90000axor edi,edi (伤害为0)

但是有时候,由于指令太长写不了,那就要进行一个大范围hook

也即跳转到一个新的内存去完成一些指令->完成后再回去

将上面代码在新内存写入

900000 cmp esi,4cef08 (是A)900006 jmp 90000a900008 xor edi,edi (伤害为0)4321f4 sub [edi+10],edi -> jmp 9000004321f7 test....

还要完成代码的恢复,保证正常代码执行

90000a sub [edi+10],edi90000d mov eax,[esi+10]900010 jmp 4321f7

C改写汇编

如果从C语言的角度如何更改代码也很简单,把上面汇编语言对应的字节码获取到后,写到一个数组里,即硬写二进制

主要是jmp跳转地址那一块需要计算

调用内核去打开进程HANDLE hGame=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid)if (hGame){    分配内存呗    LPVOID CodeA=VirualAllocEx(hGame,NULL,0x1000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);if (CodeA){        主要是计算地址(利用基址和偏移),找到了就写进内存去        再实现最后一次的跳转    }}

我这只针对我开始的简单cpp进行一个hook

好像是直接写

#include<iostream>#include<windows.h>intmain(void){unsignedchar Code[]={0x83,0xc0,0x0a,0x00,0x00};//后面随便添加了两个unsigned Pid;printf("输入程序进程:rn");scanf("%d",&Pid);    HANDLE hGame=OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);if(hGame){//对目标地址写入数组的内容       BOOL Bret=WriteProcessMemory(hGame,(LPVOID)0x4015F8,Code,sizeof(Code)-2,NULL);if (Bret){printf("写入成功!");       }elseprintf("写入失败!");    }elseprintf("打开进程失败!");return1;}

反正是写入成功了,我看ce上对应的语句也改为了add

hook防御对抗

crc32

(就是计算出一个特征值,查看该特征是否变化)

原理:

因为它需要读取一个内存地址,从041fd40检测到041ff40这样一个范围,检测区域的任何一个代码改变都会被检测到

这里牵扯到内存地址的变化嘛,因为没hook之前是连续的地址,hook后(有内存跳转,跳到新内存地址再回来),这就会被检测到

绕过:

hook嵌套,hook检测crc32?

这里的思路时,既然它检测我的代码变动情况,那我就不变了

无痕hook

改字节码只是一种最基本的方式

改虚函数的表、导入表、导出表、操作系统本身异常机制

hash碰撞、md5

注入

例子1:

对没有源代码的程序进行二次开发

如果将我的内存插入到这个游戏的内存,内存合二为一,功能不就结合了

经典例子:

我家有电脑,你家也有电脑,我想玩你的电脑,那就是去你家

这个就是所谓,木马,病毒、外挂的本质

动态链接库,即DLL,因为一个人不可能包揽所有开发过程,所以需要模块化,各自分工,一个程序除了本身运行,也会加载模块化的DLL,如果有恶意的DLL,那不就实现了DLL注入

注入检测

多余加载的东西比如dll,这种进程情况,会发送到服务器,服务器对这些进行一个分析,保存下来 ,好好学习,搜集这个变化的过程,即大数据

监控与其有关的ip、账号做证据

当出现大量使用的行为的时候,就可以考虑封号了,之后这玩意儿再进行混淆、加壳,因为之前做了大数据,很容易分析出来特征

总结

为什么这种hook啊、注入啊起作用

以游戏为例,它不可能把所有东西都放到服务器,那么肯定有一部分放在本地,通过本地的修改影响服务器的一个目的

矛与盾都是见招拆招的过程

想要问什么样的矛好用,你得针对面对的是什么盾啊

总之学到了C和进程和汇编的关系,代码通过调用系统API函数,让系统内核对内存进行操作

参考

b站 郝英俊和易道云https://space.bilibili.com/157504840

https://blog.csdn.net/mrxiao23/article/details/137175004

个人补充

去特征

默认ce可能因为一些固有特征,会被检测到,所以这里尽量更改一下

主要是源码、图标,可以过一个客户端的检测,如果游戏有驱动保护,那要另说

当然了,特征码什么的

https://blog.csdn.net/mrxiao23/article/details/137175004

wpe

wpe也是对游戏的一个测试工具,它不同于ce的改值,一般是截获一段数据包,这一段就完成了一个行为,比如:

1.截获一段回城的行为,之后重复发这段包,那就是回城

2.可理解为发送一段指令,比如进副本打怪,可能就这样:截取第一个进图包,截取第一个遇怪包,截取第一个灭怪的经验包。重复发送这三段......那就自动打了

https://xz.aliyun.com/t/16391?time__1311=GuD%3D0IqGx%2BxUx0v4%2FDuBDcDmEzaUqK3x

漏洞点

我下载过一个游戏,坐标什么的确实可以改,副本里相当于单机了就是随便改,锁血等,但不是什么危害。被封了两个号了。。。(悲/(ㄒoㄒ)/~~

一般除了改具体值(攻击力等),改坐标(飞天、瞬移)

更多的是找ID,包括不限于人物id,物品id、技能id

这个一般就是模糊查询,

下面是月神师傅的一个公开文章内容

https://www.secpulse.com/archives/123776.html

比如人物id,先进到人物界面,随便选一个人物,选首次扫描

切换到其它人物,再变动的值,重复

一般不建议退出人物界面,因为退出了某个大功能后,内存地址很可能重新分配,导致了你列表中没有你要的内存地址

https://www.secpulse.com/archives/123776.html

漏洞案例:

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0143395

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-048606

https://gh0st.cn/archives/2023-12-18/1

一般有很多只能模糊查询了,因为一般数据不会直接出。

这个反正有点意思,之前说的绿泡泡那个聊天记录修改就是这种方式,让转发的聊天内容以假乱真。

原文始发于微信公众号(羽泪云小栈):CE了解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月11日00:39:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CE了解https://cn-sec.com/archives/3662854.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息