在我的应用程序中如何禁止ice或别的调试工具(300分,先付100)(100分)

  • 主题发起人 主题发起人 g622
  • 开始时间 开始时间
空欢喜。。。。
 
一个简单的、容易被跳过的方法,而且只有nt下有的api:
function IsDebuggerPresent:longbool;stdcall;external 'KERNEL32.DLL';
如果进程是被调试的,返回true。否则返回false
你在一个不显眼的地方查一下,查到后不要急着退出,而是狠狠的立即就把他的硬盘
格了,让他重装系统都要一定时间。
不过你自己要小心,你按 F9 运行的程序都是“debug”状态的,别把自己硬盘格了
 
pipi:
谢谢,”而是狠狠的立即就把他的硬盘格了“------高就是高! :)
windows 9X下有没有好办法?
 
用UPX, ASPACK之类的软件将你的exe打个包. 让它跟踪好了. 跟踪出来
了都没法改(除非每次都用ice调你的程序并跟踪, 或者知道upx, aspack的
解压方法). 对付一般的黑手够用了. 再说你的程序有必要防那些crack顶级
高手吗? 或者说那些crack顶级高手有兴趣去crack你的程序吗?
 
我在新浪的"中文平台"认识一个顶级cracker, 他可以在一个程序运行后,
把内存里面的镜像读出来写到文件里,就是压缩过也不例外,因为运行时
都是解压乐得.
 
主要是我必须把一段口令送到程序里
,不管怎么加密,最后在调用login函数时,它都是明文,所以想禁止调试,
以前在dos下可以看中断,现在不知该怎么办,我也不能规定用nt,狗太麻烦。
所以请教各位。
我的程序没什么,关键是用户的数据有时很重要。
UPX, ASPACK可以作到禁止调试吗?
有劳各位!
 
用windows提供的加密API函数可以做到加密效果.
 
查查以 crypt开头的几个API函数吧! 好像可以用来加密口令的.
 
》不管怎么加密,最后在调用login函数时,它都是明文
就是啊,关键就是不管如何加密,login函数用的是明文。
另外,g622,你的程序为什么要保留密码,让使用的人自己记密码、输入密码不行啊
 
to pipi:是不行,这一点无法变通
to all: win 9x下有没有类似IsDebuggerPresent的函数?
 
怎样发现是否有 SOFTICE在运行?
----------一个有意思的话题
I am trying to figure out how can I check if NuMega SoftIce is running? Any API calls?
function SoftIce95Running : Boolean;
var
hFile : THandle;
begin
Result := False;
hFile := CreateFile ('//./SICE',
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hFile <> INVALID_HANDLE_VALUE then
begin
CloseHandle (hFile);
Result := True;
end;
end;

function SoftIceNTRunning : Boolean;
var
hFile : THandle;
begin
Result := False;
hFile := CreateFile ('//./NTICE',
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hFile <> INVALID_HANDLE_VALUE then
begin
CloseHandle (hFile);
Result := True;
end;
end;


自定义快速报表的打印预览窗口
李 兴 华
Quick Report 2.0 中 提 供 的 默 认 打 印 预 览 窗 口 是 英 文 界 面 的, 如 果 开 发 的 中 文 软 件 中 带 有 这 种 英 文 显 示, 不 免 有 些 小 小 的 缺 憾。 因 此 有 必 要 实 现 中 文 界 面 的 打 印 预 览 窗 口。 但 是Delphi 提 供 的 源 代 码 中 并 没 有 打 印 预 览 窗 口 的.PAS 源 文 件, 这 就 无 法 直 接 修 改 源 码, 只 能 全 部 自 己 编 程 实 现。 经 多 次 实 践, 笔 者 模 仿 实 现 了 与 默 认 预 览 窗 口 外 观 类 似, 功 能 相 同 的 打 印 预 览 窗 口。 步 骤 如 下:
1. 新 建 一 个 窗 体, 设 置Name 为MyPreview。
2. 在 窗 体 上 添 加 一Toolbar 控 件, 模 仿 默 认 预 览 窗 口 创 建 相 应 的Toolbutton, 并 设 置 各 按 钮 的Hint 提 示。
3. 添 加 一Panel 控 件, 对 齐 方 式 置 为alBottom。 再 在 此Panel 上 放 一ProgressBar( 左 对 齐) 和Panel( 右 对 齐), 分 别 显 示 报 表 装 载 进 度 和 其 他 提 示 信 息。
4. 添 加QRPreview 控 件, 对 齐 方 式 置 为alClient。
5. 添 加OpenDialog, 设 置Filter 属 性 为*.QR; 添 加SaveDialog, 设 置Filter 属 性 为 *.QR|*.TXT|*.HTM|*.CSV, 设 置DefaultExt 属 性 为*.QR。
6. 双 击 各 个Toolbutton, 输 入 相 应 代 码。
可 以 按 以 下 方 法 调 用 自 定 义 预 览 窗 口。
重 载TQuickRep 的OnPreview 事 件, 输 入 如 下 代 码:
procedure TRptForm.RptFormPreview(Sender: TObject);
begin
with TMyPreview.Create(Application)do
begin
QRPreview1.QRPrinter := TQRPrinter(Sender);
CurRep := self;
Show;
end;
end;

附 各 成 员 方 法 的 具 体 实 现:
unit Myprv;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, qrprntr,Quickrpt,
StdCtrls, ExtCtrls,qrextra,qrhtml;
type
TMyPreview = class(TForm)
QRPreview1: TQRPreview;
ToolBar1: TToolBar;
( 其 余 成 员 变 量 和 成 员 方 法 声 明 略。)
private
{ Private declarations }
FPageCount : integer;
// 生 成 报 表 的 总 页 数
public
{ Public declarations }
CurRep : TQuickRep;
// 所 预 览 的 报 表
procedure UpdatePanelShow;
end;
implementation
{$R *.DFM}
procedure TMyPreview.UpdatePanelShow;
begin
// 更 新 显 示
Panel2.Caption :=
' 第 '+inttostr(QRPreview1.PageNumber)+
' 页 总 '+inttostr(FPageCount)+' 页';
end;
procedure TMyPreview.ToolButton2Click(Sender: TObject);
begin
//ZoomToFit 缩 放 至 全 屏
QRPreview1.ZoomToFit;
end;
procedure TMyPreview.ToolButton3Click(Sender: TObject);
begin
//ZoomTo100% 缩 放 至 实 际 大 小
QRPreview1.Zoom:=100;
end;
procedure TMyPreview.ToolButton4Click(Sender: TObject);
begin
//ZoomToWidth 缩 放 至 页 宽
QRPreview1.ZoomToWidth;
end;
procedure TMyPreview.ToolButton6Click(Sender: TObject);
begin
//First page
QRPreview1.PageNumber := 1;
UpdatePanelShow;
end;
procedure TMyPreview.ToolButton8Click(Sender: TObject);
begin
//prior page
QRPreview1.PageNumber := QRPreview1.PageNumber+1;
UpdatePanelShow;
end;
procedure TMyPreview.ToolButton7Click(Sender: TObject);
begin
//next page
QRPreview1.PageNumber := QRPreview1.PageNumber-1;
if QRPreview1.PageNumber =0 then
QRPreview1.PageNumber:=1;
UpdatePanelShow;
end;
procedure TMyPreview.ToolButton9Click(Sender: TObject);
begin
//Last page
QRPreview1.PageNumber := FPageCount;
UpdatePanelShow;
end;
procedure TMyPreview.QRPreview1PageAvailable(Sender: TObject;
PageNum: Integer);
begin
//get pagecount
FPageCount := PageNum ;
UpdatePanelShow;
end;
procedure TMyPreview.FormClose
(Sender: TObject;
var Action: TCloseAction);
begin
CurRep := nil;
Action := caFree;
end;
procedure TMyPreview.ToolButton14Click(Sender: TObject);
begin
//close the window
Close;
end;
procedure TMyPreview.ToolButton11Click(Sender: TObject);
begin
//print setup
QRPreview1.QRPrinter.PrintSetup;
end;
procedure TMyPreview.ToolButton13Click(Sender: TObject);
begin
//print
QRPreview1.QRPrinter.Print;
end;
procedure TMyPreview.ToolButton16Click(Sender: TObject);
begin
//save button
if SaveDlg1.Execute then
begin
if (SaveDlg1.FIlterIndex <>1)and(CurRep = nil)then
Exit;
case SaveDlg1.FilterINdex of
//--*.QR
1: QRPreview1.QRPrinter.Save(SaveDlg1.FileName);
//--*.TXT
2: CurRep.ExportToFilter
(TQRAsciiExportFilter.Create(SaveDlg1.FileName));
//--*.HTM
3: CurRep.ExportToFilter
(TQRHTMLExportFilter.Create(SaveDlg1.FileName));
//--*.CSV
4: CurRep.ExportToFilter
(TQRCSVExportFilter.Create(SaveDlg1.FileName));
end;
end;
end;
procedure TMyPreview.ToolButton17Click(Sender: TObject);
begin
//load button
if OpenDlg1.Execute then
QRPreview1.QRPrinter.Load(OpenDlg1.FileName);
end;
procedure TMyPreview.QRPreview1
ProgressUpdate(Sender: TObject;
Progress: Integer);
begin
//updage progress bar
ProgressBar1.Position := Progress;
end;
procedure TMyPreview.SaveDlg1TypeChange(Sender: TObject);
begin
//set DefaultExt property of Savedialog
with SaveDlg1do
case FilterIndex of
0: DefaultExt := '.QR';
1: DefaultExt := '.TXT';
2: DefaultExt := '.HTM';
3: DefaultExt := '.CSV';
end;
end;
end.
//end of Unit
以 上 程 序 在Windows NT 4.0 中 文 版(Service Pack 3),Delphi 3.0 环 境 下 调 试 通 过。

 
这是我抄的一个unit:
unit StopIce;
{ Anti debug unit. Detect SoftIce and shutdown Windows.
Freware with source.
Copyright (c) 1998 Soft House Labs, Andre N Belokon
Web http://softlab.od.ua/
Email support@softlab.od.ua
THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED
"AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR
ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED.
NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.
THE USER MUST ASSUME THE ENTIRE RISK OF USING THE ACCOMPANYING CODE.
}
interface
implementation
uses Windows;
Function IsSoftIce95Loaded: boolean;
Var hFile: Thandle;
begin
result := false;
hFile := CreateFileA('//./SICE', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if( hFile <> INVALID_HANDLE_VALUE ) then
begin
CloseHandle(hFile);
result := TRUE;
end;
end;

Function IsSoftIceNTLoaded: boolean;
Var hFile: Thandle;
begin
result := false;
hFile := CreateFileA('//./NTICE', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if( hFile <> INVALID_HANDLE_VALUE ) then
begin
CloseHandle(hFile);
result := TRUE;
end;
end;

function WinExit(flags: integer): boolean;
function SetPrivilege(privilegeName: string;
enable: boolean): boolean;
var tpPrev,
tp : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
begin
if SetPrivilege('SeShutdownPrivilege', true) then
begin
ExitWindowsEx(flags, 0);
SetPrivilege('SeShutdownPrivilege', False)
end;
end;

initialization
if IsSoftIce95Loaded or IsSoftIceNTLoaded then
begin
WinExit(EWX_SHUTDOWN or EWX_FORCE);
Halt;
end;
end.

 
bigtt,beta:
谢谢。
你们的方法实际上是一样的,判断文件是否已打开,但可以防止别的调试工具吗?
 
多人接受答案了。
 
后退
顶部