- 軟件大小(xiǎo):183KB
- 軟件語言:中(zhōng)文(wén)
- 軟件類型(xíng):國產軟件
- 軟件類別:免(miǎn)費軟件(jiàn) / 編(biān)程工具
- 更新時間:2014-12-31 17:31
- 運行環境:WinAll, WinXP
- 軟件等級:
- 軟件(jiàn)廠商:
- 官方網站:http://www.chithemodel.com
446KB/中(zhōng)文/10.0
4KB/中文/10.0
4.17M/中文/10.0
24KB/中(zhōng)文(wén)/10.0
356KB/中(zhōng)文/10.0
CE自動匯編直譯器: AA引擎(qíng) 各語言(yán)通(tōng)用(yòng)DLL - aa_engine.dll
1). 運行CE AA腳(jiǎo)本
bool AutoAssemble(HANDLE hProcess, char * aa_script, int command);
1). hProcess: 遊戲句(jù)柄(bǐng)
2). aa_script: CE AA(自(zì)動匯編)腳本(běn)
3). command: 1為運行[ENABLE], 0為(wéi)運行[DISABLE]
4). 返回: 運(yùn)行成功返回真, 失敗返回假
2). 取地址
DWORD GetAddress(HANDLE hProcess, char * address_line);
1). hProcess: 遊戲句(jù)柄
2). address_line: 地(dì)址表達式, 支持指針+偏移+模塊基址+AA腳(jiǎo)本做的人造指(zhǐ)針+遊戲空間中存在的API
3). 返(fǎn)回: 成功返(fǎn)回地址, 失敗返回0
3). 取AA引擎版本號(hào)
char * Ver();
返回版本號(hào)(文本(běn))
易語(yǔ)言數據類型對(duì)照:
int, DWORD, HANDLE = 整數型
char * = 文本型 或 字節集型(傳址打勾)
bool = 邏輯型(xíng) 或 整數型
VC2008動態(tài)調(diào)用DLL方(fāng)法:
HMODULE hDLL = LoadLibrary(TEXT("aa_engine.dll")); // 載入DLL
// 調用(yòng)AutoAssemble
typedef BOOL (FAR WINAPI *PROC1)(HANDLE,char*,int);
PROC1 pAutoAssemble=(PROC1)GetProcAddress(hDLL,"AutoAssemble");
(pAutoAssemble)(hProcess,aa_script,1);
// 調(diào)用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); // 釋(shì)放DLL
--------------------------------------------------------------------------------------------------
1. (flaot)和(double)轉換
2. DQ命令(lìng)
更新beta 13:
1. 匯編代碼自動修正功能增加一個(gè)錯誤處理
--------------------------------------------------------------------------------------------------
1). 使用(yòng)標準WINAPI(__stdcall)格式導出(chū)函數, 各語言以一般宣告API的方式皆可調用(yòng)
2). 需要 VS2008SP1運行庫(kù) (僅4MB)
3). 部分功能需要Vista或XP SP1以(yǐ)上運行環境
4). 可任意改(gǎi)名, 例(lì)如(rú)改成(chéng) XXX修改器.dll
5). 已使用(yòng)UPX 3.08壓(yā)縮加殼, 無毒(dú)
如(rú)有任何誤報, 可自行脫殼, 方(fāng)法(fǎ)為 upx.exe -d aa_engine.dll
脫殼(ké)後(hòu), 原(yuán)大小約為 160k
6). AA引(yǐn)擎由(yóu)CE 5.61的Delphi源碼(mǎ)中, 摘除並移植AA腳本直(zhí)譯器
外加OD的匯編編譯器(qì)(disasm)源碼(mǎ)作為心髒
本人axdx隻負責進行移(yí)植整合手術, 所有技術源自CE與OD
7). AA引擎原開發目的為(wéi)一個CheatMaker插件(jiàn)PC_AA.dll
8). 特別感謝: 銀河漫步, 十(shí)六夜?流歌
--------------------------------------------------------------------------------------------------
<< AutoAssemble 函數說明 >>
一、目前已支持的(de)CE AA功能如下
alloc
label
registersymbol
unregistersymbol
globalalloc
fullaccess (有某種限製, 不是(shì)所(suǒ)有內存區都有效)
aobscan (支持使用??或*表(biǎo)示未知字節)
createthread (此(cǐ)命令不管寫在哪(nǎ)裏, 永(yǒng)遠是腳本中最(zuì)後運行(háng))
define
dealloc
assert (支持使用??或*表示未知(zhī)字節)
readmem
地址:行(háng)可用地址表達式 (請參看 GetAddress 函數說明)
DB, DW, DD, DQ 命令, 分(fèn)別為單, 雙, 四, 八字(zì)節數組(zǔ)寫入
#123 表示十進製
(int)123 同(tóng)樣表(biǎo)示十進製
(float) 單(dān)精(jīng)度浮點數(4字節)
(double) 雙精度浮點(diǎn)數(8字節)
例:
mov [eax],(float)3.5
dd (float)123.5 (float)100
dq (double)200.75
注釋方式有(yǒu)三種: //單行(háng) /*多行*/ {多行}
支持調用(yòng)遊戲(xì)空間(jiān)中存在的 Win API 符號(hào)
例:
在遊戲(xì)中調用兩個API
先調用MessageBoxA顯示一個"BYE BYE"信息
接(jiē)著調用ExitProcess結束(shù)遊戲(xì)進程(chéng)
[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腳本中可用如下方式加入(rù)自(zì)定義符(fú)號
registersymbol(pointer)
alloc(pointer,4)
或者也可隻用一行
globalalloc(pointer,4)
以上兩種方式將pointer這個(gè)符(fú)號加入自定義(yì)符號表
並(bìng)且動態分配了4字節的(de)內存空間給pointer
我們不必知(zhī)道這個4字節空間的正確地址
我們隻(zhī)要用(yòng)pointer這個(gè)名稱就可以代表該地址(zhǐ)了(le)
接下來可以(yǐ)把pointer當(dāng)做人造指針, 在(zài)其內(nèi)放入遊(yóu)戲數據的有效地址
由於(yú)自(zì)定義符號表(biǎo)為所有使用AA引(yǐn)擎的(de)腳(jiǎo)本共(gòng)享
包含(hán)所(suǒ)有其他AA腳本, 在本腳本(běn)啟動(dòng)以後(hòu), 都可以直接以[pointer]當(dāng)做地址使(shǐ)用(yòng)
由於pointer是代表著由alloc分配的動態地址
人造指針實際(jì)是(shì)存放在地址pointer處
因此一(yī)般都(dōu)是(shì)以[pointer]的(de)形式來使用(yòng)
也可(kě)以使用GetAddress函(hán)數, 直(zhí)接取(qǔ)得(dé)pointer自(zì)身(shēn)的地址, 或其內(nèi)人造指針[pointer]的地址
當不再(zài)使用pointer的時候, 可(kě)以如下方式取消pointer符號(hào)名及分配的內存空間(jiān)
unregistersymbol(pointer)
dealloc(pointer)
七、匯編代碼編(biān)寫注意:
由於(yú)使(shǐ)用了OD的匯(huì)編編譯器(qì), 其匯編代碼格式較CE嚴格
不過我已(yǐ)經加入了(le)匯編(biān)代碼自動修正(zhèng)功能
例如原先(xiān)必須寫為 mov dword ptr [exa+ebx*4+0c],0c8 的(de)代碼(mǎ)
已經可以(yǐ)直接寫為 mov [eax+ebx*4+c],c8
如果還是出現(xiàn)編譯錯誤, 表示自動修(xiū)正無法修(xiū)正, 請依下列方式自(zì)行修正代(dài)碼
1). 出現"Unknown identifier"編譯錯誤(wù)時:
可(kě)能為匯(huì)編(biān)編(biān)譯器無法正確識別寄存器, 指令(lìng), 與數值(zhí)
解決方法(fǎ)為, 所有數值(zhí), 如果是A到F等英文(wén)字母開(kāi)頭的, 前(qián)麵加一個0
如c要(yào)寫(xiě)成0c, A8B300要寫成0A8B300
2). 出現"Command does not support given operands"
或"Unrecognized command"錯誤(wù)時:
可能為數據長度(dù)錯誤
一(yī)般情況, 如果沒有指名長度, 則將一律視(shì)為(wéi)4字節長度
例如 mov [esi+30],3f800000
將自動轉換為 mov dword ptr [esi+30],3f800000 再送給編譯器
若出現這個編譯錯誤, 則(zé)請自行(háng)指定正確的數據長度(dù)
數據(jù)長度的表示(shì)法有以(yǐ)下幾種:
單字節 byte ptr
雙字節 word ptr
四字節 dwrod ptr
八、目前不支持(chí)的CE AA功能:
loadlibrary
loadbinary
include
九、外部代碼區:
CE的AA腳(jiǎo)本分(fèn)為三個區段: [ENABLE], [DISABLE], 外部代碼(outer codes)區
外部代碼區指的是在(zài)[ENABLE]之前的區(qū)域(yù), 或可(kě)稱為前置區
放在這裏的代碼, 為無論選(xuǎn)擇[ENABLE]或(huò)[DISABLE], 都(dōu)會被運行
會放在這裏的一般是(shì)aobscan
十、本(běn)AA引(yǐn)擎專有功能:
assert2(地址(zhǐ),字節(jiē)數組,"選填錯誤信息")
功能同 assert, 可選填錯(cuò)誤信(xìn)息
例: assert2(00081048,12 ff 3c 78,"Wrong Game Version!")
aobscan2(名稱(chēng),字節數組,起始(shǐ)地址,結束地址,第幾個命中目標,"選填錯誤信息!")
功能同 aobscan, 設定項目較多(duō), 若不要顯示錯(cuò)誤(wù)信息, 則使用 "" 表示無信息
例1: aobscan2(aobstart,12 34 56 78,00400000,7FFFFFFF,1,"Wrong Game Version!")
例(lì)2: aobscan2(aobstart,12 ff 3c 78,0,7FFFFFFF,1,"")
上例(lì)2等同(tóng)於aobscan
十一、其他注意事項:
AA引擎以腳本內容分(fèn)辨不同(tóng)的腳本(běn)
一個腳本運行[ENABLE]之(zhī)後(hòu), 在(zài)運行(háng)[DISABLE]之前
不(bú)能對該腳本進行(háng)任何改變, 包含任何空白回車或注(zhù)釋
否則會被視為不同(tóng)腳本, 則dealloc等命(mìng)令將無法(fǎ)正確運作
--------------------------------------------------------------------------------------------------
<< GetAddress 函數說(shuō)明(míng) >>
接受(shòu)地址表(biǎo)達式, 返回最終地址(zhǐ)
地址表達(dá)式目前支持:
1. 基地(dì)址+-*運算(suàn)
2. 指針表達式 [[[xxxxx+xx]+xx]+xx]+xx
例:
[[0040de00]-4]+c
3. 模塊(kuài)基址+偏(piān)移, (本功能需要(yào)Vista或XP SP1以(yǐ)上支持)
不(bú)分英文大小寫, 若要區分大小(xiǎo)寫可(kě)使用 " " 包住模塊名
例:
game.exe
game.exe+27D0
game.dat+38c
"Game.exe"+27D0
kernel32.dll
4. 可使用由AA腳本生成的符號(人(rén)造(zào)指針)
在AA腳本中加入一個自定義(yì)符號後, 可直(zhí)接(jiē)使用
假若該符號為pointer
例:
pointer // 取得(dé)pointer符(fú)號自身被alloc分配(pèi)的地址
[pointer] // 取得pointer內存放的人造指針
需要配合AA直譯器使用:http://www.chithemodel.com/soft/29289.html
請描(miáo)述您所遇到的錯誤,我們將盡快予以修正,謝謝!
*必填項,請輸入內容