首页
社区
课程
招聘
[作品提交]代码变异加密工具
发表于: 2008-6-17 17:41 13631

[作品提交]代码变异加密工具

2008-6-17 17:41
13631

思路:将程序中关键代码强行变异,让它执行不下去,出错。。。
      逆向调试也将无法进行,以达到保护作用。

加密工具代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    OpenDialog: TOpenDialog;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    XPManifest: TXPManifest;
    Label4: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function hextoint(s: string): Integer;  
begin          //$代表16进制
  Result:=StrToInt('$'+s);
end;

function Stream_SearchString( // 在流中搜索字符串
  mStream: TStream; // 目标流
  mStr: string; // 字符串
  mStartAddress: Integer = 0; // 起始地址
  mEndAddress: Integer = MaxInt; // 终止地址
  mIgnoreCase: Boolean = False // 是否忽略大小写
): Integer; // 返回字符串所在的位置
const
  cBufferSize = $1000;
var
  S: string;
  T: string;
  I: Integer;
  J: Integer;
  L: Integer;
begin
  Result := -1;
  if not Assigned(mStream) then Exit;
  if mStr = '' then Exit;
  L := Length(mStr);
  mStream.Position := mStartAddress;
  if mIgnoreCase then mStr := UpperCase(mStr);
  T := '';
  J := mStartAddress;
  while mStream.Position <= mEndAddress do
  begin
    SetLength(S, cBufferSize);
    I := mStream.Read(S[1], cBufferSize);
    SetLength(S, I);
    if S = '' then Exit;
    if mIgnoreCase then S := UpperCase(S);
    Result := Pos(mStr, T + S) - 1;
    if Result >= 0 then
    begin
      Result := Result + J - Length(T);
      Exit;
    end;
    T := Copy(S, cBufferSize - L, MaxInt);
    Inc(J, I);
  end;
end; { Stream_SearchString }

function File_SearchString( // 在文件中搜索字符串
  mFileName: string; // 文件名
  mStr: string; // 字符串
  mStartAddress: Integer = 0; // 起始地址
  mEndAddress: Integer = MaxInt; // 终止地址
  mIgnoreCase: Boolean =true // 是否忽略大小写
): Integer; // 返回字符串所在的位置
var
  vFileStream: TFileStream;
  vFileHandle: THandle;
begin
  Result := -1;
  if not FileExists(mFileName) then Exit;
  vFileHandle := _lopen(PChar(mFileName), OF_READ or OF_SHARE_DENY_NONE);       //06-09-25 No.1 ZswangY37
  if Integer(vFileHandle) <= 0 then Exit;
  vFileStream := TFileStream.Create(vFileHandle);
  try
    Result := Stream_SearchString(vFileStream, mStr,
      mStartAddress, mEndAddress, mIgnoreCase);
  finally
    vFileStream.Free;
  end;
end; { File_SearchString }

Procedure XorData(vFileName:string; vStart, vEnd: Integer);  //===数据加密
var
  vMemoryStream: TMemoryStream;
  vBuffer: string;
  I: Integer;
begin
  if not FileExists(vFileName) then
    begin
    application.MessageBox('指定的来原文件不存在!','提示',MB_ok+MB_Iconinformation);
    Exit;
    end;
   SetLength(vBuffer, vEnd - vStart + 1);
   vMemoryStream := TMemoryStream.Create;
   try
    vMemoryStream.LoadFromFile(vFileName);
    vMemoryStream.Seek(vStart, soFromBeginning);
    vMemoryStream.Read(vBuffer[1], Length(vBuffer));
    for I := 1 to Length(vBuffer) do
     vBuffer[I] := Chr(Ord(vBuffer[I]) xor $51DE003A);
    vMemoryStream.Seek(vStart, soFromBeginning);
    vMemoryStream.Write(vBuffer[1], Length(vBuffer));
    vMemoryStream.SaveToFile(vFileName);
    finally
    vMemoryStream.Free;
   showmessage('处理成功!');   
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    if OpenDialog.Execute then
     Edit1.Text:=OpenDialog.FileName;
end;

procedure TForm1.Button3Click(Sender: TObject);  //自动定位,地址可能有所偏差
begin
     Edit2.Text:= IntToHex(File_SearchString(Edit1.text,'xor_begin')-212,8);
     Edit3.Text:= IntToHex(File_SearchString(Edit1.text,'xor_end')-117,8);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i1,i2:integer;
begin
    i1:=hextoint(Edit2.Text);
    i2:=hextoint(Edit3.Text);
    XorData(Edit1.Text,i1,i2); //Xor
end;

end.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (21)
雪    币: 190
活跃值: (20)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
2
顶个沙发,谁也别来抢
2008-6-17 17:59
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
3
我已经习惯坐板凳了。谁也不能抢我的板凳!
2008-6-17 18:10
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
4
注册日期: Jun 2008
帖子: 2
精华: 1
声望: 10

这年头,都是马甲上阵……
2008-6-17 18:19
0
雪    币: 198
活跃值: (1585)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
类似于壳的sdk?
2008-6-17 18:30
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
流行嘛,追逐时尚~~
2008-6-17 18:32
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
7
原来楼主是马甲。。

楼主还可以提交一个吗啡壳
2008-6-17 21:38
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
没太看懂,哪位帮忙解释下?
是对代码做xor吗?执行时再解出来?
2008-6-17 22:16
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
9
貌似执行起来没解出来
2008-6-17 22:17
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
马甲2号帮顶起来!
2008-6-17 22:30
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
11
貌似题目有点吓人。皇帝的新衣吗?
我没看到到其中奥妙,哪位指点下。
2008-6-17 22:39
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
12
奥妙应该是外面要加个自己写的壳,壳来恢复那段代码
2008-6-17 22:47
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
13
我比较笨。看不懂。
是不是我提交个更吓人的题目《菲薄纳妾-拉格朗日-强力超级变形之加密工具》也可以加个精华

看了题目,我以为ltt的扭曲变换来了。
2008-6-17 22:52
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
14
看来传说中的拉格朗日和你很熟
2008-6-17 23:10
0
雪    币: 87
活跃值: (47)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
15
;:):):)
2008-6-17 23:16
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
实话说,无新意
2008-6-18 00:40
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
不提交了,一下就被你脱了~
2008-6-18 09:08
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
写壳或是用keyfile恢复都可以~~
2008-6-18 09:11
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
19
不是我脱的,2004年fly就脱掉了

http://www.unpack.cn/viewthread.php?tid=71
2008-6-18 09:11
0
雪    币: 210
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
风月太强了,一眼就识破了是谁
2008-7-6 09:55
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
顶!!!学习
2008-7-6 22:26
0
雪    币: 49
活跃值: (156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
原来只是代码加密呀?楼主再提交个加密后能运行的就安逸了.
2008-7-15 21:09
0
游客
登录 | 注册 方可回帖
返回
//