• 标 题:这是一篇老文章今天拿来翻译一下,我的水平很差~请指正!for新手 (4千字)
  • 作 者:winroot
  • 时 间:2002-10-6 11:40:15
  • 链 接:http://bbs.pediy.com

用DeDe破解-第一次
              Published by Tsehp April 2000
翻译:WiNrOOt
声明:因原作者使用的dede版本较早,功能设置有很多和现在的不一样。于是我就用
现在的功能设置重新描述。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
序言:
首先我们要感谢+DaFixer为我们做了这么好的软件。他使cracker在对付delphi
程序十分方便。我不去说明怎么去用dede(因为他很容易上手而且+DaFixer已经
把一些重要的操作在readme.txt中说得很清楚)如果需要我会写一些步骤个新手。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如何进行crack?
第一步我们总是来确定.exe的类型。确定了类型后加上我们使用特定工具
往往使我们的工作起到事半功倍的效果。当然我们也要看他是否加了保护等等。


我们的目标和使用的工具
1。目标:ExeScope 5.12
2。破解的类型:Serial number
3。如果不注册程序会有什么表现:我们编辑过文件后,不能保存。
4用到的工具:DeDe and TRW
5还有大约10分钟的时间(如果没有dede你将花更长的时间)


开工!!!!!!!!!!!!!
运行dede,选择目标。点击 Process按钮,等待处理…………
dede是很容易上手的,现在我们选择Forms.这一块展示给我们的是
delphi程序的文本信息。找到TFReg这一项,并察看他的caption,oh这是我们
要找的"Regist" caption。不要担心那些奇怪的字符(因为ExeScope的作者是
日本人)。

下面我们继续:
我们点procedure在左边的窗口我们会发现属于TFReg的部件
在右边的窗口选择event(RegBtnClick)双击鼠标左键。
WOW那是什么???
完美的解析展现在我们的面前~~~Not 10 MB 也不是大量的汇编代码(那些
无用的,与破解无关的)
他展示给我们的是我们所需要的------当我们点击
注册按钮时程序中发生的事件的代码,而且还带函数说明!!!
在进行完分析后我们看到的情形(最为重要的部分)
* Possible Reference to Control 'NameEdit:TEdit'

0047D12A 8B83DC010000 mov eax, [ebx+$01DC]

* Reference to: Controls.TControl.GetTextBuf()

0047D130 E89B5FFAFF call 004230D0

0047D135 8B55FC mov edx, [ebp-$04]

0047D138 A1EC804800 mov eax, dword ptr [$4880EC]

* Reference to: System.LStrCat()

0047D13D E83A68F8FF call 0040397C

0047D142 8D55FC lea edx, [ebp-$04]

* Possible Reference to Control 'IDEdit:TEdit'

0047D145 8B83E0010000 mov eax, [ebx+$01E0]

* Reference to: Controls.TControl.GetTextBuf()

0047D14B E8805FFAFF call 004230D0

0047D150 8B55FC mov edx, [ebp-$04]

0047D153 A19C804800 mov eax, dword ptr [$48809C]

* Reference to: System.LStrCat()

0047D158 E81F68F8FF call 0040397C

0047D15D 8B159C804800 mov edx, [$48809C]

0047D163 8B12 mov edx, [edx]

0047D165 A1947F4800 mov eax, dword ptr [$487F94]

0047D16A 8B00 mov eax, [eax]

* Reference to published proc: TFMain.CheckCode <- 看这里:今天的分析程序还没有能分析到这种地步的

0047D16C E8DB780000 call 00484A4C

0047D171 84C0 test al, al

0047D173 0F848D000000 jz 0047D206 <- 这是一个关键跳。我们改一下就好了
但是这样不好,程序中可能还有检查serial的地方。换句话说我想展示一下
dede的威力
有了dede分析代码将十分方便
还有说明一点delphi在处理全局变量和局部变量是采取下面这种方式
[ebp+xy]表示全局变量指针
[ebp-xy]表示局部变量指针
00484A6C 8B45FC mov eax, [ebp-$04] <- 局部变量指针在eax
| or: System.LStrOfChar()

00484A6F E830F1F7FF call 00403BA4 <-

00484A74 83F80A cmp eax, +$0A <- 我们的code必须是10个字符

00484A77 7527 jnz 00484AA0 <- 如果不就死

00484A79 8B45FC mov eax, [ebp-$04]

00484A7C 803841 cmp byte ptr [eax], $41 <- 第一个字符 ‘A’

00484A7F 751F jnz 00484AA0 <- 死

00484A81 8B45FC mov eax, [ebp-$04]

00484A84 0FB64008 movzx eax, byte ptr [eax+$08] <-取eax中第8个字符
00484A88 8B55FC mov edx, [ebp-$04]

00484A8B 0FB65209 movzx edx, byte ptr [edx+$09] <-取edx中第9个字符
00484A8F 03C2 add eax, edx <- eax=eax+edx
00484A91 B90A000000 mov ecx, $0000000A

00484A96 99 cdq

00484A97 F7F9 idiv ecx <-除以10

00484A99 83FA04 cmp edx, +$04 <-如果余4就成功!建议:用像A23456708这样的serial
($30+$38)/$A 余4 $30 和 $38 are 是 0 和 8 的16进制
00484A9C 7502 jnz 00484AA0 <- 死

00484A9E B301 mov bl, $01

00484AA0 33C0 xor eax, eax

00484AA2 5A pop edx

00484AA3 59 pop ecx

00484AA4 59 pop ecx
你也可以 bpx $00484A99 在Ice, Trw, TD32 或者其他的 windows debugger,
但是要记住code的第一个字母是A 还要有10个字符,
最后, ExeScope不会显示‘Thank you or something’, 但是输错了就会出现


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
结尾:
这是关于dede第一篇文章~~~~!·#·%……#¥%—……%……—……**废话一大篇懒得翻译