首页
社区
课程
招聘
一个修改内存的代码用delphi不会写,希望有人指点下
发表于: 2010-2-8 16:19 5481

一个修改内存的代码用delphi不会写,希望有人指点下

2010-2-8 16:19
5481
0053BB1A - 8b 91 88 00 00 00          - mov edx,[ecx+00000088]
-                                                     mov eax,[ebp-0000208c]
                                                       mov ecx,[eax+00000088]

  我想把这句用D注入到目标进程然后写成这样  
  0053bb20  jmp 7ff0000[这个地址是我动态分配的内存]
  然后
1 7ff0000  mov edx,[ecx+000088]
2  cmp edx,我指定的值。
3 jnz 5
4   mov [我分配的地址],edx  //如果edx和我指定的值不对
  5 则mov [我分配的另一个地址],edx

  我现在想到的方法是

  先自己定义一个函数
  function myadd;
  begin
  end;

然后在
pbyte(0053BB1A)^:=$e9;
pint(0053BB1A+1)^:=integer(@myadd);

但是myadd的具体过程不会写。首先,我如何在myadd里面得到edx的值呢/?如果得不到,我就无法实现和我指定的值的对比

然后,我在这个函数里面。如果我对比的值都不存在或者存在。还需要再跳转到
mov eax,[ebp-0000208c]来继续执行。
这个我想不出来怎么写。我现在想到的方法只能是自己用CE写好。然后把字节记录下来

然后一个字节一个字节的输入进去。
希望大家帮我指点下。谢谢 。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
看了3遍  不懂楼主是个什么意思
我非常希望楼主能从广义上提一个问题  
eg. dll怎样注入到目标进程?  等等

ps.我肤浅了。。。觉得我说的不对  大家使劲拍砖!
2010-2-8 17:05
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是DLL注入的问题。类似于HOOK API。  我想HOOK这段代码。好得知
0053BB1A - 8b 91 88 00 00 00          - mov edx,[ecx+00000088]
-                                                     mov eax,[ebp-0000208c]
                                                       mov ecx,[eax+00000088]
我用CE改成 MOV EDX,[ECX+0000888]
从这段改起。改成

jmp 7fff000

////////////
7ff0000 mov edx,[ecx+000888]
mov  [72fff00],edx  //这里的72fff000是我用CE分配的一个内存地址
jmp 0053BB1A+6

我想用DELPHI 来注入我的过程。

比如
0053BB1A - 8b 91 88 00 00 00          - mov edx,[ecx+00000088]

这个。我注入成 jmp 我自己的函数

我在自己的函数里面读出edx并返回到跳转后的下一行。
2010-2-8 17:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
// 大概就像下面那样格式就行了。
function myadd:Integer;
asm
  mov edx,[ecx+$000888]
  mov  [Memory],edx
  mov eax,$0053BB1A+6
  jmp eax
end;
2010-2-8 18:26
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我试试。谢谢小虾。等我试过后再向你请教。
2010-2-8 19:20
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
function myfun:integer;
asm
mov edx,[ecx+$000888]
jmp eax
end;

procedure TForm1.sButton1Click(Sender: TObject);
begin
pbyte($0053BB1A)^:=$E9;
pint($0053BB1A+1)^:=integer(@myfun);
end;

我这样写。得出来
0053BB1A- e9 64 f7 4c 0b             - jmp 0b98e220

0B98E220 - 00 00                      - add [eax],al
0B98E222 - 00 ff                      - add bh,bh

但是里面的反汇编代码不对额。
是不是我哪里搞错了?
2010-2-8 19:32
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
var jmpcode:byte;
writeStart:integer;
ret:cardinal;
begin
jmpcode:=$E9;
WriteProcessMemory( GetCurrentProcess , pointer($0053BB1A), @jmpcode,1,ret);
WriteProcessMemory( GetCurrentProcess , pointer($0053BB1A+1), @myfun,4,ret);

我后来又改成这样。地址也变了。但是od无法访问我跳转的地址。
2010-2-8 19:42
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
小虾哥,请帮我再指点下。谢谢啦。
2010-2-8 20:08
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
可以BAIDU一下 DELPHI和C的代码很多的
2010-2-8 20:33
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
Twrt.jmp_code:= $eb;
    Twrt.jmpaddr:=integer(@isSelfAddr);
    Twrt.retcode:=$90;

   sedit1.Text:=inttohex(integer(@isSelfAddr),4);

   WriteProcessMemory( GetCurrentProcess , pointer($00578c12), @Twrt.jmp_code,1,ret);
   WriteProcessMemory( GetCurrentProcess , pointer($00578c12+1), @Twrt.jmpaddr,4,ret);
WriteProcessMemory( GetCurrentProcess , pointer($00578c12+1), @Twrt.nopcode,1,ret);

关键是我自己函数的地址。写到内存中的和我在sedit里面读出来的不一样。好像第二个写入内存只写了一个字节。这是为什么?
2010-2-8 21:01
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我写入的地址是三字节的。我用CE改。会把下面的字节也改掉。为什么这个就不行呢。
2010-2-8 21:04
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谁来帮帮我啊。我学了二天了。还是没搞定。
2010-2-8 23:10
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
13
jmp的偏移地址不能直接这样改,必须进行计算才能得到,计算公式是:你的函数地址-要修改的地址-jmp指令长度(短跳是2,长跳是5)=jmp跳转的偏移指令。
2010-2-9 09:28
0
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
delphi我不会,呵呵,我只会C
2010-2-9 10:06
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
完全路过 不懂呵呵
2010-2-9 10:43
0
雪    币: 124
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
已经搞定了。谢谢小虾.
2010-2-26 11:00
0
游客
登录 | 注册 方可回帖
返回
//