吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25155|回复: 22
收起左侧

[调试逆向] 【原创】一个使用CE自动汇编的例子

[复制链接]
Silent_DXX 发表于 2019-4-24 16:11
本帖最后由 Silent_DXX 于 2019-4-24 16:18 编辑

一个使用CE 自动汇编的例子

工具说明:

Cheat Engine 6.8
MingW(gcc)

程序源码

说明:

程序分为两个部分,第一部分为CE获取变量地址,第二部分是将要注入代码的地方

#include <stdio.h>

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 1
Program OutPut 2
Program OutPut 3
.
.

我期望它的输出

hello 4
hello 5
hello 6
.
.

调试过程

0x00

执行程序 test.exe
微信截图_20190424143322.png

0x01

CE中打开进程 test.exe
微信截图_20190424143337.png

0x02

CE输入0,点击新的扫描
微信截图_20190424143415.png

0x03

程序中执行回车一次,并在CE中输入1,点击再次扫描,这个会得到变量index内存地址,应该与程序中的输出一致
微信截图_20190424143559.png

0x04

在程序中输入 c 并执行回车,则会进入我们将要注入代码的地方。

0x05

将地址0x60FF1C,添加到地址列表中,并在其上右击选择找出是什么访问了这个地方,很快我们就会看到CE捕获到了对这个内存的读写操作,点击显示反汇编程序
微信截图_20190424154634.png

0x06

绿色那一行,便是我们要注入的地方(这块需要懂汇编)
选中绿色这行代码,在菜单中选择工具->自动汇编
在自动汇编窗口的菜单选择模板->代码注入,然后点击OK,CE会帮助我们自动生成一些代码
微信截图_20190424143851.png
Snipaste_2019-04-24_14-46-58.png

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 0A

newmem: //this is allocated memory, you have read,write,execute access
// place your code here
// 修改之后的代码
push edx     // 参数二不进行修改
push newstr  // 修改参数一, 字符串为"hello %d\n"
call printf

originalcode:
// 注释原代码
//push edx
//push test.exe+3041

exit:
jmp returnhere

"test.exe"+13BF:
// 修改代码注入的汇编, 主要是执行跳转, 去掉不必要的代码
// jmp 5 byte, E9 [addr]
jmp newmem
// nop 1 byte, 0x90
nop
nop
nop
nop
nop
nop
returnhere:
0x08

改完代码之后,点击执行,执行成功后,程序便会输出预计的效果
微信截图_20190424144936.png

相关的文件在这里下载

链接: https://pan.baidu.com/s/1YrJ4KXbQzKn6k15kvuZK6g
提取码: 17q3

免费评分

参与人数 13威望 +1 吾爱币 +21 热心值 +12 收起 理由
willJ + 1 + 9 + 1 期待楼主更多这样的教学文章出现。
漠北孤狼 + 1 热心回复!
zbaby523 + 1 + 1 谢谢@Thanks!
iamoutdoors + 1 谢谢@Thanks!
路明天 + 1 + 1 用心讨论,共获提升!
Dmail + 1 + 1 谢谢@Thanks!
小生是书痴 + 1 + 1 流弊克拉斯
朱朱你堕落了 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
nj001 + 1 + 1 热心回复!
黑龍 + 3 + 1 谢谢@Thanks!
周峻弘 + 1 + 1 谢谢@Thanks!
lin3801358 + 1 + 1 我很赞同!
JackDx + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Ganlv 发表于 2019-4-28 02:21
Silent_DXX 发表于 2019-4-26 14:50
我在CE中没有试验成功呢

这是我之前写的一个,你可以参考一下
[Asm] 纯文本查看 复制代码
[ENABLE]

{$LUA}
hwnd = findWindow(null, "Getting Over It")
return "define(hwnd,#" .. hwnd .. ")"
{$ASM}

alloc(caption,20)
alloc(newmem,1000)

caption:
  db 'Flappy Bird',0

newmem:
  push eax
  push caption
  push hwnd
  call user32.SetWindowTextA
  pop eax
  ret

createthread(newmem)

[DISABLE]

dealloc(caption)
dealloc(newmem)


帖子链接 https://www.52pojie.cn/thread-692068-1-1.html
gunxsword 发表于 2019-4-24 16:31
whatdos 发表于 2019-4-24 17:51
沧海神月 发表于 2019-4-24 21:26
不错哦,教程很详细
166818008 发表于 2019-4-24 22:19
好多都看不懂,能不能详细一点,讲一下原理
xiaohao1887 发表于 2019-4-24 23:07
真的超级喜欢,非常支持
Cno 发表于 2019-4-25 00:00
厉害了,感谢楼主分享
葱头呀 发表于 2019-4-25 08:03
自动编汇,厉害 ,谢谢分享
小生是书痴 发表于 2019-4-25 08:29
流弊流弊  二楼的回复也流弊
r_longbow 发表于 2019-4-25 09:07
ce都可以用来干这个了,真是强大
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 10:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表