ですから、バッファオーバーフローに関するいくつかの調査を行っています。私はjavaに変換しようとしている可変的な攻撃に対して脆弱なCプログラムを持っています。誰も彼らが私を助けることができると思いますか?これまで私はまだJavaコードをコンパイルすることができませんでした。JAVAのバッファオーバーフロー
Cコード
#include <stdio.h>
#include <string.h>
/*
A routine that checks whether the password is correct or not
Standard library call "gets()" does not check for buffer overflow
*/
int checkPassword(){
char passwordFlag = 'F';
char inputPwd[10];
memset(inputPwd, 0, 10);
gets(inputPwd);
if (!strcmp(inputPwd, "goodpass")){
passwordFlag = 'T';
}
if (passwordFlag == 'T'){
return 1;
}
else{
return 0;
}
}
int main()
{
printf("Please enter a password\n");
if (checkPassword() == 1)
{
printf("Successful\n");
return 0;
}
else{
printf("Access Denied.\n");
return -1;
}
}
Javaコード(現在はコンパイルしない)バッファオーバーフローの種類は、Javaに存在しない
import java.io.*;
class Numbers {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please enter a password");
if (checkPassword() == 1)
{
System.out.println("Successful");
System.exit(1); //you wouldn't exit here but its not like i'm doing anything important
}
else{
System.out.println("Access Denied.");
System.exit(1);
}
}
public static Integer checkPassword(){
char passwordFlag = 'F';
char inputPwd[10];
memset(inputPwd, 0, 10);
gets(inputPwd);
if (!strcmp(inputPwd, "goodpass")){
passwordFlag = 'T';
}
if (passwordFlag == 'T'){
return 1;
}
else{
return 0;
}
}
}
Javaでは、memsetのは、取得しstrcmpのは未定義です。 – Alanmars
あなたのJavaコードについて多くのことがありますが...それはJavaではありません。 –
Cライブラリの関数名をJavaで使用するだけではありません。これらのタスクを達成するには、Javaの方法を学ぶ必要があります。 – Nayuki