🧼C, C++/자체제작 프로그램및 배포
파일 자가복제 C++ #1
개발환경 >> DevCpp
언어 >> C++11
운영체제 >> Windows10
안녕하세요!
이번에는 C++에서 파일을 자가복제하는방법에 대해서
알려드리겠습니다.
파일자가복제는 웜,악성코드등등에서 쓰이는기능들입니다.
일단 이번에 소개드릴내용들은
예를들어서 현재 내가 작업하고 있는 c++파일의 이름이 "Main.cpp"이면 Main.cpp를 불러오고
"dp.cpp"이면은 dp.cpp를 불러오는 방법입니다!!
그럼.... 시작하겠습니다.....!
<< 소스코드 >>
#include <iostream>
#include <cstring>
using namespace std;
class fileName{
private:
string str;
char ret[1000]={0};
int index,i,cnt;
public:
char* none(){
str = __FILE__;
ret[1000]={0};
cnt=0;
while(1){
index = str.find("\\");
if(index==-1) break;
for(i=0;i<=index;i++) str[i]='\0';
}
for(i=0;i<str.size();i++){
if(str[i]=='\0') cnt++;
else if(str[i]!='\0') ret[i-cnt]=str[i];
}
for(i=0;i<strlen(ret);i++)
if(ret[i]=='.') {
index=i;
break;
}
for(i=index;i<strlen(ret);i++) ret[i]='\0';
return ret;
}
char* origin(){
str = __FILE__;
ret[1000]={0};
cnt=0;
while(1){
index = str.find("\\");
if(index==-1) break;
for(i=0;i<=index;i++) str[i]='\0';
}
for(i=0;i<str.size();i++){
if(str[i]=='\0') cnt++;
else if(str[i]!='\0') ret[i-cnt]=str[i];
}
return ret;
}
char* custom(const char* name){
str = __FILE__;
ret[1000]={0};
cnt=0;
while(1){
index = str.find("\\");
if(index==-1) break;
for(i=0;i<=index;i++) str[i]='\0';
}
for(i=0;i<str.size();i++){
if(str[i]=='\0') cnt++;
else if(str[i]!='\0') ret[i-cnt]=str[i];
}
for(i=0;i<strlen(ret);i++)
if(ret[i]=='.') {
index=i;
break;
}
for(i=index+1;i<strlen(ret);i++) ret[i]='\0';
strcat(ret,name);
return ret;
}
};
int main(){
fileName fn;
cout << fn.none() << endl;
cout << fn.origin() << endl;
cout << fn.custom("exe");
}
저가 fileName이라는 클래스를 만들었습니다
멤버 함수는 none() , origin() , custom()입니다.
만약에 현재 내가 작업하고 있는 c++파일 이름이 "DP123.cpp"일 경우
none함수는 "DP123"을 반환합니다.
origin함수는 "DP123.cpp"를 반환합니다.
custom함수는 "DP123. 첫 번째 인자"를 반환합니다.
그러면 이걸 이용해서 자가복제 프로그램을 만들어보겠습니다
<< 응용(파일자가복제) >>
#include <iostream>
#include <cstring>
using namespace std;
class fileName{
private:
string str;
char ret[1000]={0};
int index,i,cnt;
public:
char* none(){
str = __FILE__;
ret[1000]={0};
cnt=0;
while(1){
index = str.find("\\");
if(index==-1) break;
for(i=0;i<=index;i++) str[i]='\0';
}
for(i=0;i<str.size();i++){
if(str[i]=='\0') cnt++;
else if(str[i]!='\0') ret[i-cnt]=str[i];
}
for(i=0;i<strlen(ret);i++)
if(ret[i]=='.') {
index=i;
break;
}
for(i=index;i<strlen(ret);i++) ret[i]='\0';
return ret;
}
char* origin(){
str = __FILE__;
ret[1000]={0};
cnt=0;
while(1){
index = str.find("\\");
if(index==-1) break;
for(i=0;i<=index;i++) str[i]='\0';
}
for(i=0;i<str.size();i++){
if(str[i]=='\0') cnt++;
else if(str[i]!='\0') ret[i-cnt]=str[i];
}
return ret;
}
char* custom(const char* name){
str = __FILE__;
ret[1000]={0};
cnt=0;
while(1){
index = str.find("\\");
if(index==-1) break;
for(i=0;i<=index;i++) str[i]='\0';
}
for(i=0;i<str.size();i++){
if(str[i]=='\0') cnt++;
else if(str[i]!='\0') ret[i-cnt]=str[i];
}
for(i=0;i<strlen(ret);i++)
if(ret[i]=='.') {
index=i;
break;
}
for(i=index+1;i<strlen(ret);i++) ret[i]='\0';
strcat(ret,name);
return ret;
}
};
int main(){
fileName fn;
char ret,copied[1000]={0};
sprintf(copied,"copied_%s",fn.custom("exe"));
FILE *pfile1 = fopen(fn.custom("exe"),"rb");
FILE *pfile2 = fopen(copied,"wb");
while(1){
ret=fgetc(pfile1);
if(!feof(pfile1)) fputc(ret,pfile2);
else break;
}
fclose(pfile1);
fclose(pfile2);
}
<< 원리 >>
__FILE__매크로와 find함수를 활용했습니다
이해안가시는 부분있으면 댓글로 질문주세요...!
그러면 짧은 글 봐주셔서 감사합니다!
[[[ 다음 글 ]]]
파일 자가복제 C++ #2
개발환경 >> DevCpp 언어 >> C++11 WINAPI 64bit 운영체제 >> Windows10 [[[ 지난 글 ]]] > DevCpp 언어 >> C++11 운영체제 >> Windows10 안녕하세요! 이번에는 C++에서 파일을 자가복제하는방법에 대해서 알..
mawile.tistory.com
'🧼C, C++ > 자체제작 프로그램및 배포' 카테고리의 다른 글
2차원배열 콘솔 게임 C++ (0) | 2020.11.15 |
---|---|
codeSock <v2.0> 라이브러리 배포 C++ (0) | 2020.11.12 |
codeSock 헤더파일 배포 <1.0> C++ (0) | 2020.10.09 |
C++ memstrs 헤더파일 (0) | 2020.09.13 |
로또추첨 프로그램 (0) | 2020.09.10 |
댓글