-
-
[原创]浅谈软件安全设计(二)
-
发表于: 2007-6-6 11:30 5694
-
浅谈软件安全设计(二)
{**************************************************************
code by 黑夜彩虹 & vxin with almost pure delphi
Blog:http://vxin.unpack.cn
2007-06-05
--- 转载时请保留作者信息。
**************************************************************}
设计模式:
1、转移直接提示信息(很多Cracker会根据注册提示快速找到跳转指令)
2、隐藏跳转指令(很多Cracker会根修改跳转,以达到暴破)
3、伪造成其它语言
具体代码如下:
[Copy to clipboard] [ - ]CODE:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const msg1='注册成功!'; //定义提示信息(OD似乎看不到)
msg2='注册失败';
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Button1Click(Sender: TObject); //隐藏跳转指令方法
Var
Reg: Integer;
Str: String;
FileCrc : DWORD;
{ 很多Cracker破解会根据注册提示来修改跳转,以达到暴破;
那么我们可以隐藏这个跳转。这是从前辈wxb老大那里学来的}
Begin
reg:=0;
Try
reg:=strtoint(edit1.text);
Reg := 1024 Div Reg; //人为产成DIV 0 异常
Str := IntToStr(Reg); //不能少,否则Reg没有引用将自动跳过
showmessage(msg2); //注册失败! 转移直接提示信息
Except
showmessage(msg1); //注册成功! 转移直接提示信息
End;
end;
end.
伪装具体步聚(手动,当然也可以利用一些现成的工具)
1、先用ToPo增节工具,打开需要为装的文件,然后在 Bytes to be added: 填入200
Backup file: 打勾
Redirect Entypoint :打勾
执行:Do It!
得到:Result:
200 butes added at:
-memory address:00463000h //修改后的入口地址
-file offset: 0005CC00h
2、用OD调试工具导入需要为装的文件
然后找到它的入口地址:00463000
跟着点击右键-->汇编-->一条条的修改,修改如下:
;伪造VC++入口代码特征
;assume fs:nothing
push ebp
mov ebp,esp
push -1
push 666666
push 888888
mov eax,fs:[0]
push eax
mov fs:[0],esp
;下边再恢复
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
3、选择刚才修改的语句,右键-->复制到可执行文件-->选择部份-->再右键-->保存文件
你还可以参考 浅谈软件安全设计(一)
http://bbs.pediy.com/showthread.php?t=40702
{**************************************************************
code by 黑夜彩虹 & vxin with almost pure delphi
Blog:http://vxin.unpack.cn
2007-06-05
--- 转载时请保留作者信息。
**************************************************************}
设计模式:
1、转移直接提示信息(很多Cracker会根据注册提示快速找到跳转指令)
2、隐藏跳转指令(很多Cracker会根修改跳转,以达到暴破)
3、伪造成其它语言
具体代码如下:
[Copy to clipboard] [ - ]CODE:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const msg1='注册成功!'; //定义提示信息(OD似乎看不到)
msg2='注册失败';
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Button1Click(Sender: TObject); //隐藏跳转指令方法
Var
Reg: Integer;
Str: String;
FileCrc : DWORD;
{ 很多Cracker破解会根据注册提示来修改跳转,以达到暴破;
那么我们可以隐藏这个跳转。这是从前辈wxb老大那里学来的}
Begin
reg:=0;
Try
reg:=strtoint(edit1.text);
Reg := 1024 Div Reg; //人为产成DIV 0 异常
Str := IntToStr(Reg); //不能少,否则Reg没有引用将自动跳过
showmessage(msg2); //注册失败! 转移直接提示信息
Except
showmessage(msg1); //注册成功! 转移直接提示信息
End;
end;
end.
伪装具体步聚(手动,当然也可以利用一些现成的工具)
1、先用ToPo增节工具,打开需要为装的文件,然后在 Bytes to be added: 填入200
Backup file: 打勾
Redirect Entypoint :打勾
执行:Do It!
得到:Result:
200 butes added at:
-memory address:00463000h //修改后的入口地址
-file offset: 0005CC00h
2、用OD调试工具导入需要为装的文件
然后找到它的入口地址:00463000
跟着点击右键-->汇编-->一条条的修改,修改如下:
;伪造VC++入口代码特征
;assume fs:nothing
push ebp
mov ebp,esp
push -1
push 666666
push 888888
mov eax,fs:[0]
push eax
mov fs:[0],esp
;下边再恢复
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
3、选择刚才修改的语句,右键-->复制到可执行文件-->选择部份-->再右键-->保存文件
你还可以参考 浅谈软件安全设计(一)
http://bbs.pediy.com/showthread.php?t=40702
赞赏
看原图
赞赏
雪币:
留言: