檔案進製反轉 反轉字串繞殺軟

2021-10-12 16:52:03 字數 2260 閱讀 1442

在github有乙個ssi的專案,專案位址如下: 他可以實現shellcode的遠端載入(十六進製制),當然ldrakura也曾經搞過類似的專案(我偷電瓶車養你啊),當時還是一次專案時繞卡巴斯基的時候他丟我的。本文將簡單介紹該項目的原理,並給出其他實現方法。

shellcode處理

首先需要處理shellcode,這裡推薦使用kali直接處理,推薦下面的兩種方法。

cat 1.txt | grep -v unsigned|sed "s/\"\\\x//g"|sed "s/\\\x//g"|sed "s/\"//g"|sed ':a;n;$!ba;s/\n//g'|sed "s/;//g"
或者

載入原理

載入器通過引數的方式傳遞hex的shellcode到載入器內,然後使用一些操作還原shellcode,這裡有一些需要注意的點,比如陣列的長度為1066,那麼他就是由shellcode[0]=f到shellcode[1665]=7構成後面加上乙個終止符,此時strlen(shellcode)=1666,sizeof(shellcode)=1667,所以在計算長度時便需要這樣  x=(sizeof(shellcode) - 1) . or x= strlen(shellcode),因為每兩個位元組為一組,所以我們在分配記憶體時,需要進行除二操作,比如bytes = (sizeof(shellcode) - 1)/2  或者 bytes = strlen(shellcode)/2。

接下來便是還原shellcode的操作了

for(unsigned int i = 0; i< iterations-1; i++)
或者使用下面這樣的方法:

void asciitohex(char * pascii, unsigned char * phex, int nlen)    // for (int j = ...)             phex[i] = nibble[0] << 4;   // set the high nibble             phex[i] |= nibble[1];   //set the low nibble       }   // for (int i = ...) }
然後剩下的便是分配記憶體、裝入shellcode,作者使用的是

(*(void (*)()) exec)();
來進行最後的載入。

測試明白原理之後,重新編譯(原檔案md5可能已被標記),使用360全家桶進行掃瞄:

聯網情況下是沒有任何問題的,然後上線我們的cs試試:

可直接上線,注:x64的shellcode上線有問題,程式會崩潰。

修改更改shellcode前幾個位元組,然後載入到記憶體更改回來,然後解密hex載入,並更改shellcode載入方式。

更改載入的方法之前也是發過的。

反轉方式如下:

char first = "\xfc";memcpy(shellcode,fisrt,1);
載入方式如下:

typedef void (*some_func)();   some_func func = (some_func)exec;   func();
ps:只是更改了乙個寫法。

測試彈出計算器:

windows defender上線測試:

總結:歡迎star

字串反轉,單詞反轉

一 字串反轉,共蒐集了 7 種方法 public class stringreversed public static void reverse1 string s char c s.tochararray 方法二 for int i 0 i s.length 2 i for char l c sy...

字串反轉

據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...

字串反轉

include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...