• 地图名称偏移


    找到个地图的边缘 ,2个地名相互切换的地方比如这个地方可以 422,851,22  
     
     
    使用工具把地图名称转换成UNICODE
    鹏程客栈
    4F 9E 0B 7A A2 5B 08 68
    剑仙城郊外
    51 52 D9 4E CE 57 CA 90 16 59 0D 00 0A 00
    CE搜索类型 array of byte
    能搜索20多个 判断方法:
    通过修改 数值 看游戏里的地图名称是否改变了 改变了正确
     
    通过右键查找 能找到地图名称的基址
     //=
    地图名称=[[[[[b3f6cc]+1c]+1c]+60]+4]+0
     
     
     
    改变名称 就对
    地图名称=[[[[[b3f6cc]+1c]+1c]+60]+4]+0
    这 个地图名称的数值写入
     
    感谢 Written by GustFox    QQ:309140945 提供的教程
     
    大概就是找到写屏操作的CALL 找法:
    写屏是先读取地图名, 然后在写在屏幕上面, 所以我们只要对地图名的内存地
    址下内存读取断点, 跑到另外一张地图游戏自动断下, 现在我们按CTRL+F9往回
    找, 或者直接ALT+K观察堆栈我们一个CALL 一个CALL 的排除发现
    push esi    //一个指针, 指向一个数据结构,地图名字就是其里面的一个结构体
    mov ecx,eax    //EAX也是一个参数,往上跟一下就能跟踪出来源
    call 0053D830
    EAX往上跟一下就出来了:
    mov ecx,dword ptr[$A3E018]
    mov ecx,dword ptr[ecx+$1C]
    mov ecx,dword ptr[ecx+$4]
    mov eax,dword ptr[ecx+$8]
    ESI 指向的内容:对PUSH ESI 下断, 断下后观察ESI 指向的值:
     
    可以看出来1C FE 6B 0A    CC FE 6B 0A 是地图名的UNICODE编码大概是这么
    一个结构体
    Struct SayInfo
    {
        DWORD Say1=0x0095D4E0;
        DWORD Say2=0x0952696C;
        DWORD Say3=0x0095D4F0;
        DWORD Say4=0x0094AA38;
        DWORD Say5=0x0;
        DWORD Say6=0x0;
        DWORD Say7=0x0;
        DWORD Say8=0x10;
        Widechar* SayValue=” GustFox 的写屏测试!”;
    }
    大概就是这么一个意思, 当然可能有点语法错误.
    喜欢DELPHI 的朋友也可以看下面的代码:
    首先定义数据结构:
    type
            screensay=record
            Say1:dword;
            Say2:dword;
            Say3:dword;
            Say4:dword;
            Say5:dword;
            Say6:dword;
            Say7:dword;
    Say8:dword;
    SayValue:dword;
        end;
    将我们的窗体注入游戏进程
    procedure TForm1.Button4Click(Sender: TObject);
    var
        myscreensay:screensay;
        saystr:pwidechar;
        addr,addrc:pointer;
    begin
    saystr:=pwidechar(widestring('GustFox 的写屏测试!'));//写屏的内容
    myscreensay.Say1:= $0095D4E0;
    myscreensay.Say2:=$0952696C;
    myscreensay.Say3:=$0095D4F0;
    myscreensay.Say4:=$0094AA38;
    myscreensay.Say5:=$0;
    myscreensay.Say6:=$0;
    myscreensay.Say7:=$0;
    myscreensay.Say8:=$10;
    myscreensay.SayValu:=dword(saystr);
    addr:=@myscreensay;
    addrc:=pointer($005758D0);
    asm
        pushad
            mov esi,addr
            push esi
            mov ecx,dword ptr[$A3E018]
            mov ecx,dword ptr[ecx+$1C]
            mov ecx,dword ptr[ecx+$4]
            mov eax,dword ptr[ecx+$8]
            mov ecx,eax
            call addrc
        popad
    end;
    end;





    附件列表

  • 相关阅读:
    ./ 和../ 和 / 区别
    思想笔记-03
    java项目学习
    OA办公管理系统最全设计
    Axure RP 7.0注册码
    Java循环和数组练习题:打印素数升级版
    C语言练习题:水仙花数
    Java与C语言的区别——含面向对象介绍
    .NET Core C# 中级篇2-7 文件操作
    ASP.NET Core Basic 1-1 WebHost与项目配置
  • 原文地址:https://www.cnblogs.com/xe2011/p/2545620.html
Copyright © 2020-2023  润新知