题目: Cracking using DeDe (用dede来破解)
作者:
Fulgore
翻译:WiNrOOt 2002.10.7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
引
这是一篇介绍dede的基础文章,在这里我将向你展示如何用dede分析软件,将软件
爆破,并写出他的keygen的问题.
工具:
Hmmm... 用什么呢?可能有dede?:-)还有 Hiew,还有Delphi(用来写keygen)
文件:
我自己特地为这片教程写了一个test的文件用来破解
下载地址:http://www.balbaro.com/dede/files/test.zip
*在最后我们将爆破这个文件~~~~~
开工~~~~~~~~~~~
*1。运行dede
*2。选择文件,单击Process。
*3。test.exe将被运行,来让我们认识一下他(name,company&serial)
当然你也可以尝试一下注册按钮(winroot:千万不要把test关了)
*4。点击OK,dede开始工作~~~~~~~~读取完成~~再点ok.读取工作完成,分析正式开始
*5。点选dede中的 procedures项
*6。单击左边窗口的TForm1,你将会看到左边出现 Button1Click(双击它)————噢!发生了什么?
*7。开始浏览代码……一会你见会看到这样的信息(winroot:这些东西不会在同一个地方显示!废话!!)
* Possible reference to control 'Edit2':TEdit
………………………………
* Possible reference to control
'Edit1':TEdit
这些就是调用我们输入Name/Company的地方。
*8。我么继续看代码:
* Reference to: System..LStrCat3()
|
0044437D E82AF8FBFF
call 00403BAC
00444382
8D55F0 lea
edx, [ebp-$10]
T他的意思是将两个串连起来.
9. 下面你将看到edit3.text的调用. 很有趣, huh?
:)
00444390 8B55F0
mov edx, [ebp-$10]
00444393 8B45FC
mov eax, [ebp-$04]
* Reference to: System..LStrCmp()
|
00444396 E8D5F8FBFF
call 00403C70
0044439B
7407 jz
004443A4
uhuh. Weeeell这意味着,edx 与eax比较,就象输入值与序列号比较一样。不会是明码比较这么简单把?我们来看
如果我们执行到这里:
0044439B 7407
jz 004443A4
如果string相等程序将什么也不会做(程序自己会判断)所以绝对不能让他跳,
我们继续往下看;
10. 0044439F E85C010000
call 00444500
我觉的有点可疑! :) 双击跟进取!
我们发现这里好像是一函数的开始部分,把两个值连起来.
?
00444550 E87FFEFFFF
call 004443D4
这个子程序是干吗的?跟进去看到
|
or: System..LStrLen()
004443F8 E863F7FBFF
call 00403B60
取字符串长度
004443FF
83FB0A cmp
ebx, +$0A
00444402 7F12
jnle 00444416
一直循环到$0A, 就是10.
所以它等于 "for
i:=length(s) to 10"
Oki. 我们能在循环中做些什么呢?
* Reference to: System..LStrCat()
在字符串后加个 'A' .
结果怎么样呢? 程序调用字符串, 如果字符个数小于10就在后面加'A'.
11.
单击右上的"<"键推出上面那个call来到:
* Possible String Reference to: "123-"
|
00444555 683C464400 push
$0044463C
oki. 我们看到'123-'很好.
继续看. 这个子程序将创建一个串:
a)LStrCopy(something,from,to)
b)存储结果
c)测试结果call 00444444
12. 看这里这里有两次变化:
0044455E
B905000000 mov ecx, $00000005
00444563 BA01000000 mov
edx, $00000001
调用eax的值,复制 $1到$5. 如果串是 'aaabbbccc' 则结果是'aaabb';
00444587 B904000000 mov
ecx, $00000004
0044458C BA05000000
mov edx, $00000005
同样, 从第五个字母开始取四个. 所以结果是: 'bbbc'
13. 在这两个call之间, 你会看到
* Possible String Reference to: "-321-"
|
0044457E 684C464400 push
$0044464C
记住他,他使中间的那个.
* Possible String Reference to: "-123"
|
004445A7 685C464400
push $0044465C
and another one in the end.
现在我们知道serial的结构:
123-xxx-321-xxx-123
14. 现在我们要找xxx的值, 进入 00444444 call.看到:
* Possible
String Reference to: "zZz"
在起始和结束保存,
然后:
00444488 BA03000000
mov edx, $00000003
* Reference
to: System..LStrCatN()
从字符串中调用第三个字母 像这样复制他:
zZz + char + zZz
然后,
同样的, 他们调用调用第一和第二个字母.
如果输入 'Hello', 结果是:
'HzZzlzZze'
cool.
15.这就是算法!
好让我们来算自己的serial!
Name: Ful
Company:gore
a)Temp
String: Fulgore
b)第一个函数得到 我们得到: FulgoreAAA
c)然后第一个规则得到'Fulgo', 用第二个函数得到
uzZzlzZzF
d)用第2个得到'oreA', 用第二个函数得到 rzZzezZzo
e) 用第3个函数我们得到: 123-FzZzlzZzu-321-ozZzezZzr-123
f) 让我们检测以下!成功!!!
g) 用到下面的函数:
1st:
procedure
prepare(var s:string);
var z:string; i:integer;
begin
z:=s;
for i:=length(z) to 10 do
s:=s+'A';
end;
2nd
function
Cripple(s:String):string;
var kk:string;
begin
kk:='zZz'+s[3]+'zZz';
kk:=s[1]+kk+s[2];
result:=kk;
end;
3rd.
function
generate(name,comp:string):string;
var temp:string;
begin
temp:=name+comp;
prepare(temp);
result:='123-'+cripple(copy(temp,1,5))+'-321'+cripple(copy(temp,5,4))+'-123';
end;
爆破
Well,这一步非常简单, 看Button1Click的代码,
双击call 00444500 进入我们会看到:
004445D2 740C
jz
004445E0
* Possible String Reference to: "screw you!"
004445D4
B86C464400 mov eax, $0044466C
* Reference to: Dialogs.ShowMessage(System.AnsiString)
004445D9
E896F9FFFF call 00443F74
004445DE EB0A
jmp 004445EA
* Possible String Reference to: "good for
you!"
004445E0 B880464400
mov eax, $00444680
很明显的可以看到我们下一步将干什么,只需将 jz 变成jmp.
运行 RVA
converter (在dede的tools里)将004445D2 变成offset: 000439D2
运行 hiew, 进入 hex 模式,
按F5 到000439D2;
这里将出现 JE 操作码 ,把它变成 JMP, save然后运行
收工;)
爆破已经完成, 相信你能写出他的keygen
:)
结束语:
谢谢你读完我这篇垃圾(谁说老外不谦虚?), 我希望你能从中体会点什么 ;)
非常感谢DaFixer提供的的软件,
也要谢谢 Borland 的RAD .
谢谢观看 !(老外怎么那么多废话??)
byebye
fulgore
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
winroot的结束语:
我是一名初学者,难免翻译有不准确错误的地方,请各位高手指正!
我的mail:ymlianming@etang.com欢迎交流~
- 标 题:[翻译]用dede破解-另一篇~请大家指正~~ (5千字)
- 作 者:winroot
- 时 间:2002-10-7
11:42:28
- 链 接:http://bbs.pediy.com