前
现在是2018年的第十周了。突然换了个环境,发现自己久久不能适应。各种拖延症,各种不想动,也是不知为何。可能是到了致郁期。还是闭上眼睛早早的过去吧。
外挂基本原理
最近各种颓废的吃鸡。慢慢的又是那种被模式制约的感觉。所以也是想当当神仙。所以网上找了一波辅助。
GitHub
其实一直有自己写辅助的想法,可是好久好久,也只是个想法。这次不知哪位dalao在Hub上放出了源码。
对源码大体看了看,区区500行,实在说不上复杂。答题分一下几个部分
- 取得进程RVA
- 进行偏移,对属性地址写内存
- 进入消息循环
- 响应快捷键,写内存
具体的结构还是很简单的。
DWORD maincode = GetModuleBaseAddress (pid, "hyxd.exe");//天空变黑防封;DWORD FLY_BAN = maincode + 0x64F573;DWORD FLY_BAN_TMP = maincode + 0x64F2F9;WriteNumProcessMemory (pid, FLY_BAN_TMP, 24);WriteByteProcessMemory (pid, FLY_BAN, tobyte (to16 (0xF30F590D, FLY_BAN_TMP, addre), bits));
这里就是找基址的部分,和直接对特定偏移的内存写。
delete 和 delete []区别
delete 是C++里面用于回收new的内存的关键字。一直用的是delete,这个delete[],还是在都这个代码里面第一次遇到。
根据自己开的资料里讲,如果单单new一个简单类型,那么实际效果是相同的
int *a = new int[10];delete a; //方式1delete [] a; //方式2
这里的a的空间大小是固定的,所以我们可以使用者两种方式来清理内存
不过如果遇到了特使情况。我们这里是复杂类型(complex)
class A { ... ~A(){cout << "asd"}};A *a = new A[10];delete a; a = new A[10];delete pbabe[];
这里两种表达方式就出现了差异。a 是直接删除了这个对象数组的头地址。的确也是释放了A[10]的空间,不过只会执行一次析构函数。而delete[]
会依次执行十次析构