zoukankan      html  css  js  c++  java
  • 地图名称偏移

    找到个地图的边缘 ,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;





    附件列表

  • 相关阅读:
    齐次坐标的理解
    BLEU (Bilingual Evaluation Understudy)
    tensorflow由于未初始化变量所导致的错误
    Beam Search(集束搜索/束搜索)
    nltk 的分词器punkt: ssl问题无法下载
    文件读写方式的对比
    import tensorflow 报错: tf.estimator package not installed.
    条件式变分自编码机(Conditional Variational Autoencoders)
    GoogLeNet 解读
    卷积的三种模式:full, same, valid
  • 原文地址:https://www.cnblogs.com/xe2011/p/2545620.html
Copyright © 2011-2022 走看看