`
宋科明
  • 浏览: 101864 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一段隐藏文件的C++程序源代码

阅读更多

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int injectfile(char *, char *, char *, char *);
//隐藏文件函数
int exportfile(char *, char *, char *, char *);
//输出文件函数
void cript_decript(char *, char *, long);
//简单的加密函数

int main(int argc, char *argv[])
{

if(argc != 6)
{
  cout << "\n\nShadowJPEG vers 1.1 ----\n";
  cout << "       Developed by [V]l4d for [url]www.noflyzone.org[/url] only\n\n";
  cout << "Usage: ShadowJPEG -i <jpeg in> <file to hide> <jpeg_out> <key>\n";
  cout << "     ShadowJPEG -e <modified jpeg> <original jpeg image's size> <output file name> <key>\n\n";
  cout << "-i = inject file into the jpeg image\n";
  cout << "-e = export hidden file from jpeg\n\n";
  
  return -1;
}

if(strstr(argv[1], "-i")) injectfile(argv[2], argv[3], argv[4], argv[5]);
if(strstr(argv[1], "-e")) exportfile(argv[2], argv[3], argv[4], argv[5]);

return 0;
}

int injectfile(char* jpeg_in, char *file_to_hide, char *jpeg_out, char *pad)
{
    long file1long, file2long;
    char *file1str, *file2str;
    fstream fp1(jpeg_in, ios::in), fp2(file_to_hide, ios::in), fpout(jpeg_out, ios::out);
    //使用fstream类操作文件。fp1打开图片,fp2打开欲隐藏文件,fpout输出最后的“加密”文件。
    这三个都为文件对象,之后就可以用成员函数操作文件了

    if(!fp1)
    {
cout << "unable to open the file...";
      return -1;
    }
    if(!fp2)
    {
cout << "unable to open the file...";
      return -1;
    }
    if(!fpout)
    {
cout << "unable to open the file...";
      return -1;
    }

fp1.seekg(0, ios::end);   //定位到图片文件的未部
fp2.seekg(0, ios::end);   //定位到欲隐藏文件的未部
file1long = fp1.tellg();   //统计图片文件的长度,赋值给file1long
file2long = fp2.tellg();   //统计欲隐藏文件的长度赋值给file2long
                        因为已经用seekg()定位到文件的未部了,所以可直接使用tellg()
fp1.seekg(0, ios::beg);   //定位到图片文件的首部   
fp2.seekg(0, ios::beg);   //定位到欲隐藏文件的首部   

    file1str = new char[file1long];   //新建数组,并赋值给指针file1str
    file2str = new char[file2long];   //新建数组,并赋值给指针file2str

    fp1.read(file1str, file1long);   //读取图片文件,字节由file1long指定
    fp2.read(file2str, file2long);   //读取欲隐藏文件,字节由file2long指定

cript_decript(file2str, pad, ((long)file2long));   //加密

    fpout.write(file1str, file1long);   //将file1str写入图片文件,字节由file1long指定
    fpout.write(file2str, file2long);   //将file2str继续写如图片文件,字节由file2long指定

    fp1.close();
    fp2.close();
    fpout.close();
    //关闭文件对象

cout << "injection finished...the original file size is: " << file1long <<" bytes!" << endl;

return 0;
}

int exportfile(char *modified_file, char *original_size, char *outfile, char *pad)
{
long sum_long, file1long, file2long;
char *fp2str;
fstream fp1(modified_file, ios::in), fp2(outfile, ios::out);
//Fp1为打开加密后的图片文件,Fp2为输出隐藏文件

file1long = atoi(original_size);
//original_size为函数的参数,用于指定原始图片文件的大小。
  //这里是将用户输入的大小(字符串)转换为长整形,并赋值给file1long
  
if(!fp1)
{
  cout << "unable to open the file... be sure that it exist and that u have the required permissions";
  return -1;
}

if(!fp2)
{
  cout << "I cannot create the file...";
  return -1;
}

fp1.seekg(0, ios::end);   //定位到加密后的图片文件未部
sum_long = fp1.tellg();   //统计长度
fp1.seekg(0, ios::beg);   //定位到加密后图片文件的首部

file2long = sum_long - file1long;   //用加密后的图片文件长度减去原始图片文件的长度
fp2str = new char[file2long];     //新建数组,并赋值给指针fp2str

fp1.seekg(file1long, ios::beg);   //定位到加密后的图片文件file1long处
fp1.read(fp2str, file2long);     //读取隐藏文件,字节由file2long指定

//这里注意一下,由于已经用加密后的图片文件减去了原始图片文件,
  //所以这里的fp2str就是我们隐藏文件的具体内容

cript_decript(fp2str, pad, file2long);

fp2.write(fp2str, file2long);   //到这里就输出我们隐藏的文件了
fp1.seekg(0, ios::beg);       //再次定位到首部,不过这里已经是原来的图片文件了

fp1.close();
fp2.close();
//关闭文件对象

cout << "Export finished." << " ..:::ShadowJPEG on [url]www.noflyzone.org:::..[/url]" << endl;

return 0;
}

void cript_decript(char *str, char *pad, long str_long)
{
int i, j, padlong;

padlong = strlen(pad);

for (i=0, j=0;i<str_long; i++, j++)
{
  if(j == padlong) j = 0;
  str[i]^=pad[j];
}
}

分享到:
评论

相关推荐

    c++实验程序源代码 面向对象程序设计C++语言编程

    本资源包含了"C++实验程序源代码",旨在帮助学习者深入理解面向对象编程的核心概念和C++语言的使用。 1. **面向对象编程基础** - 类与对象:面向对象编程的基础是类,它是一种抽象的数据类型,定义了一组属性...

    C++程序设计(第8版)源代码

    通过阅读和分析《C++程序设计(第8版)》的源代码,可以深入了解以上知识点的实际应用,并提升编程技能。每个示例代码都精心设计,旨在引导学习者逐步掌握C++的核心概念和实践技巧。通过动手实践,将理论知识与实际...

    C++项目源代码(适合新手练手及参考)

    除了这些基本概念,学习此项目源代码还可以了解到文件I/O、动态内存管理、函数指针、STL(标准模板库)等C++进阶主题。STL包含容器(如vector、list、set)、迭代器、算法和函数对象,它们提供了高效的内存管理和...

    c++潜艇大战源代码

    【标题】:“C++潜艇大战源代码”是一个关于利用C++编程语言开发潜艇大战游戏的教程,通过实际的代码示例介绍了游戏的核心机制和开发流程。 【描述】:描述中的代码段展示了水雷的控制逻辑,当水雷的顶部位置达到50...

    c++技术内幕第六版源代码

    10. **编译和链接**:C++源代码通常包含多个文件,涉及头文件(.h或.hpp)和实现文件(.cpp),学习如何正确组织和编译这些文件也是学习C++的重要部分。 通过研究《C++技术内幕第六版》的源代码,读者不仅可以深化...

    谭浩强C++程序设计第二版课件pdf

    - **编译与运行**:编写完成后,需要使用C++编译器将源代码编译成可执行文件。常用的编译器有GCC、Clang等。 ##### **1.5 关于C++上机实践** - **练习项目**:通过实际操作,加深对概念的理解。例如,可以编写简单...

    windows资源管理器源代码(可统计磁盘、目录、文件占用空间)(VC++2008)

    总的来说,这段源代码提供了一个实用的工具,通过VC++2008编译,能够帮助用户深入分析磁盘使用情况,有效地管理文件系统。开发者可以学习其中的数据遍历、磁盘空间计算和界面展示技巧,这对于开发类似工具或增强现有...

    屏保程序_C++课程设计_源代码_亲测可用.zip

    屏保程序是计算机系统中的一种特殊应用程序,当用户在一段时间内无操作时,它会自动显示,以保护显示器不被长时间静态图像烧伤。在这个C++课程设计项目中,我们关注的是如何用C++编程语言编写屏保程序。C++是一种...

    C++语言程序设计 清华大学 郑 莉

    5. **程序的开发过程**:编程通常包括编写源代码、编译、链接,最终形成可执行文件。在C++中,IDE(集成开发环境)如Visual Studio或Code::Blocks能提供便利的开发环境。调试工具帮助我们定位并修复程序错误,版本...

    自学必备c++ 代码

    GDB是Unix下的一个强大的源代码级调试工具,用于查找和修复程序中的错误。学会使用GDB可以帮助我们更有效地调试C++程序。 通过以上知识点的学习和实践,你将能够掌握C++的基础并进行有效的Unix环境下的编程。不断...

    C++程序设计基础试题库

    ### C++程序设计基础知识点梳理 #### 第一章:程序设计与C++语言初步 - **程序设计方法:** - 自顶向下方法(Top-down):将复杂问题分解为多个较小、较简单的子问题来解决。 - 自底向上方法(Bottom-up):将已...

    操作鼠标的C++代码

    这两个函数都需要包含`windows.h`头文件,并且在C++程序中使用`#define _WIN32`或`#define _WINDOWS`预处理器指令。 ```cpp #include void moveMouse(int x, int y) { SetCursorPos(x, y); } void clickMouse...

    C++程序设计实践教程-马光志-习题答案

    4. **编译与连接**:编译过程是将源代码转换为机器码,连接则是将多个目标文件链接为可执行文件。 5. **早期绑定与晚期绑定**:早期绑定在编译时确定函数或变量的地址,而晚期绑定则在运行时才确定。 6. **面向对象...

    显示或隐藏桌面窗口(VC++6.0源代码).rar

    这个“显示或隐藏桌面窗口(VC++6.0源代码)”的压缩包提供了在VC++6.0开发环境中实现这一功能的源代码。 VC++6.0是Microsoft公司推出的一款经典的C++集成开发环境,广泛应用于Windows平台上的应用程序开发。通过它,...

    c++程序设计 谭浩强

    ### C++程序设计知识点概述 #### 一、C++简介及发展历程 - **起源与发展**: - C++ 是一种通用编程语言,由贝尔实验室的 Bjarne Stroustrup 博士于 20 世纪 80 年代初在 C 语言的基础上开发成功。 - C++ 的名字...

    MFC添加文件,添加文件夹源代码.pdf

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Class)应用程序中添加文件和文件夹,以及相关的源代码实现。MFC是微软提供的一套面向对象的类库,用于简化Windows应用程序开发,它基于C++语言。 首先,...

    C++程序设计习题指导(上)

    C++程序设计是计算机科学中的基础且重要的一环,它是一种强大的编程语言,结合了低级语言的效率和高级语言的抽象能力。本篇习题指导主要针对C++程序设计的学习,适合初学者掌握和理解C++的核心概念。 首先,C++语言...

    LPK劫持源代码 xp win7通用.zip

    这个"LPK劫持源代码 xp win7通用.zip"文件包含的可能是一段跨平台的源代码,可以用于在Windows XP和Windows 7这两个不同的操作系统版本上执行LPK劫持。 源代码通常由编程语言编写,这里标签提及了"vc",这可能意味...

    隐藏我的电脑、网上邻居的源代码

    标题中的“隐藏我的电脑、网上邻居的源代码”是指一种编程技术,主要目的是为了保护用户的计算机资源不被未经授权的访问。在IT行业中,这通常涉及到系统安全、隐私保护以及访问控制等领域。源代码是程序的基本构成,...

Global site tag (gtag.js) - Google Analytics