首页
社区
课程
招聘
[原创]输出指定内存中的内存数据 WIN32汇编语言编写
发表于: 2006-10-29 11:47 5828

[原创]输出指定内存中的内存数据 WIN32汇编语言编写

2006-10-29 11:47
5828
不用汇编写代码有几个月了,上次写了利用远程线程注入目标进程的方法。现在注入方面的文章很多了,我就不献丑了。既然DLL已经进入目标进程了,那么能干什么呢。我想肯定需要读取内存数据吧,可能有人说读取数据根本不用插入DLL,我说那是你还没有遇到过,有些进程必须插入,而且对于交互行很强的程序,必须动态的实时读取指定内存中的数据。并且显示出来。我今天写的代码就是把一段指定内存中的数据读取出来,比如内存数据是
31 32 33 那么读取出来后,应该还是31 32 33而不是ASCI码的1 2 3
好了下面是代码,高手就不用看了,希望对新手能有帮助,毕竟类似的代码我看还没有人发布过。
    .386
    .model flat,stdcall
    option casemap:none
include      windows.inc
include      gdi32.inc
includelib      gdi32.lib
include      user32.inc
includelib      user32.lib
include      kernel32.inc
includelib      kernel32.lib

.data
    szTestOut db " %02X", 0
        sztest        db '12345678',0         
    szBuffer  db 100 dup(0)
;atest                db       

.code
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;格式化内存信息为文本   三个参数分别为内存数据长度,内存数据地址,格式化后的保存地址
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
_MenText        proc        uses edx ecx ebx eax _size,_addr,_output
               
                mov        edx,_addr
                mov        ecx,_output
                mov        ebx,_size
                .while        ebx!=0
                        push        edx
                        xor        eax,eax
                        mov        al,[edx]
                        invoke wsprintf,ecx,addr szTestOut, eax
                        add        ecx,2
                        pop        edx
                        inc        edx
                        dec        ebx                               
                .endw  
                ret                                      

_MenText endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
start:

        invoke _MenText,8,addr sztest,addr szBuffer
        invoke MessageBox,0,addr szBuffer,NULL,MB_OK
        invoke ExitProcess,NULL
end start
代码看起来很简单,但是也让我调试了一上午才完全调试好,其中出了一个小错误,就是我的函数中使用到了edx ecx ebx eax 等寄存器,并且调用了wsprintf,程序不能正常运行的时候,我用OD跟踪分析后才发现,原来当我调用了wsprintf后,我的EDX寄存器的内容被改变了,导致我程序无法正常运行,后来我在前后分别加了 PUSH EDX 和POP EDX 后,程序正常。于是我又开始不理解了,微软那么多天才程序员到底是怎么设计API的,连我这个菜鸟都知道,函数开始前要保存积存器内容,函数结束后要恢复积存器内容,这么简单的事情他们都不知道?还是因为目前我是菜鸟,无法理解他们的高深用意?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
楼主记错了,edx是不受保护的,eax和ecx也一样
2006-10-29 16:02
0
雪    币: 235
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
经测试,你的程序还是不能正常运行!
2006-10-30 15:02
0
雪    币: 206
活跃值: (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
3楼的,你怎么测试的?你环境是什么?
我刚刚测试过,上面的代码没有问题
我用的是RadASM 2.2.03
你用这个编程环境,新建立一个EXE工程
然后把我上面的代码,完全复制到你工程的.Asm文件中
然后编译、运行。
我就是这样测试的,程序完全正常
2006-10-30 17:45
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
5
最初由 回心转意 发布
不用汇编写代码有几个月了,上次写了利用远程线程注入目标进程的方法。

........


不知楼主能否把“远程线程注入目标进程”的代码发出来我学习学习?
2006-10-31 18:42
0
雪    币: 324
活跃值: (57)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
XPsp2下不能正常运行的,该内存不能为写
2006-12-24 13:40
0
雪    币: 226
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样在xp下可以运行

    .386
    .model flat,stdcall
    option casemap:none
   
   
include         windows.inc
include         gdi32.inc
includelib      gdi32.lib
include         user32.inc
includelib      user32.lib
include         kernel32.inc
includelib      kernel32.lib

.data
    szTestOut   db " %2x", 0
    sztest      db '12345678',0         
    szBuffer    db 100 dup(0)
    szCaption   db '内存信息',0

.code
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;格式化内存信息为文本   三个参数分别为内存数据长度,内存数据地址,格式化后的保存地址
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
_MenText  proc   _size,_addr,_output
    pushad
    mov  edx,_addr       ;将需要输入的数据地址给edx
    mov  esi,_output     ;将输出文件的地址
    mov  ebx,_size
    .while  ebx!=0
      push  edx
      xor  eax,eax
      mov  al,[edx]
      invoke wsprintf,esi,addr szTestOut, eax
      add esi,3
      pop  edx
      inc  edx
      dec  ebx        
    .endw  
    popad
    ret                                      

_MenText endp
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
start:

  invoke _MenText,8,addr sztest,addr szBuffer
  invoke MessageBox,0,addr szBuffer,addr szCaption,MB_OK
  invoke ExitProcess,NULL
end start
2006-12-26 14:14
0
游客
登录 | 注册 方可回帖
返回
//