首页
社区
课程
招聘
[讨论]远程注入内联汇编百思不得其解
发表于: 2008-7-30 22:22 6323

[讨论]远程注入内联汇编百思不得其解

2008-7-30 22:22
6323
为了调用一个进程中的过程,我是用了远程注入,注入函数里使用了内联汇编,代码如下:
static DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
        _asm
        {
                pushad
                mov    ecx, 0x20000000
                mov    eax, 0x00444444
                call   eax
                popad
               
        }
        return 0;
}
运行出错

接着分析了一下,注入函数改为:
static DWORD WINAPI ThreadFunc(LPVOID lpParam)
{

        return 0;
}
运行程序没问题
注入函数改为:
static DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
        _asm
        {

               
        }
        return 0;
}
运行报错
问题很显然跟内联汇编有关系,不知我应该如何写注入函数才不会出错?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 282
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
编译选项的问题。
检查栈是否溢出,手头没有环境,自己找一下吧。
要不就用naked函数。
看着像Debug版,Release有可能没问题
2008-7-30 22:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
编译选项如何设置?
2008-7-31 06:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
调试被注入进程发现注入代码如下:
0B750000    55              push    ebp
0B750001    8BEC            mov     ebp, esp
0B750003    81EC C0000000   sub     esp, 0C0
0B750009    53              push    ebx
0B75000A    56              push    esi
0B75000B    57              push    edi
0B75000C    8DBD 40FFFFFF   lea     edi, dword ptr [ebp-C0]
0B750012    B9 30000000     mov     ecx, 30
0B750017    B8 CCCCCCCC     mov     eax, CCCCCCCC
0B75001C    F3:AB           rep     stos dword ptr es:[edi]
0B75001E    60              pushad
0B75001F    B9 A8B8AA22     mov     ecx, 20000000
0B750024    B8 F06B4A00     mov     eax, 444444
0B750029    FFD0            call    eax
0B75002B    61              popad
0B75002C    33C0            xor     eax, eax
0B75002E    5F              pop     edi
0B75002F    5E              pop     esi
0B750030    5B              pop     ebx
0B750031    81C4 C0000000   add     esp, 0C0
0B750037    3BEC            cmp     ebp, esp
0B750039    E8 EBE4FFFF     call    0B74E529
0B75003E    8BE5            mov     esp, ebp
0B750040    5D              pop     ebp
0B750041    C2 0400         retn    4

发现问题是由于0B750039    E8 EBE4FFFF     call    0B74E529这一句造成,把这一句nop掉,能正常运行,百思不得其解的是这一句是如何产生的?
2008-7-31 06:52
0
雪    币: 952
活跃值: (1941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
编选项导致的 编译器产生代码检查溢出之类的
这样试试
__declspec(naked) DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
  _asm
  {
    pushad
    mov    ecx, 0x20000000
    mov    eax, 0x00444444
    call   eax
    popad
    ret 4
  }
}
2008-7-31 09:18
0
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
6
VS2005 DEBUG模式编译的吧,把检查缓冲区堆栈选项去掉
2008-7-31 09:26
0
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
栈不平衡吧~~~
2008-7-31 10:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢,解决了
2008-7-31 20:44
0
游客
登录 | 注册 方可回帖
返回
//