首页
关于
Search
1
个人实战逆向某吃鸡手游绘制世界
251 阅读
2
京东挂机 青龙面板的安装与使用以及互助+花语2.0 Cookie的获取
177 阅读
3
UE4找Actor区分标识
167 阅读
4
UE4找摄像机矩阵
160 阅读
5
UE4引擎游戏结构和一些基础概念
138 阅读
默认分类
windows
Android
ios
Linux
web
Search
admin
累计撰写
25
篇文章
累计收到
3
条评论
首页
栏目
默认分类
windows
Android
ios
Linux
web
页面
关于
搜索到
11
篇与
windows
的结果
2021-06-21
个人实战逆向某吃鸡手游绘制世界
文章仅供参考交流学习,切勿用于非法用途我使用的是腾讯模拟器,模拟器不能用端游的模块加偏移的方法,只能用特征码定位 先打开游戏,进入训练营 首先我们先找count地址,也就是对象数量方法:拿一把枪,打开ce,首次扫描,4字节,选值介于...两者之间,训练营一般对象不超过1000,所以选1到1000朝地上打一枪,然后搜数值增加了1,不停改善,ue4游戏通过子弹找法,一般打一枪,要么增加1要么增加2最后还剩大约47个地址世界对象数量肯定不止17个,所以大部分17的就不看,符合条件的就这几个300多的地址,然后全部拉下来,一个一个按ctrl+B浏览相关内存区域,右键显示类型改为4字节(HEX),(64位游戏改为8字节(HEX))找到下面第一个的数量地址,然后点击减4的地址,(64位游戏减8),然后按空格键跳进去如果跳进去看到的是排列整齐有规律的,那么就找对了,如果是以下这种就不是像这种的跳进来第一个地址上面都为0,且下面排列整齐有规律的就是了,就是ActorArray 的地址 然后定位count的特征码 方法,右键count的地址浏览相关内存区域,显示类型改为字节(HEX)复制除count地址一行字节的上下各复制几行,记事本保存,然后重新上游戏,再用子弹方法找count地址,再复制上下字节,对比第一次的,没有变的一串字节,就可以拿来用,ce搜索这一串字节,例如我定位的是:0E F9 E9 89 69 EA 7B 4C A3 D5 FF A1 D8 DF 72 FAce搜出来只有一个结果,那么就可以用,最好找搜出来只有一个的,因为如果搜出来不止一个,还要写判断,我嫌麻烦,看个人然后,特征码搜到的地址跟count地址对比,再用计算器大减小就得到偏移,例如我的搜出来-d8就是count地址 定位对象坐标 找到count地址后,然后减4跳进去后,点击上面工具的分析数据/遍历,随便复制几个地址进去,点结构,定义新的结构点确定然后找偏移100以后的指针,p->这种标志的,可以展开的,ue4坐标一般都在100以后,右键内存区域改为单浮点,点击左边结构按空格,然后观察右边数据,如果是这样的,上面xyz,下面三个比例1的,当然下面不一定是1,那么就证明你找对了定位到左边的结构里面,如我的是展开的140里面的150的那一行,那么偏移就是对象地址加140+150就是坐标 接着找矩阵 ce搜单浮点未知的初始值,移动鼠标,往上看,搜增加的数值,往下看搜减少的数值,不动搜未变动,最后过滤出大概两百个数值就可以分析了,矩阵要找4x4的一个一个看,右键浏览相关内存区域,显示类型改为单浮点,然后游戏晃动鼠标,观察变动的数值,像这种杂乱无章的就不是,就看下一个,如果是这种的,那就证明你找对了最后一行是x,y,比例,z同样的方法定位矩阵特征码,定位矩阵第一个地址,方法同上,不在赘述 写法 腾讯模拟器有内存保护,需要安装破tp驱动,自己想办法打开易语言,读特征码我用一个内存搜索_超速模块,用法很简单获取到后可以调试输出一下看看和ce找到的一不一样然后就易语言正常写读取矩阵和坐标等等,写绘制就完事了,绘出所有对象不要忘了加一个绘制文本,绘制出所有对象的地址,然后后面ce里面分析可以分析血量,人机判断,本人判断,队友判断,物品等等例如我这里地址加918就是血量地址,数据可以画血框,还可以看结构分析出物品和人,只画人的框物品不画,也可以写物资透视差不多就这些,成品及源码就不放了,我也在网上查了一些ue4的资料然后实战的,小白可以去网上看一些视频再会一些编程语言就可以写出来了,我网盘也收藏了一些大佬的视频教程可以观看,地址:https://pan.xm00.cn/fps本人原创,转载请注明出处,谢谢
2021年06月21日
251 阅读
0 评论
3 点赞
2021-06-21
UE4找子弹和后坐力基址
UE4子弹常识 子弹在游戏中一般都会给出 UI 显示,我们可以根据子弹变化,很容易精确搜索到子弹的地址。而子弹的射速、后坐力等数据,基本都是在子弹内存区域前后范围内的。 找子弹基址 多次精确搜索子弹数量,找到子弹数量的地址:对这个地址进行指针扫描,扫描层级5。扫描出结果后,记住之前子弹的枪,然后重新上游戏。CE重新附加进程,切换到之前的枪并改变子弹数量后,在指针扫描器里重新扫描内存,输入现在子弹的数量,过滤掉失效地址。重复操作多次,就可以慢慢定位到基址。扫描结果就算多次过滤后,一般也会剩下很多,我们找偏移中带 0x0 0x8 0x10 这样8字节的倍数的偏移量,这种偏移是指针数值的单个元素大小,指针数值的偏移基本的都是这样的。比如下面这个偏移 0x0 0x8 0x10,发现刚好对应我们3把枪的子弹数量。 找后坐力基址 查看子弹的内存区域,观察有什么数值是开枪的过程中有变化的。把这些数值都列为可疑数值加到地址列表,然后锁定数值为0,测试开枪有没有后坐力。注意要把 CE 锁定延迟调得非常小,不然效果不明显。因为在开枪过程中,游戏也会频繁的写入数值。下面是我找出来的结果:重启多次游戏后,发现子弹基址实现了,又按同样的方法重新找了一个:找鼠标基址镜头朝最上搜 float 80 到 89 ,镜头朝最下搜 float -89 到 -80,多次搜索得到少量结果后,锁定数值看能否能转动镜头,则确定鼠标地址。转载自六阿哥博客
2021年06月21日
130 阅读
0 评论
0 点赞
2021-06-21
UE4找所有玩家的血量
为什么要找所有玩家的血量? 用于绘制所有玩家的血条,判断玩家是否死亡。 传统找法 一般 FPS 射击游戏中的血量满血时都是数值100类型 float。所以我们满血的时候先精确扫描单浮点100,然后掉血了搜减少的数值。没掉血再搜不变的数值,直到找到血量地址。找到后指针扫描最大5级偏移。扫描出结果后,要找基址是 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 ,并且偏移是 0x30 -> 0xB0 后。因为我们要找的是所有玩家的血量,也就是 Actor 下的血量。最终得到血量偏移为 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 -> 0x30 -> 0xB0 -> 0x8 -> 0x7C4。其中 0x8 为遍历 ActorArray 的偏移。 更简单的找法 还有一种方式,找到自己的基址后,去分析结构。然后在里面搜索数值,没有受到伤害之前,基本都是100。找到所有可能为血量的地址后,再进行测试。比如修改,比如受伤后的变化,这样就可以直接确定血量偏移。 坑 有些游戏其他玩家的血量可能不会存储在本地,也就是在 ActorArray 下面可能找不到血量,也有可能是做了加密处理。这个时候想绘制血条已经是不可能的事情了,但判断玩家是否死亡,还可以采用折中的办法。比如玩家死亡后,观察玩家的骨骼数据是否正常。一般 FPS 游戏中玩家死亡后,尸体会在地上停留几秒才会消失,但是消失后他的 Actor 并没有马上销毁,也就是还在 ActorArray 中。如果我们直接绘制出来,则会出现空框。所以我们需要通过分析人物结构,观察玩家活着和死亡的时候数值变化,如果可以找到固定的变化规律则可以替代血量用于判断敌人死亡。如果找不到,则可观察骨骼变化,一般就算 Actor 还会销毁,但它的骨骼数据已经没有了,也可以用于判断玩家尸体是否消失。转载自六阿哥博客
2021年06月21日
114 阅读
0 评论
0 点赞
2021-06-21
UE4找ComponentToWorld和骨骼数组
为什么要找骨骼基址? 找骨骼基址是为了实现绘制骨架和骨骼自瞄,比如瞄准头部骨骼、胸部骨骼。 找骨骼基址 对自己的 Actor 的地址进行结构分析,防止分析错地址最好直接用 APawn,然后根据特征去查找。ComponentToWorld 是 3x3 结构,最后一行数值不会动,最后一行数值一般是3个固定的数值和 0.00。比如1.00 1.00 1.00 0.00 或 2.50 2.50 2.50 0.00 这样的。根据特征,我们找到了 ComponentToWorld,得到偏移为 Actor.base -> 0x378 -> 0x180,而 0x378 偏移则是 Mesh 的偏移。ComponentToWorld 和骨骼数组都是在 Mesh 下面,所以我们找到了 ComponentToWorld 就很容易找到骨骼数组。骨骼数组非常容易看出来,在内存中很规律。我们找到了骨骼数组的偏移为 Actor.base -> 0x378 -> 0x698:有时候骨骼数组里的数值并不会发生变动,但还是很规律。比如下面这个 GS:GO 的:最后用 ComponentToWorld、骨骼数组和摄像机矩阵,结合具体关节的实际偏移,根据固定算法去绘制骨架。转载自六阿哥博客
2021年06月21日
94 阅读
0 评论
0 点赞
2021-06-21
UE4找Actor区分标识
标识的作用? 我们如何区分 ActorArray 中的 Actor 是敌人、队友、自己、物品还是其他东西?比较通用的做法是对比多个 Actor 的结构,找出不同类型的 Actor 在同一偏移,数值的异同规律。比如在 Actor 下 0x555 偏移,类型为 4 Bytes,是敌人的时候这个数值为0,是队友的时候数值为1,是自己的时候数值为2,不是人的时候数值为3。这样就可以区分出人和其他物品,并且可以区分出人里面的敌人、队友和自己。这就是找标识的作用。由于我测试的游戏是一个单机游戏,相对来说是比较容易对比 Actor 结构中的数据。 找出区分的标识 先遍历 ActorArray 并绘制所有 Actor 的地址,然后观察绘制出来的地址。发现自己身上有多个地址,这是因为身上的装备也是 Actor。我发现在人物播放闲置动画或下蹲的时候,不会移动的是人物的地址,会移动的是物品的地址。(只是刚好这个游戏是这样的)还有一种区分方式是把自己身上的所有地址都添加到 CE 地址列表,然后挨个浏览内存区域,类型改为 float,将附近的 1.0 数值改为其他数值检查人物是否有加速效果。如果有加速效果,则说明这地址是人物的地址。这是 UE4 引擎结构的原因,加速控制的数值就是 Actor 下面很靠前的偏移,类型是 float。注意:有些第一人称游戏,看不到自己身上的一些地址,可以通过调整坐标,让地址显示出来。比如调整自己的 x 坐标增加 50-200,再转屏幕坐标。这样就可以把本该绘制在自己身上的地址绘制在自己旁边。使用自己的人物地址、多个敌人的人物地址、物品的地址去结构分析,找到能够区分他们的条件。观察自己的人物数值、敌人的人物数值、物品数值。自己的人物数值和所有敌人的人物数值相同,但于物品的数值不同,则可用来区分人物和物品。自己的人物数值、所有敌人的人物数值、物品的数值都不同,可以用来区分是自己还是敌人。记录偏移和数值,尽量记录更多的数据。然后重启游戏并 CE 重新附加进程,根据记录的偏移和数值去对比当前数据,保留未变动的。这个步骤可以重复多次操作,来确保记录的偏移和数值不会发生变动,才可以用来做区分类型的判断条件。如果自己的人物和敌人的人物数值没变,物品的变了。可能是不同的物品,也可能是我们的物品地址多次操作填的不是同一个位置的。人物和模型区分 50 1-人物 0-模型-----------没变 54 4-人物 0-模型-----------没变 84 258-人物 2-模型-----------没变 B8 512-人物 0-模型-----------没变 138 3-人物 1-模型 float-----------没变 154 4-人物 0-模型-----------没变 298 10-人物 2-模型-----------没变 29C 24-人物 4-模型-----------没变 2A0 1023-人物 3-模型-----------没变 2B8 10-人物 2-模型-----------没变 2C8 2-人物 1-模型-----------没变 2D8 16-人物 1-模型-----------没变 308 6-人物 2-模型-----------没变 30C 24-人物 4-模型-----------没变 自己和敌人区分 150 3-自己 1-敌人 0-模型最终选择一个或多个条件来区分判断。 网络游戏 在网络游戏中,敌人和队友可不会站桩等你去对比数据,所以可以将想要对比的 Actor 地址挨个结构分析并保存数值到本地 txt 文本文件,然后再用其他文本对比工具来对比数据。比如免费开源的 WinMerge。我们可以在代码中实现拷贝 Actor 地址到剪贴板,从而实现快速收集需要分析的结构。比如我可以像自瞄那样计算目标到准星的距离,将距离准星距离最新的 Actor 在我们按下某个快捷键的时候绘制出特殊的文字(文字更大、颜色和其他不一样之类的),并且使用拷贝这个地址到剪贴板。 UE4更好的区分标识办法 在 UE4 中,我们除了通过上面说的找不同 Actor 的异同标识来区分类型外,还有一种更精准并且更容易的方式。首先需要熟悉一个 UE4 的固定结构,也就是 UWorld -> GameInstance -> LocalPlayer -> PlayerController -> APawn,而 APawn 则和 ActorArray 中某个 Actor 是同一个对象,也就是玩家自己的 Actor。有了这个结构,我们就可以在遍历 ActorArray 的时候,判断和 APawn 地址相同的 Actor 就是玩家自己。然后怎么区分敌人和队友,还有其他 Actor?我们还需要知道一个概念,也就是 UE4 中的 GName,我们可以通过 Actor 偏移 0x18 得到一个 ID,然后根据 GName 基址和固定算法计算出 Actor 的蓝图类名。再结合玩家自己的 Actor 的蓝图类名,来区分敌我和其他 Actor。 GName查找和算法 字符串搜索 MulticastDelegateProperty,搜到结果后,查看内存浏览器,切换到字节类型显示。然后像上翻,查找顶部有没有 .....None 开头,如果是则鼠标放 上,得到一个地址,加入地址列表里:对这个地址搜索16进制8字节,得到一个静态地址:这个静态地址减去 0x10,就是 Gname 入口地址:读出每个 Actor 的蓝图类名后,像绘制基址那样绘制出来,观察并区分即可。转载自六阿哥博客
2021年06月21日
167 阅读
0 评论
0 点赞
2021-06-21
UE4找摄像机矩阵
为什么需要摄像机矩阵? 我们可以用屏幕尺寸 + Actor 三维坐标 + 摄像机矩阵,通过固定算法计算出 Actor 的屏幕坐标,从而实现绘制 Actor 的数据,实现透视效果。 常规方式 先扫未知的初始值,类型单浮点。移动镜头并搜索变动的数值,再移动再搜索,反复操作。不移动镜头,搜索不变的数值,反复操作。最后搜索结果数量不再减少了,先将结果列表里当前值带 E 的和绿色的静态地址都删掉(UE4里矩阵地址都会有偏移),再依次选择地址浏览相关内存区域,数据类型切为单浮点。转动镜头,根据摄像机居中特征分析是否是矩阵数据。最终找到矩阵如下: 摄像机矩阵的特征 UE4 摄像机矩阵的第三列是 0.00 0.00 0.00 x.00,最后一个数值不固定,前面3个 0.00 固定。并且除了第四行中会出现较大的数值,前面三行都不会出现较大数值。一般不移动镜头,摄像机矩阵数值是不会发生变化的。但骨骼矩阵和骨骼数组的数值可能会发生细微变化,那是因为骨骼在做闲置动画,有细微运动。UE4 的摄像机矩阵的动态地址一般重启游戏才会发生变化,切换场景和房间一般不会发生变化,因为 FPS 射击游戏一般摄像机只有一个。特征码方式UE4 还可以使用摄像机矩阵的特征码快速定位,通用矩阵特征码:00 00 00 00 00 00 00 00 00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 80 3F 00 00 80 3F 00 00 00 00使用特征码搜索字节数组,内存去掉可写并改成方块状态(可读或可写)。一般 UE4 引擎会搜索到3个结果,依次浏览相关内存区域,找出正确的矩阵即可。 找基址 找到矩阵地址后,对地址进行指针扫描,扫描级别2,然后就能找到基址。最终矩阵的基址和偏移为:"BattleRoyaleTrainer-Win64-Shipping.exe"+02886630 -> 20 -> 280转载自六阿哥博客
2021年06月21日
160 阅读
0 评论
0 点赞
2021-06-21
UE4找ActorArray中的坐标偏移
为什么要在ActorArray中找坐标? 我们知道 ActorArray 中存放的是所有附近的 Actor,如果我们找到 ActorArray 下的坐标,则可通过遍历获取所有 Actor 的坐标。 开始找坐标 选中我们找到的 Count 地址,浏览相关内存区域(Ctrl+B),然后地址减8字节,使用快捷键空格跳转到(前进)这个地址所在的内存位置。Count 地址为 0x1FCCD0BB738,减8字节得到 ActorArray 的地址(其实是 TArray 的地址),也就是 0x1FCCD0BB738 - 0x8 = 0x1FCCD0BB730。地址 0x1FCCD0BB730 的数据 0x1FCCD742B80 就是 ActorArray 的地址(其实是 TArray 中指针指向的地址)。而 ActorArray 里也是地址,这些地址是 Actor 的地址,所以我们拷贝几个 Actor 的地址去结构分析。随便选3个 Actor 地址去结构分析,结构分析弹窗里使用快捷键(Ctrl+A)添加额外的地址框。分析出结果后,从 0x100 以后的偏移开始找,因为 UE4 引擎在 0x100 偏移之前找坐标基本都没有。如果没有找到坐标,就重新换几个 Actor 的地址重新分析。找到红色的指针(Pointer)再点前面小箭头展开,找里面有没有类似坐标的数值,有时候需要把类型 4 Bytes 改为 Float 类型才能直观看到坐标的数值。找到类似坐标的数值后,选中地址按快捷键空格会跳到对应的内存数据区域,把显示类型改为单浮点并观察附近数据。也可以通过展开指针后,选中第一个直接跳转到数据区域浏览后面的数值,找到数值后,再在结构分析窗口里找对应的偏移。因为结构分析的类型可能不是我们想要的,直接浏览内存数据会更直观。就像这里 190 偏移被 CE 识别为 4 Bytes 类型,我手动改为 Float 类型才能直观看出 -9840.522461 类似坐标的数值,然后跳转内存区域发现确实是我们想要的:最终找到的坐标:上面3个数值是坐标 x y z,下面3个数值是缩放,下面这3个数值不一定是固定的1.00。X坐标最终的偏移为 30 -> (B8 - 8) -> 10 -> 158 -> 190。Y坐标最终的偏移为 30 -> (B8 - 8) -> 10 -> 158 -> 194。Z坐标最终的偏移为 30 -> (B8 - 8) -> 10 -> 158 -> 198。这里 B8 - 8 是因为 Count 地址减少8字节才是 Actor 数组的地址,而 10 则是数组的第二个元素,这个偏移用于递增8字节遍历 Actor。世界数组地址里找到的坐标: 验证坐标 找到坐标后锁住数值,看能不能正常移动和跳跃,不能则说明我们找到的数据是正确的。 其他方式 还可以直接通过搜索 Z 坐标,然后指针扫描5级,找到偏移是 "BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8 -> 0x30 -> 0xB0 下面的,则是我们想要的 ActorArray 下的坐标偏移。转载自六阿哥博客
2021年06月21日
101 阅读
0 评论
0 点赞
2021-06-21
UE4找Count基址
什么是Count? Count 就是 UE4 引擎开发的游戏在运行过程中动态创建的 Actor 的数量,也可以说是在当前玩家一定范围内的 Actor 的数量。因为如果离得太远,由于游戏性能优化原因,是不会把非常远的 Actor 也获取的。 我们找Count来干啥? 找到 Count,我们也就找到了 UWorld、ULevel 和 ActorArray 的地址。因为 Count 的地址都是在 UWorld 里的 ULevel 下的。而 ActorArray 在 UE4 里其实是一个 TArray 的结构体,第一个变量为一个指针,指向一个存放 Actor 指针的数组,第二个变量 Num 就是这个数组的长度,也就是 UE4 逆向中的 Count。所以得出 Count 的地址减去8字节,得到 ActorArray 的地址。我们得到了 Count 和 ActorArray 后,就可以遍历得到所有的 Actor。测试游戏为 Battle Royale Trainer 吃鸡模拟器,是一个 UE4 引擎开发的单机游戏。单机游戏和网络游戏找数据的方法大体是一致的,只是网络游戏找数据时会有更多的干扰。所以都是先以单机游戏练手,等熟悉了数据挖掘的各种技巧,才开始分析网络游戏。 搜Count的动态地址 首次扫描,4字节,值介于1到2000两者之间。一般游戏开始的时候,Count 只有几十到几百,所以我们搜 2000 内基本是够了。对着靶子打一枪,因为击中靶子后会创建一个飘动的伤害数值 Actor,所以可以搜增加的数值。再打再搜,反复操作多次。(不是所有游戏都这样,如果是网络游戏,队友和敌人在战斗过程中,也会不断的产生 Actor,所以还能不断的搜增加的数值)打空枪,不会创建新的 Actor。所以搜未变动的数值,重复这两个步骤,最后只剩下少许结果。把这些结果挨个浏览相关内存区域(Ctrl+B),显示类型改为8字节(HEX)。我们知道 Count 地址减少8字节,就是 ActorArray 的地址,而 ActorArray 里的数据非常整齐,一眼就可以看出来,我们就以此来确定 Count 地址。找到正确的 Actor 的数据如下,0000020B 整齐划一: **找到Count基址** 对找到的 Count 地址进行指针扫描,修改偏移最大级别,UE4 的 Count 一般都是2级偏移。每个节点的偏移最大相差去掉勾选,还有注意指针扫描的保存路径不能有中文。扫描出结果后,拖动 指针: 列的宽度调整,观察不会闪动的行。(拖动的时候,会不断的去读取偏移后的地址中当前的数据)发现有12个,但为了保险起见,我还是把所有地址都保存,然后重启游戏。重启游戏后,发现12个地址中,还有2个是有效的。UE4 的 Count 基址一般第一层偏移是 30(第一层偏移是 ULevel),其中一个就是偏移 30 -> B8,所以这个地址就是 Count 的基址。基址有了 Count 基址后,我们就得到了下面数据:UWorld:"BattleRoyaleTrainer-Win64-Shipping.exe"+02AEFFB8ULevel:UWorld -> 30Count:UWorld -> 30 -> B8ActorArray:UWorld -> 30 -> B0联网游戏 联网游戏在搜索 Count 的过程中,会受到其他玩家的干扰。可以先搜1-2000的范围数值,然后多次搜增加的数值,慢慢缩小搜索范围。如果可以找到 Count 就最好,找不到则可以通过其他方式逆推出 Count 的基址。比如通过人物所处游戏位置的高低变化,找人物 Z 坐标,然后扫描指针,逆推 UWorld、Count 和 ActorArray 的基址。根据 UE4 引擎的结构,Count 是在 UWorld 下的 ULevel 下的。而 ULevel 的偏移基本都是 0x30,这样我们就确定了第一层偏移和第二层偏移大概数值。对人物 Z 坐标扫描指针后,找出符合偏移的数据,然后使用内存浏览器查看并验证。转载自六阿哥博客
2021年06月21日
134 阅读
0 评论
1 点赞
2021-06-21
UE4引擎游戏结构和一些基础概念
小龙讲师总结的结构一些常用结构的概念 UWorld 是一个单例对象,逆向 UE4 游戏很多我们想要的数据都是从他开始的。从 UWorld 中我们可以获取到 UGameInstance 和 ULevel。 UGameInstance UWorld 类里的一个属性,在源码里为:struct UGameInstance* OwningGameInstance;**ULocalPlayer** UGameInstance 类下的一个属性,在源码里为:struct TArray<struct ULocalPlayer*> LocalPlayers;可以看出来,是保存在一个 TArray 的动态数组中,我们获取数组的第一个元素,就是当前角色的 ULocalPlayer。 APlayerController ULocalPlayer 的父类 UPlayer 类的一个属性,在源码里为:struct APlayerController* PlayerController;APlayerController 里有我们想要的 APawn、APlayerCameraManager 等数据。 APawn APawn 继承自 AActor ,在 UE4 游戏逆向里被称为 InPawn,也就是玩家自己的 Pawn。获取到它后可以获取一些玩家自己的数据,并且可以在 Actor 数组中区分出玩家自己(这个Pawn和Actor数组中某个Actor,是同一个对象。可以对比对象地址来区分自己)。位于 APlayerController 的父类 AController 下,在源码里为:struct APawn* Pawn;ULevel 关卡,类似 Unity 中的 Scene。我们想要获取的 ULevel 是在 UWorld 下的,它的偏移很长一段时间都是固定的 0x30。在源码中为:struct ULevel* PersistentLevel;Actor Actor 是可以放置或生成在一个关卡中的 Object 的基类,Actor 可以包含很多 ActorComponents,用于控制 Actor 怎么移动、怎么渲染等等。Actor 还有一个重要作用,在联网游戏中,可以通过网络进行属性复制和函数调用。类似 Unity 中的 GameObject 。像玩家自己、敌人、队友、物资、载具、枪械、枪械上的配件等等,一般都是 Actor。 Count UE4 的 Count 就是游戏运行过程中,动态创建的 Actor 的数量,游戏对象销毁后这个数量可能会变动。一般在一场游戏中,这个数值是一直增大的,直到游戏结束并返回主界面。 Actor数组 存放游戏中一定范围内的 Actor 的数组,为什么要说一定范围?因为如果目标离你非常远,为了性能优化,是不会存放在 Actor 数组中的,等你靠近一些目标才会。逆向 UE4 游戏,可以结合 Count 遍历这个数组,得到所有 Actor。然后再获取这些 Actor 的类型、坐标等等数据。 GName 通过 Actor 的 id 可以从 GName 表中获取到 Actor 的蓝图类名,用于区分 Actor 种类。转载自六阿哥博客
2021年06月21日
138 阅读
1 评论
1 点赞
2021-06-20
一键重装系统DD脚本
集合了Linux和WIN包Linux:centos6-7; Ubuntu 14 16 18;Debian 7 8 9 10;WIN:集合了“”萌咖大佬、老司机、MeowLove “”的系统包含win7 2003 2006 2012 2008 2016 2019等系统先运行#Debian/Ubuntu: apt-get update #RedHat/CentOS: yum update安装所需软件#Debian/Ubuntu: apt-get install -y xz-utils openssl gawk file #RedHat/CentOS: yum install -y xz openssl gawk file脚本镜像文件在OneDrivewget -N --no-check-certificate https://raw.githubusercontent.com/veip007/dd/master/dd-od.sh && chmod +x dd-od.sh && ./dd-od.sh镜像文件在GoogleDrivewget -N --no-check-certificate https://raw.githubusercontent.com/veip007/dd/master/dd-gd.sh && chmod +x dd-gd.sh && ./dd-gd.sh命令开始有提示框 例如 linux默认密码:MoeClub.org or cxthhhhh.com or Pwd@CentOS如果出现WIN安装后硬盘变小的情况计算机右键-管理-存储-磁盘管理 压缩卷然后再扩展卷 刷新下就可以了
2021年06月20日
54 阅读
0 评论
0 点赞
2021-06-20
服务器装Windows Server修改3389端口
在开始-----运行菜单里,输入regedit,进入注册表编辑,按先面的路径进入修改端口的地方:1、HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Terminal Server/WinStations/RDP-Tcp找到下面的 "PortNumber",用十进制方式显示,默认为3389,改为任意可用端口。2、请注意,在这里修改过了以后,还没有修改成功,注册表文件的另外一个位置也必须做相应的修改,路径为HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Terminal Server/Wds/rdpwd/Tds/tcp找到下面的 "PortNumber",用十进制方式显示,并做出修改。然后找开防火墙高级管理-选入站规则-远程桌面用户模式(TCP-IN)选中,新建规则-端口-应用于TCP,特定本地端口,填写您刚才修改过的端口号-允许连接,然后全部下一步。到名称时,随便您自已取如远程桌面**端口。重启服务器,大功告成。
2021年06月20日
22 阅读
0 评论
0 点赞