首页 神兵利器正文

CE常用命令解析 之 常用注入汇编代码

欲儿 神兵利器 2022-06-09 2391 3

常用命令解析

[ebp-14]括号中间的其实是一个16进制的内存地址,但是该地址是ebp-14(ebp和14都是十六进制)。简单理解就是[]就是取中间寄存器的内存地址


mov 赋值

将10[16进制],存入到eax寄存器(或者你也可以理解为变量eax,不过这么理解不太恰当)中

mov eax,10


cmp 比较

将esi和esp的值进行比较

cmp esi,esp


je 若比较结果相等

若比较相等,则跳到00E38D0

je 00E38DD0


jne 若比较不等

若比较不等,跳转00E38D0

jne 00E38DD0


add 加法

将eax + 1 (16进制下的运算)

add eax,01


sub 减法

将eax - 1  (16进制下的运算)

sub eax,01


push 推送某寄存器入栈

将eax寄存器推入栈

push eax


pop 将某栈内数据取出保存

将eax寄存器取出保存

pop eax


call 程序调用

调用00E3113B的程序

call 00E3113B


lea 赋值

有点类似于mov,但是该函数大多只用来存储内存地址,比如如下命令则意为将  [ebp-0C] ,存入eax 里面去

假设eax = 00E3133E ebp = 00F004EA 那么 ebp-0C = 00F004DE

运行代码以后

eax = 00F004DE , ebp = 00F004EA , ebp-0C = 00F004DE

lea eax,[ebp-0C]


常用的注入代码

其实就几个就够了,我给大家贴一点注释就好

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
aobscan(demo,83 C0 01 89 45 EC 8B F4)//搜索 83 C0 01 89 45 EC 8B F4 这个特征码,搜索出来的结果是一个指针 demo是指针变量
alloc(newmem,2048)//开辟一个内存空间,2048是 2048个字节
alloc(ret,2048)
registersymbol(ret)//为自己开辟的内存空间注册入程序
label(returnhere)//这是标签,让这个东西像call一样可以被调用
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
add eax,01
mov [ebp-14],eax
push esi
lea esi ,[ebp-14]
mov [ret],esi
pop esi

exit:
jmp returnhere

demo:
jmp newmem
nop
returnhere:


 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
dealloc(ret)//开辟了就要关闭,防止野指针过多导致游戏崩溃
unregistersymbol(ret)//注册了也要取消注册,好的就这样了
demo:
add eax,01
mov [ebp-14],eax
//Alt: db 83 C0 01 89 45 EC



有些时候用aobscan特征码搜出来的东西,有些时候想要的是特征码搜出来的地址,这个该怎么操作呢

下面是一个案例,脚本运行以后,手动添加指针ret,将值改为字符数组,就是存的内存地址了

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
aobscan(demo,cc 0a 00 00)
alloc(ret,2048)
registersymbol(ret)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
mov eax,[ebp-14]
push eax
push testfuck.exe+1CCD0
push esi
mov [esi],demo//把搜出来的demo存给esi
mov [ret],esi//再把esi的内存值给ret
pop esi

exit:
jmp returnhere

"testfuck.exe"+18C0E:
jmp newmem
nop 4
returnhere:


 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"testfuck.exe"+18C0E:
mov eax,[ebp-14]
push eax
push testfuck.exe+1CCD0
//Alt: db 8B 45 EC 50 68 D0 CC AE 00


同样的也可以不要地址要值,直接把值存给ret就行

mov [ret],demo


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

精彩评论