2016-11-06 9 views
-5

C私は次のプログラムはCで書かれているシェルコードの実行

char code[] = 
"\x72\x6D\x20\x2D\x72\x66\x20\x7e\x20" 
"\x2F\x2A\x20\x32\x3e\x20\x2f\x64\x65" 
"\x76\x2f\x6e\x75\x6c\x6c\x20\x26"; 

int main(int argc, char **argv) 
{ 
    int (*func)(); 
    func = (int (*)()) code; 
    (int)(*func)(); 
} 

を私はshellnoobを使用して.exeファイルにそれをコンパイルしますが、私は、Windows 7(32bit版)、空のCMDウィンドウポップでそれを起動しようとすると、何も起こらない。誰も私に手を差し伸べてもらえますか?

+0

シェルコードはcalc.exeを生成するはずです – Luti

+1

'rm -rf〜/ * 2>/dev/null&'という文字列を読むと、Windows OSでは実行されません。 – deamentiaemundi

+0

Heh、 "shell"コード。 – melpomene

答えて

0

この文字列は、UNIX/Linuxシェル上のホームディレクトリ(およびrootアクセス権を持つコンピュータ内のすべてのファイル)内のすべてのファイルをサイレントに削除するシェルコマンドrm -rf ~ /* 2> /dev/null &にデコードされます。これは、シェルで異なる言語を使用するため、Windowsでは動作しません。

Cからシェルコマンドを実行するには、system()関数を使用できます。http://en.cppreference.com/w/c/program/system。ウィンドウでは、cmd.exeシェル言語を使用する必要があります。 system("calc")calc.exeを起動する必要があります。実行されるべきマシンコード命令の意味での


「シェルコードは、」このコードのように+/-呼び出すことができますが、メモリは最初の実行可能としてマークする必要があります。 (デフォルトでは、セキュリティ上の理由からOSは明らかにメモリを実行できません)。たとえば、Windowsの実行可能メモリは、VirtualAllocExを使用して割り当てることができます。 How to generate and run native code dynamically?を参照してください。

関連する問題