这里有破解高手吗?初学者请教:破解一个Delphi编的简单程序 (100分)

  • 主题发起人 WorldCreater
  • 开始时间
W

WorldCreater

Unregistered / Unconfirmed
GUEST, unregistred user!
Delhi编的一个简单程序:一个窗体,窗体上有一个按键,按鍵后显示对话框“this is only a debug”
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage( 'this is only a debug' );
end;

end.

现在我想直接修改这个编译好的.exe文件,使得按鍵不反应,就是说按键后无条件转移到
ShowMessage函数的后边,我该怎么做?
为什么 bpx shellexecutea 断点设置不成功?怎么做?
 
按键后面是什么?
 
需要一些汇编知识
 
很简单,将showmessage产生的机器码改成90909090即可。
用TRW2000跟踪进去,找到showmessage的CALL后记下机器码,再用Ultraedit之类的改写
 
SoftIce怎么用
我装的是NuMega DriverStudio 2.5里边包含SoftIce
 
用反编译工具将此程序反编译,查找"this is only a debug"字串,一般在其上方有跳转指令,
你可以将他改成90 nop/改成直接跳转到显示对话框下面的语句,视具体情况而定.
 
我用w32dasm反编译,找不到这字串,可能是变成16进制码了吧
 
emonster说的很对,关键在于[red]查找ShowMessage的程序入口[/red]
如何查找呢?ShowMessage函数比较特殊,相信破解过Delphi程序的朋友应该有体会。
ShowMessage函数没有调用任何的API函数。很难发现它的入口。
但!汇编语言和高级语言(我这里说的高级语言指所有非汇编语言)的差别就在于:
汇编语言可以任意组织代码,但高级语言是由对应的编译器加以编译的。
说得明白一点就是:[red]高级语言编写的函数都有固定的汇编代码[/red]
有了这个观点,我们就可以开始了!
1、在Delphi的IDE环境中设断ShowMessage函数
2、中断后调出CPU窗口(Ctrl+Alt+C)
3、注意看ShowMessage是如何编译的:
MOV EAX,$[blue]字符串地址[/blue]
CALL ShowMessage
RET
ShowMessage:
[RED]83 C9 FF[/RED] OR ECX,-$01
[RED]83 CA FF[/RED] OR EDX,-$01
CALL ShowMessagePos
RET
红色部分的汇编代码,就是ShowMessage的特征代码,用UltraEdit就可以在待破解
的文件中找到,怎么改,我就不多说了。
希望对你有点帮助。:)
 
先用DEDE反编译,很容易就找到地址,再修改!见上:)
 
你要是连SoftIce怎么用都不知道,就不应该急着问这些东西了。
到www.pediy.com去吧,先实习半个月基础知识再说。
 
manfeel:
你给出的确是 showmessage 的汇编代码。不过要是将这代码改为 90 90 90 90 90 90
程序就不正常了。
我用 bpx messageboxa 能捕获并修改了 messageboxa 发出的对话框。
我该如何截获 showmessage 呢?
 
你把哪些代码改为 90 90 90 90 90 90了?
 
[RED]83 C9 FF[/RED]
[RED]83 CA FF[/RED]
 
[RED]83 C9 FF[/RED]
[RED]83 CA FF[/RED]
 

* Possible String Reference to: 'demo'
|
0045F2E8 B808F34500 mov eax, $0045F308
* Reference to: dialogs.ShowMessage(System.AnsiString);
|
0045F2ED E87E52FDFF call 00434570
* Possible String Reference to: 'OK'
|
0045F2F2 B818F34500 mov eax, $0045F318
* Reference to: dialogs.ShowMessage(System.AnsiString);
|
0045F2F7 E87452FDFF call 00434570
0045F2FC C3 ret
E87E52FDFF-->
9090909090
 
你要是连SoftIce怎么用都不知道,就不应该急着问这些东西了。
到www.pediy.com去吧,先实习半个月基础知识再说。
说的很对!!
 
为什么 bpx shellexecutea 断点设置不成功?怎么做?
哪位和我说说。谢谢
这个贴子拖了很久了,我要结贴了。
真是抱歉。
 
呵呵,我知道怎么加载了。delphi的showmessage捕获以后再说吧,结账了。
 

Similar threads

I
回复
0
查看
467
import
I
S
回复
0
查看
693
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
670
import
I
顶部