主题
春节放假终于有空学习下怎么制作外挂啦......学习写外挂大概是我一开始学习计算机的动力吧....只是一直似懂非懂..看教学视频各种不明白为什么....也没有专门的时间学习下怎么写....春节有空研究了下cheat engine学习了下怎么修改内存里的值达到作弊的效果....希望后期能和E语言结合在一起写成真正的外挂....(笑)
这篇文章主要记录下今天的研究成果..
效果
主机999元...装不了啥其他游戏....装了个红警3做测试...
最终效果如下:
学习过程
要修改某个值,比如金钱,首先应该找到储存金钱的内存地址...
比如这个金钱可能就是存在了一个int类型的变量里....
但是int money,这个money肯定是被包装在其他DTO或者什么VO对象里的.不可能是个static的变量(其实java static的变量我都找了半天没有找到基址..)...(CE里的黑色的地址,是new出来的.)
所以如果用这个地址的话,下次运行游戏就不行了,因为new可能会在内存另一块空间分配money...所以要找到一个相对于程序的静态的变量(也可能是那种编译的时候就能确定要怎么分配内存的变量),并且从这个变量可以找到money的地址.
然后比如你要修改money,money外层被player对象包裹着..那修改money肯定是player.money=xxx.那只要找到player就能找到money了..player外层又会被什么别的对象包裹...一层一层向外找就OK了.
看看是哪个指针会修改这个money地址里的值.
发现会把eax的值写入money的地址里.eax是16进制的268A=10进制的9866
然后money的地址是0412FD7C这个是通过esi+04得出的,esi的值是0412FD78.
所以说player.money调用的时候先取player的地址,再+04计算出money的地址,进而得出money地址里的值.
所以说会有一个指针指向player(esi的值).
所以继续搜索0412fd78.
然后类似于这个步骤,一层一层向外层对象查找.
找到最外层不变的基址(指针)以后再根据指针间的关联一层层推回来..
这样子找到了基址(指针),通过基址再去找money的地址(多级指针最终指向money的地址),不管游戏重启多少次,都不需要重新再找地址的.也是也外挂必备的吧..
感谢
超级有成就感....顺便强行复习了一下汇编....强行复习了下C++指针.....哈哈...