列表格式显示

热搜词:winrar    ftp   office   photoshop   输入法   ghost   win7  

09编程开发 - 分类

广告招商中......
联系方式!

编程工具 - 时间排序 更多...
    编程工具 - 点击排序 更多...
      编程工具 - 大小排序 更多...
        作者

         

        最近发布的软件 更多>>

        首页 >> 09编程开发>> 编程工具>>CE自动汇编:AA引擎通用DLL 发布者:admin >> 本人发布的更多软件

        广告招商中...... 联系方式!

        CE自动汇编:AA引擎通用DLL 

             
        软件厂家: 官方网站:
        大小: 语言:
        类型: 类别:
        更新时间: 运行环境:
        ;开始下载地址
        软件标签: dll 引擎

        ce自动汇编直译器 : aa引擎 各语言通用dll - aa_engine.dll

        三个函数, 原型如下:

        1). 运行ce aa脚本

        bool autoassemble(handle hprocess, char * aa_script, int command);

        1). hprocess: 游戏句柄

        2). aa_script: ce aa(自动汇编)脚本

        3). command: 1为运行[enable], 0为运行[disable]

        4). 返回: 运行成功返回真, 失败返回假

        2). 取地址

        dword getaddress(handle hprocess, char * address_line);

        1). hprocess: 游戏句柄

        2). address_line: 地址表达式, 支持指针+偏移+模块基址+aa脚本做的人造指针+ 游戏空间 中存在的api

        3). 返回: 成功返回地址, 失败返回0

        3). 取aa引擎版本号

        char * ver();

        返回版本号(文本)

        易语言数据类型对照:

        int, dword, handle = 整数型

        char * = 文本型 或 字节集型(传址打勾)

        bool = 逻辑型 或 整数型

        vc2008 动态调用dll方法:

        hmodule hdll = loadlibrary(text("aa_engine.dll")); ?// 载入dll

        // 调用autoassemble

        typedef bool (far winapi *proc1)(handle,char*,int);

        proc1 pautoassemble=(proc1)getprocaddress(hdll,"autoassemble");

        (pautoassemble)(hprocess,aa_script,1);

        // 调用getaddress

        typedef dword (far winapi *proc2)(handle,char*);

        proc2 pgetaddress=(proc2)getprocaddress(hdll,"getaddress");

        dword addr = (pgetaddress)(hprocess,addr_line);

        // 调用ver

        typedef char *(far winapi *proc3)();

        proc3 pver=(proc3)getprocaddress(hdll,"ver");

        char *ver = (pver)();

        freelibrary(hdll); ?// 释放dll

        --------------------------------------------------------------------------------------------------

        更新beta 12:

        1. (flaot)和(double)转换

        2. dq命令

        更新beta 13:

        1. 汇编代码自动修正功能增加一个错误处理

        --------------------------------------------------------------------------------------------------

        << 关于aa引擎 >>

        1). 使用标准winapi(__stdcall)格式导出函数, 各语言以一般宣告api的方式皆可调用

        2). 需要 vs2008sp1 运行库 (仅4mb)

        3). 部分功能需要vista或xp sp1以上运行环境

        4). 可任意改名, 例如改成 xxx修改器.dll

        5). 已使用upx 3.08压缩加壳, 无毒

        如有任何误报, 可自行脱壳, 方法为 upx.exe -d aa_engine.dll

        脱壳后, 原大小約为 160k

        6). aa引擎由ce 5.61的 delphi 源码中, 摘除并移植aa脚本直译器

        外加od的汇编编译器(disasm)源码作为心脏

        本人axdx只负责进行移植整合手术, 所有技术源自ce与od

        7). aa引擎原开发目的为一个cheatmaker插件pc_aa.dll

        8). 特别感谢: 银河漫步, 十六夜?流歌

        --------------------------------------------------------------------------------------------------

        << autoassemble 函数说明 >>

        一、目前已支持的ce aa功能如下

        alloc

        label

        registersymbol

        unregistersymbol

        globalalloc

        full access (有某种限制, 不是所有内存区都有效)

        aobscan ? ? ? ? (支持使用??或*表示未知字节)

        createthread ? ?(此命令不管写在哪里, 永远是脚本中最后运行)

        define

        dealloc

        assert ? ? ? ? ?(支持使用??或*表示未知字节)

        readmem

        地址:行可用地址表达式 ? (请参看 getaddress 函数说明)

        db, dw, dd, dq 命令, 分别为单, 双, 四, 八字节数组写入

        #123 ? ? ? ? ? ?表示十进制

        (int)123 ? ? ? ?同样表示十进制

        (float) ? ? ? ? 单精度浮点数(4字节)

        (double) ? ? ? ?双精度浮点数(8字节)

        例:

        mov [eax],(float)3.5

        dd (float)123.5 (float)100

        dq (double)200.75

        注释方式有三种: ?//单行 ? /*多行*/ ? {多行}

        支持调用游戏空间中存在的 win api 符号

        例:

        在游戏中调用两个api

        先调用messageboxa显示一个"bye bye"信息

        接着调用exit

        process结束游戏进程

        [enable]

        alloc(newmem,4096)

        label(text)

        newmem:

        push 0

        push 0

        push text

        push 0

        call messageboxa

        push 0

        call exitprocess

        ret

        text:

        db 42 59 45 20 42 59 45 0 ?// "bye bye"

        createthread(newmem)

        [disable]

        dealloc(newmem)

        二、自定义符号表与人造指针

        在aa脚本中可用如下方式加入自定义符号

        registersymbol(pointer)

        alloc(pointer,4)

        或者也可只用一行

        globalalloc(pointer,4)

        以上两种方式将pointer这个符号加入自定义符号表

        并且动态分配了4字节的内存空间给pointer

        我们不必知道这个4字节空间的正确地址

        我们只要用pointer这个名称就可以代表该地址了

        接下来可以把pointer当做人造指针, 在其内放入游戏数据的有效地址

        由于自定义符号表为所有使用aa引擎的脚本共享

        包含所有其他aa脚本, 在本脚本启动以后, 都可以直接以[pointer]当做地址使用

        由于pointer是代表着由alloc分配的动态地址

        人造指针实际是存放在地址pointer处

        因此一般都是以[pointer]的形式来使用

        也可以使用getaddress函数, 直接取得pointer自身的地址, 或其内人造指针[pointer]的地址

        当不再使用pointer的时候, 可以如下方式取消pointer符号名及分配的内存空间

        unregistersymbol(pointer)

        dealloc(pointer)

        七、汇编代码编写注意:

        由于使用了od的汇编编译器, 其汇编代码格式较ce严格

        不过我已经加入了汇编代码自动修正功能

        例如原先必须写为 mov dword ptr [exa+ebx*4+0c],0c8 的代码

        已经可以直接写为 mov [eax+ebx*4+c],c8

        如果还是出现编译错误, 表示自动修正无法修正, 请依下列方式自行修正代码

        1). 出现"unknown identifier"编译错误时:

        可能为汇编编译器无法正确识别寄存器, 指令, 与数值

        解决方法为, 所有数值, 如果是a到f等英文字母开头的, 前面加一个0

        如c要写成0c, a8b300要写成0a8b300

        2). 出现"command does not support given operands"

        或"unrecognized command"错误时:

        可能为数据长度错误

        一般情况, 如果没有指名长度, 则将一律视为4字节长度

        例如 mov [esi+30],3f800000

        将自动转换为 mov dword ptr [esi+30],3f800000 再送给编译器

        若出现这个编译错误, 则请自行指定正确的数据长度

        数据长度的表示法有以下几种:

        单字节 byte ptr

        双字节 word ptr

        四字节 dwrod ptr

        八、目前不支持的ce aa功能:

        loadlibrary

        loadbinary

        include

        九、外部代码区:

        ce的aa脚本分为三个区段: [enable], [disable], 外部代码(outer codes)区

        外部代码区指的是在[enable]之前的区域, 或可称为前置区

        放在这里的代码, 为无论选择[enable]或[disable], 都会被运行

        会放在这里的一般是aobscan

        十、本aa引擎专有功能:

        assert2(地址,字节数组,"选填错误信息")

        功能同 assert, 可选填错误信息

        例: assert2(00081048,12 ff 3c 78,"wrong game version!")

        aobscan2(名称,字节数组,起始地址,结束地址,第几个命中目标,"选填错误信息!")

        功能同 aobscan, 设定项目较多, 若不要显示错误信息, 则使用 "" 表示无信息

        例1: aobscan2(aobstart,12 34 56 78,00400000,7fffffff,1,"wrong game version!")

        例2: aobscan2(aobstart,12 ff 3c 78,0,7fffffff,1,"")

        上例2等同于aobscan

        十一、其他注意事项:

        aa引擎以脚本内容分辨不同的脚本

        一个脚本运行[enable]之后, 在运行[disable]之前

        不能对该脚本进行任何改变, 包含任何空白回车或注释

        否则会被视为不同脚本, 则dealloc等命令将无法正确运作

        --------------------------------------------------------------------------------------------------

        << getaddress 函数说明 >>

        接受地址表达式, 返回最终地址

        地址表达式目前支持:

        1. 基地址+-*运算

        2. 指针表达式 [[[xxxxx+xx]+xx]+xx]+xx

        例:

        [[0040de00]-4]+c

        3. 模块基址+偏移, (本功能需要vista或xp sp1以上支持)

        不分英文大小写, 若要区分大小写可使用 " " 包住模块名

        例:

        game.exe

        game.exe+27d0

        game.dat+38c

        "game.exe"+27d0

        kernel32.dll

        4. 可使用由aa脚本生成的符号(人造指针)

        在aa脚本中加入一个自定义符号后, 可直接使用

        假若该符号为pointer

        例:

        pointer ? ? ? ? // 取得pointer符号自身被alloc分配的地址

        [pointer] ? ? ? // 取得pointer内存放的人造指针

        需要配合aa直译器使用: #

        ol" style="display: none;"> ( 1 / 1 )

        本页Html网址:/htmlsoft/58281.html

        本页aspx网址:/soft.aspx?id=58281&bianhao=20240101_020644_718089&kind1=09编程开发&kind2=编程工具

        上一篇:Eclipse IDE for Android

        下一篇:AA直译器

        增加   


        相关评论        新窗口打开查看评论