求一个简单的透明加密源代码?
附带使用说明,好用再加分。请发ygl365166495@126.com使用文件系统过滤驱动方面的知识。谢谢liwx988的代码,我认真的看了。能实现加密的功能。不过关键的...
附带使用说明,好用再加分。请发ygl365166495@126.com
使用文件系统过滤驱动方面的知识。
谢谢liwx988 的代码,我认真的看了。能实现加密的功能。不过关键的是透明。下面是有关透密加密的一点简介,欢迎有相关经验的继续参与。基于 Windows 底层的驱动级透明加解密技术。透明性,对文件加解密过程全是在操作系统后台完成,不需要对文件做任何额外操作,不改变操作文档的习惯。体验就如同它为透明的一样,用户不会受到任何影响,甚至感觉不到它的存在。对于受保护的文件,只有合法用户在被授权的终端上进行应用。合法用户可以以任何方式访问受保护文件时,信息内容在调入内存时才会被自动解密,不会在硬盘留下任何形式的明文临时文件。.............每个 irp 都是针对 DEVICE_OBJECT 发出的。只有针对由该驱动所生成的 DEVICE_OBJECT 的IRP, 才会发给该驱动来处理。具体的分发函数,决定于 DEVICE_OBJECT下的DriverObject 域。当一个应用程序打开文件并读写文件的时候,windows 系统将这些请求变成 irp 发送给文件系统驱动。文件系统过滤驱动将可以过滤这些 irp.这样,你就拥有了捕获和改变文件系统操作的能力。 展开
使用文件系统过滤驱动方面的知识。
谢谢liwx988 的代码,我认真的看了。能实现加密的功能。不过关键的是透明。下面是有关透密加密的一点简介,欢迎有相关经验的继续参与。基于 Windows 底层的驱动级透明加解密技术。透明性,对文件加解密过程全是在操作系统后台完成,不需要对文件做任何额外操作,不改变操作文档的习惯。体验就如同它为透明的一样,用户不会受到任何影响,甚至感觉不到它的存在。对于受保护的文件,只有合法用户在被授权的终端上进行应用。合法用户可以以任何方式访问受保护文件时,信息内容在调入内存时才会被自动解密,不会在硬盘留下任何形式的明文临时文件。.............每个 irp 都是针对 DEVICE_OBJECT 发出的。只有针对由该驱动所生成的 DEVICE_OBJECT 的IRP, 才会发给该驱动来处理。具体的分发函数,决定于 DEVICE_OBJECT下的DriverObject 域。当一个应用程序打开文件并读写文件的时候,windows 系统将这些请求变成 irp 发送给文件系统驱动。文件系统过滤驱动将可以过滤这些 irp.这样,你就拥有了捕获和改变文件系统操作的能力。 展开
3个回答
2008-08-12
展开全部
事本没改过一个代码(但要把代码嵌入,所以变大了)
可以象普通记事本那样使用,但储存出来的文件会自动加密.
那么即使别人 copy 走了你的文件,也无法打开看到正确的内容.
如果配合机器码加密的话,那么就算别人把这个记事本Copy走了,也无法打开得到正确的内容.
该技术同样可以应用在任何软件比如 OFFICE 系列上.
这里下载测试的 Notepad.rar
核心代码如下,其中用到我写的 Hook 控件系列和加密方案:
unit MainProc;
interface
uses
Windows, Classes,
HookCoreUnit, EncrypFileUnit;
procedure Start;
procedure Stop;
implementation
const
ReadFileAddr = $1005244;
ReadFileAddrRts = ReadFileAddr + SizeOf(HookCodeEx);
WriteFileAddr = $1004C2A;
WriteFileAddrRts = WriteFileAddr + SizeOf(HookCodeEx);
var
ReadFileHooker, WriteFileHooker: THookerCoreEx;
MemList: TList;
EF: TEncryptFile;
function EncryptBuffer(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
var
Data: PChar;
tmp: string;
Size: DWORD;
begin
Data:= @Buffer;
//加密
tmp:= EF.EncryptBuffer(Data, nNumberOfBytesToWrite);
Size:= Length(tmp);
Result:= WriteFile(hFile, tmp[1], Size, lpNumberOfBytesWritten, lpOverlapped);
end;
function DecryptBuffer(hFileMappingObject: THandle; dwDesiredAccess: DWORD;
dwFileOffsetHigh, dwFileOffsetLow: DWORD; dwNumberOfBytesToMap: DWORD): Pointer; stdcall;
var
MemAddr: Pointer;
tmp: string;
Size: DWORD;
begin
Result:= MapViewOfFile(hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap);
//解密
tmp:= EF.DecryptBuffer(Result, dwNumberOfBytesToMap);
Size:= Length(tmp);
//如果解密有效
if Size <> 0 then
begin
//分配内存
MemAddr:= VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
CopyMemory(MemAddr, @tmp[1], Size);
Result:= MemAddr;
//加入内存表
MemList.Add(Result);
end; //解密不了按原内容打开
end;
procedure ProcessReadFile;
asm
//解密
call DecryptBuffer
//返回
push ReadFileAddrRts
end;
procedure ProcessWriteFile;
asm
//加密
call EncryptBuffer;
//返回
push WriteFileAddrRts
end;
//需要控件的请联系 kryso@21cn.com(msn), 非商用勿扰
procedure Start;
begin
{$I .\K_SDK\VM_Start.inc}
EF:= TEncryptFile.Create(nil);
EF.Enable_Encryption:= True;
EF.E_PGM:= True;
EF.FileHead:= 'NotepadEx';
MemList:= TList.Create;
ReadFileHooker:= THookerCoreEx.Create;
ReadFileHooker.HookType:= CHT_JMP;
ReadFileHooker.Instruction:= PHookCodeEx(ReadFileAddr);
ReadFileHooker.Event:= DWORD(@ProcessReadFile);
WriteFileHooker:= THookerCoreEx.Create;
WriteFileHooker.HookType:= CHT_JMP;
WriteFileHooker.Instruction:= PHookCodeEx(WriteFileAddr);
WriteFileHooker.Event:= DWORD(@ProcessWriteFile);
ReadFileHooker.Hook:= True;
WriteFileHooker.Hook:= True;
{$I .\K_SDK\VM_End.inc}
end;
procedure Stop;
var
i: Integer;
begin
{$I .\K_SDK\VM_Start.inc}
WriteFileHooker.Hook:= False;
ReadFileHooker.Hook:= False;
WriteFileHooker.Free;
ReadFileHooker.Free;
//释放内存
for i:= 0 to MemList.Count - 1 do
VirtualFree(MemList[i], 0, MEM_RELEASE);
MemList.Free;
EF.Free;
{$I .\K_SDK\VM_End.inc}
end;
end.
可以象普通记事本那样使用,但储存出来的文件会自动加密.
那么即使别人 copy 走了你的文件,也无法打开看到正确的内容.
如果配合机器码加密的话,那么就算别人把这个记事本Copy走了,也无法打开得到正确的内容.
该技术同样可以应用在任何软件比如 OFFICE 系列上.
这里下载测试的 Notepad.rar
核心代码如下,其中用到我写的 Hook 控件系列和加密方案:
unit MainProc;
interface
uses
Windows, Classes,
HookCoreUnit, EncrypFileUnit;
procedure Start;
procedure Stop;
implementation
const
ReadFileAddr = $1005244;
ReadFileAddrRts = ReadFileAddr + SizeOf(HookCodeEx);
WriteFileAddr = $1004C2A;
WriteFileAddrRts = WriteFileAddr + SizeOf(HookCodeEx);
var
ReadFileHooker, WriteFileHooker: THookerCoreEx;
MemList: TList;
EF: TEncryptFile;
function EncryptBuffer(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
var
Data: PChar;
tmp: string;
Size: DWORD;
begin
Data:= @Buffer;
//加密
tmp:= EF.EncryptBuffer(Data, nNumberOfBytesToWrite);
Size:= Length(tmp);
Result:= WriteFile(hFile, tmp[1], Size, lpNumberOfBytesWritten, lpOverlapped);
end;
function DecryptBuffer(hFileMappingObject: THandle; dwDesiredAccess: DWORD;
dwFileOffsetHigh, dwFileOffsetLow: DWORD; dwNumberOfBytesToMap: DWORD): Pointer; stdcall;
var
MemAddr: Pointer;
tmp: string;
Size: DWORD;
begin
Result:= MapViewOfFile(hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap);
//解密
tmp:= EF.DecryptBuffer(Result, dwNumberOfBytesToMap);
Size:= Length(tmp);
//如果解密有效
if Size <> 0 then
begin
//分配内存
MemAddr:= VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE);
CopyMemory(MemAddr, @tmp[1], Size);
Result:= MemAddr;
//加入内存表
MemList.Add(Result);
end; //解密不了按原内容打开
end;
procedure ProcessReadFile;
asm
//解密
call DecryptBuffer
//返回
push ReadFileAddrRts
end;
procedure ProcessWriteFile;
asm
//加密
call EncryptBuffer;
//返回
push WriteFileAddrRts
end;
//需要控件的请联系 kryso@21cn.com(msn), 非商用勿扰
procedure Start;
begin
{$I .\K_SDK\VM_Start.inc}
EF:= TEncryptFile.Create(nil);
EF.Enable_Encryption:= True;
EF.E_PGM:= True;
EF.FileHead:= 'NotepadEx';
MemList:= TList.Create;
ReadFileHooker:= THookerCoreEx.Create;
ReadFileHooker.HookType:= CHT_JMP;
ReadFileHooker.Instruction:= PHookCodeEx(ReadFileAddr);
ReadFileHooker.Event:= DWORD(@ProcessReadFile);
WriteFileHooker:= THookerCoreEx.Create;
WriteFileHooker.HookType:= CHT_JMP;
WriteFileHooker.Instruction:= PHookCodeEx(WriteFileAddr);
WriteFileHooker.Event:= DWORD(@ProcessWriteFile);
ReadFileHooker.Hook:= True;
WriteFileHooker.Hook:= True;
{$I .\K_SDK\VM_End.inc}
end;
procedure Stop;
var
i: Integer;
begin
{$I .\K_SDK\VM_Start.inc}
WriteFileHooker.Hook:= False;
ReadFileHooker.Hook:= False;
WriteFileHooker.Free;
ReadFileHooker.Free;
//释放内存
for i:= 0 to MemList.Count - 1 do
VirtualFree(MemList[i], 0, MEM_RELEASE);
MemList.Free;
EF.Free;
{$I .\K_SDK\VM_End.inc}
end;
end.
参考资料: http://www.ff18.com/blog/post/5.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
展开全部
参考truecrypt源代码即可,地址:http://www.truecrypt.org/
新版本实现了操作系统加密,整个系统盘全部加密,启动时输入密码才能引导,很好很强大。开源的。
新版本实现了操作系统加密,整个系统盘全部加密,启动时输入密码才能引导,很好很强大。开源的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我发到你的邮箱里面去了!你确认查收一下。
就是用liwx988@163.com这个邮箱发给你的。
原理和基础都附在上面。
是很基础的加密,原理很简单,若想增强功能可以自己改进
希望对你有用,有用的话请将分数给我,谢谢
呵呵!那你不应该在C语言里提问哦!
就是用liwx988@163.com这个邮箱发给你的。
原理和基础都附在上面。
是很基础的加密,原理很简单,若想增强功能可以自己改进
希望对你有用,有用的话请将分数给我,谢谢
呵呵!那你不应该在C语言里提问哦!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询