论坛风格切换
正版合作和侵权请联系 sd173@foxmail.com
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
购买邀请后未收到邀请联系sdbeta@qq.com
  • 1735阅读
  • 2回复

[求助-软件问题]delphi代码编程问题! [复制链接]

上一主题 下一主题
离线垃圾桶
 
发帖
*
今日发帖
最后登录
1970-01-01
只看楼主 倒序阅读 使用道具 楼主  发表于: 2008-10-18 20:09:42
program nod32pass;

{$APPTYPE CONSOLE}

uses
SysUtils,
Registry,
Windows;

var
Reg: TRegistry;
buf: PByteArray;
size: Integer;
mask: array[0..19] of Byte = ($61, $D6, $D4, $E9, $DD, $F0, $FB, $F2, $5B, $64, $35, $AD, $B7, $C8, $19, $75, $EC, $31, $2B, $BC);
i: integer;
username, password: string;
begin
try
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE; //用Tregistry来读取注册表的常规做法
if Reg.OpenKeyReadOnly('SOFTWARE\Eset\Nod\CurrentVersion\Modules\Update\Settings\Config000\Settings') then
begin
username := Reg.ReadString('Username'); //用户名字段没有加密
size := Reg.GetDataSize('Password'); //读取密码字段(二进制,加密过)的大小
GetMem(buf, size);//为缓冲区申请内存
Reg.ReadBinaryData('Password', buf^, size); //把注册表中存的加密过的密码读入缓冲区

i := 0;

while i < size - 1 do
begin
password := password + chr(buf xor mask);
Inc(i, 2);
end; //这个循环就是用来解密的。把每一位与mask的其中一位求与或。

WriteLn('Username: ' + username);
WriteLn('Password: ' + password); //输出结果
end;
finally
Reg.CloseKey;
Reg.Free;
//FreeMem(Buf) 作者少了这一句,没有这句可能会产生内存泄露
end;
except
on E: Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.


以上这段代码,不知道谁能读懂~
离线love飘逸

发帖
273
今日发帖
最后登录
2018-10-25
只看该作者 沙发  发表于: 2008-10-18 22:18:27
从注册表中读取某个软件的用户名和密码,密码涉及到异或运算.
program nod32pass;
从这一句可以看出,是针对NOD32的杀毒软件.
离线垃圾桶
发帖
*
今日发帖
最后登录
1970-01-01
只看该作者 板凳  发表于: 2008-10-18 23:51:45
密码涉及到异或运算 运算,具体能看出是什么算法吗?