一个使用CE 自动汇编的例子
工具说明:
Cheat Engine 6.8
MingW(gcc)
程序源码
说明:
程序分为两个部分,第一部分为CE获取变量地址,第二部分是将要注入代码的地方
#include int main(){ int index = 0; char key = 0; printf("addr: 0x%x\n", &index); // CE 获取变量地址 for (;;) { printf("Test OutPut: %d\n", index); key = getchar(); if (key == 'c') { break; } index++; } index = 0; // 将要注入代码的地方 for (;;) { Sleep(1000); printf("Program OutPut: %d\n", index++); } return 0;}期待注入的效果
原程序的输出
Program OutPut 1Program OutPut 2Program OutPut 3..我期望它的输出
hello 4hello 5hello 6..调试过程
0x00
执行程序 test.exe
0x01
在CE中打开进程 test.exe
0x02
在CE输入0,点击新的扫描
0x03
程序中执行回车一次,并在CE中输入1,点击再次扫描,这个会得到变量index内存地址,应该与程序中的输出一致
0x04
在程序中输入 c 并执行回车,则会进入我们将要注入代码的地方。
0x05
将地址0x60FF1C,添加到地址列表中,并在其上右击选择找出是什么访问了这个地方,很快我们就会看到CE捕获到了对这个内存的读写操作,点击显示反汇编程序。
0x06
绿色那一行,便是我们要注入的地方(这块需要懂汇编)
选中绿色这行代码,在菜单中选择工具->自动汇编
在自动汇编窗口的菜单选择模板->代码注入,然后点击OK,CE会帮助我们自动生成一些代码
0x07
在原有的代码基础上更改将要注入的代码
alloc(newmem,2048)alloc(newstr,2048)label(returnhere)label(originalcode)label(exit)// 申请一段新的内存, 放置一个新的字符串newstr:db 'h'db 'e'db 'l'db 'l'db 'o'db ' 'db '%'db 'd'db 0Anewmem: //this is allocated memory, you have read,write,execute access// place your code here// 修改之后的代码push edx // 参数二不进行修改push newstr // 修改参数一, 字符串为"hello %d\n"call printforiginalcode:// 注释原代码//push edx//push test.exe+3041exit:jmp returnhere"test.exe"+13BF:// 修改代码注入的汇编, 主要是执行跳转, 去掉不必要的代码// jmp 5 byte, E9 [addr]jmp newmem// nop 1 byte, 0x90nopnopnopnopnopnopreturnhere:0x08
改完代码之后,点击执行,执行成功后,程序便会输出预计的效果
相关的文件在这里下载
链接: https://pan.baidu.com/s/1YrJ4KXbQzKn6k15kvuZK6g
提取码: 17q3
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |