首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
社区
软件逆向
发新帖
1
7
[原创]e族百变桌面
发表于: 2007-6-4 21:32
6767
[原创]e族百变桌面
kflnig
14
2007-6-4 21:32
6767
e
族百变桌面
kflnig[
狂枫
]
本来以为碰到一个有点难度的软件了,谁知!……
[
作者声明
]
:此文只为交流知识而生。
[
作者求助
]:
感谢她,戴菁鸣,是她带我走出生活的阴影,使我这些天创作颇丰,我要让她成为最幸福的女孩!
这个东西的算法我看了好一会儿才得出一个结论。有点
hard
。而且,还有一点,这个软件的字符串太明显了。我就是顺着这条路到罗马的。
而且我也不知道,这个软件注册和非注册到底有什么区别。根本就是一样。我开始觉得我是被忽悠了,可是后来看看,好像还不是。
但要夸奖一点的是,这个软件除了
cpu
占用率和内存占用率大了一点以外,没有什么明显的缺点。
PEID
说:
Borland Delphi 6.0 - 7.0
简直太棒了,我是壳盲!
DEDE
分析
register
历然在目,
DEDE
输出一张
map
给
OD
。
OD
载入运行。授权码中输入:
123789
。
OD
用
apibreak
插件下万能断点。
00590635 >|. 8B83 FC030000 MOV EAX,DWORD PTR DS:[EBX+3FC] ; *edtSN:TEdit
0059063B |. E8 987AECFF CALL ePaper.004580D8
00590640 |. C783 24040000>MOV DWORD PTR DS:[EBX+424],2
0059064A |. EB 0A JMP SHORT ePaper.00590656
0059064C |> C783 24040000>MOV DWORD PTR DS:[EBX+424],6
00590656 |> 8BC3 MOV EAX,EBX
00590658 |. E8 33FCFFFF CALL ePaper.00590290
0059065D |. E9 DC000000 JMP ePaper.0059073E
00590662 |> 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8] ; Case 2 of switch 005905F8
00590665 >|. 8B83 00040000 MOV EAX,DWORD PTR DS:[EBX+400] ; *edtRN:TEdit
0059066B |. E8 387AECFF CALL ePaper.004580A8
00590670 |. 837D F8 00 CMP DWORD PTR SS:[EBP-8],0
00590674 |. 75 0C JNZ SHORT ePaper.00590682
取消万能断点,经过一段典型的
DELPHI
代码之后,出来到——
>00590670
。
从这里我们看注释,两个
TEDIT
控件就是如图
1
的两个机器码和授权码的控件。
图
1
所以大概这里就接近于关键的地方了。
有了
DEDE
输出的那张
map
,信息窗口中又多了一点信息。
堆栈
SS:[0012FB14]=01CBB7A0, (ASCII "123789")
ePaper.<-TRegisterForm@btnNextClick+0B4
上面一条是原来就是有的,下面一条归功于
DEDE
。这更加坚定了我们认为这里是关键的地方,我们本来就是点击了“下一步”这个按键来到输入序列号的地方的。
上面比较序列号长度是否为
0
,为零则说:
反正我是输入了
123789
了。
00590682 |> \8BC3 MOV EAX,EBX
;
<
——序列号不为
0
则来到这里
00590684 |. E8 EBFDFFFF CALL ePaper.00590474
00590689 |> 83BB 24040000>CMP DWORD PTR DS:[EBX+424],5
00590690 |. 75 22 JNZ SHORT ePaper.005906B4
00590692 |. 8D4D F4 LEA ECX,DWORD PTR SS:[EBP-C]
00590695 |. A1 D4E45900 MOV EAX,DWORD PTR DS:[59E4D4]
0059069A |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0059069C |. BA 90075900 MOV EDX,ePaper.00590790 ; ASCII "reg_code_err"
005906A1 >|. E8 EAF9F3FF CALL ePaper.004D0090; ->:TXmlSettings._PROC_004D0090()
005906A6 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
005906A9 >|. 8B83 BC030000 MOV EAX,DWORD PTR DS:[EBX+3BC] ; *lblReason:TLabel
005906AF |. E8 247AECFF CALL ePaper.004580D8
005906B4 |> 33D2 XOR EDX,EDX
005906B6 >|. 8B83 F0030000 MOV EAX,DWORD PTR DS:[EBX+3F0] ; *btnPrev:TButton
005906BC |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
005906BE |. FF51 68 CALL DWORD PTR DS:[ECX+68]
005906C1 |. 33D2 XOR EDX,EDX
005906C3 >|. 8B83 F8030000 MOV EAX,DWORD PTR DS:[EBX+3F8] ; *btnNext:TButton
我们主要看注释对应看序列号错误的对话框,图
2
图
2
懂
E
文的好处就在这里
reg_code_err
:输入的注册码不正确
lblReason:TLabel
:原因
btnPrev:TButton
:上一步
btnNext:TButton
:下一步
所以这里我们一定要跳。
00590690 |. 75 22 JNZ SHORT ePaper.005906B4
这样就没有错误也没有什么原因了。
^_^
也就是毫无疑问这里是关键了。
00590684 |. E8 EBFDFFFF CALL ePaper.00590474
这里顺便谈谈
DELPHI
常常会有的特征:
00590474 $ 55 PUSH EBP
00590475 . 8BEC MOV EBP,ESP
00590477 . 83C4 E4 ADD ESP,-1C
0059047A . 53 PUSH EBX
0059047B . 56 PUSH ESI
0059047C . 57 PUSH EDI
0059047D . 33D2 XOR EDX,EDX
0059047F . 8955 E4 MOV DWORD PTR SS:[EBP-1C],EDX
00590482 . 8955 E8 MOV DWORD PTR SS:[EBP-18],EDX
00590485 . 8955 EC MOV DWORD PTR SS:[EBP-14],EDX
00590488 . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0059048B . 33C0 XOR EAX,EAX
如果你误以为上面这些也都是有用的话,那么你惨了。你随便反汇编一个
DELPHI
的软件,都会发现这些东西。
看下面
005904B3 . E8 F07BECFF CALL ePaper.004580A8
005904B8 . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ; serial address
005904BB . E8 90A6E7FF CALL ePaper.0040AB50
005904C0 . 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX ; string to hex
005904C3 . 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX
005904C6 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005904C9 . FFB0 1C040000 PUSH DWORD PTR DS:[EAX+41C]
005904CF . FFB0 18040000 PUSH DWORD PTR DS:[EAX+418]
005904D5 . FF75 F4 PUSH DWORD PTR SS:[EBP-C]
005904D8 . FF75 F0 PUSH DWORD PTR SS:[EBP-10]
005904DB . B0 01 MOV AL,1
005904DD . E8 BEF6FFFF CALL ePaper.0058FBA0
005904E2 . 8B15 E0E15900 MOV EDX,DWORD PTR DS:[59E1E0] ; ePaper.005A2C00
005904E8 . 8802 MOV BYTE PTR DS:[EDX],AL
005904EA . A1 E0E15900 MOV EAX,DWORD PTR DS:[59E1E0]
005904EF . 8038 00 CMP BYTE PTR DS:[EAX],0
005904F2 . 74 53 JE SHORT ePaper.00590547
这里很重要,为什么呢?因为在这个
call
中,只有
005904F2
这个跳转,而且幅度还挺大,所以有货,
005904B3 . E8 F07BECFF CALL ePaper.004580A8
005904B8 . 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]; serial address
005904BB . E8 90A6E7FF CALL ePaper.0040AB50
005904C0 . 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX ; string to hex
也说明了序列号必须小于
0xFFFFFFFF
。否则就结构化异常了。
这边的两个
call
,看我加的注释,所以说它们已经开始把序列号翻来倒去的了,所以
005904DD . E8 BEF6FFFF CALL ePaper.0058FBA0
这个
call
,我怀疑……
进去。
里面是一个比较小的
call
,突然眼睛一亮
0058FC0D |. BA 74FC5800 MOV EDX,ePaper.0058FC74 ; ASCII "RegCode"
好像这一趟不是白来。看这里:
0058FBC6 |. E8 B1000000 CALL ePaper.0058FC7C
0058FBCB |. 3B55 0C CMP EDX,DWORD PTR SS:[EBP+C]
0058FBCE |. 75 07 JNZ SHORT ePaper.0058FBD7
0058FBD0 |. 3B45 08 CMP EAX,DWORD PTR SS:[EBP+8]
0058FBD3 |. 75 02 JNZ SHORT ePaper.0058FBD7
0058FBD5 |. B3 01 MOV BL,1
0058FBD7 |> 845D FF TEST BYTE PTR SS:[EBP-1],BL
0058FBDA |. 74 44 JE SHORT ePaper.0058FC20
最后一个
JE
比较狠毒,如果跳了,那么,一切就完了,因为跨度很大,而且跳出了我注册表的处理(看注释就知道了)。进入
0058FBC6
这个
call
是不是很累啊,我也是。
0058FCBA |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]<
——出现了机器码
0058FCBD |. 85C0 TEST EAX,EAX
0058FCBF |. 74 05 JE SHORT ePaper.0058FCC6
当然是在比较机器码是否为
0
当然是废话。这里突然看到了我们平时不常看到的浮点运算。我的天啊!对于这个我也是浮点盲。而且,里面还是比较的复杂。
0058FCD1 |> /8D45 DC /LEA EAX,DWORD PTR SS:[EBP-24]
;
等价于
mov eax,ebp-24
0058FCD4 |. |8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
;机器码所在位置
0058FCD7 |. |0FB65432 FF |MOVZX EDX,BYTE PTR DS:[EDX+ESI-1];
按顺序依次取机器码
0058FCDC |. |E8 1F58E7FF |CALL ePaper.00405500
0058FCE1 |. |8B45 DC |MOV EAX,DWORD PTR SS:[EBP-24]
0058FCE4 |. |E8 E7C9E7FF |CALL ePaper.0040C6D0
0058FCE9 |. |DB2D BCFD5800 |FLD TBYTE PTR DS:[58FDBC]
0058FCEF |. |DEC9 |FMULP ST(1),ST
0058FCF1 |. |E8 4638E7FF |CALL ePaper.0040353C
0058FCF6 |. |3345 E0 |XOR EAX,DWORD PTR SS:[EBP-20]
0058FCF9 |. |3355 E4 |XOR EDX,DWORD PTR SS:[EBP-1C]
0058FCFC |. |81F0 70B8EF1B |XOR EAX,1BEFB870
0058FD02 |. |81F2 00000000 |XOR EDX,0
;这句不知道来干什么,没用。
0058FD08 |. |85D2 |TEST EDX,EDX
0058FD0A |. |7D 07 |JGE SHORT ePaper.0058FD13
0058FD0C |. |F7D8 |NEG EAX
0058FD0E |. |83D2 00 |ADC EDX,0
0058FD11 |. |F7DA |NEG EDX
0058FD13 |> |0345 E0 |ADD EAX,DWORD PTR SS:[EBP-20]
0058FD16 |. |1355 E4 |ADC EDX,DWORD PTR SS:[EBP-1C]
0058FD19 |. |8945 E0 |MOV DWORD PTR SS:[EBP-20],EAX
0058FD1C |. |8955 E4 |MOV DWORD PTR SS:[EBP-1C],EDX
0058FD1F |. |46 |INC ESI
0058FD20 |. |4B |DEC EBX
0058FD21 |.^\75 AE \JNZ SHORT ePaper.0058FCD1
一个大循环
EBX
控制着循环次数,根据机器码的位数而定。上面就是在根据机器码推第一级注册码。我的机器码是:
64733192
这里这个家伙还应用了一个常量
3.1415926535897932380 ;CONST PI
我们看到里面有很多的
[EBP-24], [EBP-20], [EBP-1C], [EBP-4]
等,我们不妨把它们想象成数组,
int sz[7]
。基于
DELPHI
,的
string
变量的特殊性。它在计算长度的时候就是
0058FCC1 |. 83E8 04 SUB EAX,4
0058FCC4 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
这么两句就行了,因为它在第一个数组元素的值即是长度。经过
OD
调试发现
FLD
是一条压栈语句,而
FMULP ST(1),ST
是计算
st
(
1
)=
st
(
1
)×
st
然后整个浮点栈中的数据上升一位。如
st0
=
st1
,
st1
=
st2
……依次类推。最后一个变成
empty
。
上面是最最重要的部分,另外的只要你看得懂浮点运算,那么就很简单了。看到下面这两句,有什么感想
0058FD13 |> |0345 E0 |ADD EAX,DWORD PTR SS:[EBP-20]
0058FD16 |. |1355 E4 |ADC EDX,DWORD PTR SS:[EBP-1C]
一个典型的
__int64
类型的变量加法操作。总结一下上面代码的作用,我们要假设有一个地值为定值,设其为
addr
。描述一下就是:
[addr]=0
for (num=1;num<=8;num++)
{
eax=round(pi*int[num])
XOR EAX,1BEFB870
[addr]=eax +[addr]
}
很简单是吧
我的经上面计算之后我的第一级序列号是:
52010400374
下面还有一个循环,很无聊,可能是
delphi
的库函数。因为写得不按常人的思维写的。
0058FD4E |> /8B5D FC /MOV EBX,DWORD PTR SS:[EBP-4]
0058FD51 |. |85DB |TEST EBX,EBX
0058FD53 |. |74 05 |JE SHORT ePaper.0058FD5A
0058FD55 |. |83EB 04 |SUB EBX,4
0058FD58 |. |8B1B |MOV EBX,DWORD PTR DS:[EBX]
0058FD5A |> |8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
0058FD5D |. |50 |PUSH EAX
0058FD5E |. |8BCB |MOV ECX,EBX
0058FD60 |. |8BD6 |MOV EDX,ESI
0058FD62 |. |8B45 F8 |MOV EAX,DWORD PTR SS:[EBP-8]
0058FD65 |. |E8 E25AE7FF |CALL ePaper.0040584C;
重点在
call
内
0058FD6A |. |4E |DEC ESI
0058FD6B |. |8B45 F4 |MOV EAX,DWORD PTR SS:[EBP-C]
0058FD6E |. |8038 30 |CMP BYTE PTR DS:[EAX],30
0058FD71 |.^\74 DB \JE SHORT ePaper.0058FD4E
这里的作用是把序列号
cut
到和机器码一样长。如果要分析也很容易,我略过了。
所以我的序列号是:
10400374
这个软件最大的
bug
就是这个软件的注册码是以明码形式出现的,而且字符串泄密太多。太简单了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件:
e族百变桌面.rar
(30.06kb,40次下载)
image001.png
(10.14kb,96次下载)
image003.png
(6.71kb,99次下载)
收藏
・
1
免费
・
7
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2023-11-28 00:01
伟叔叔
为你点赞~
2023-8-28 00:12
一笑人间万事
为你点赞~
2023-6-8 00:14
QinBeast
为你点赞~
2023-6-2 03:02
shinratensei
为你点赞~
2023-5-13 00:40
心游尘世外
为你点赞~
2023-5-6 00:51
飘零丶
为你点赞~
2023-4-30 04:11
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
6
)
xss
雪 币:
471
活跃值:
(3718)
能力值:
( LV9,RANK:170 )
在线值:
发帖
9
回帖
314
粉丝
5
关注
私信
xss
4
2
楼
不错的分析,学习之
2007-6-4 21:52
0
河边渔者
雪 币:
164
活跃值:
(10)
能力值:
( LV4,RANK:50 )
在线值:
发帖
13
回帖
276
粉丝
0
关注
私信
河边渔者
1
3
楼
学到不少东西,谢谢LZ
2007-6-5 10:57
0
binbinbin
雪 币:
405
活跃值:
(10)
能力值:
( LV9,RANK:1130 )
在线值:
发帖
51
回帖
690
粉丝
0
关注
私信
binbinbin
28
4
楼
支持支持。现在居然还明码。嘿
2007-6-5 11:38
0
yijun8354
雪 币:
1919
活跃值:
(901)
能力值:
( LV9,RANK:490 )
在线值:
发帖
22
回帖
784
粉丝
1
关注
私信
yijun8354
12
5
楼
晕,几年过去了还没改变哦~
2007-6-5 11:49
0
wofan[OCN]
雪 币:
2899
活跃值:
(1753)
能力值:
( LV9,RANK:850 )
在线值:
发帖
55
回帖
810
粉丝
8
关注
私信
wofan[OCN]
21
6
楼
顶一顶,但要禁止谈恋爱!
2007-6-5 11:53
0
figa
雪 币:
200
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
23
粉丝
0
关注
私信
figa
7
楼
说的好,支持
2007-6-5 15:45
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
kflnig
14
60
发帖
237
回帖
570
RANK
关注
私信
他的文章
[原创]OALD8完美版制作教程
1520
[原创]mingw使用指南(持续更新中)
12847
[原创]过构建超长异常处理链antiOllyDbg
6452
[原创]在教人学vb,自己写的教程[更新中]
6961
[讨论]竞赛编程题。看到一道很可爱的题目。最好需要一小点数学知识。
4565
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
bstzxy
kanxue
cwx
gzzysmh
yunfeng
decolor
kingday
sztxgg
lxj168360
newton
vvlaw
hxx
bootdisk
aaaaa
RuShi
xss
三根火柴
chenzping
许胜
红色神话
basherone
河边渔者
chenyan
NONAME剑人
dfgdgg
我是wsw
wtylmf
licongok
yanzhixin
xyfxyfx
zhangfuhai
谁下载
×
bstzxy
kanxue
骨灰C
greentea
Phoenix
xingbing
cwx
xyzjhe
脱脱
wofan[OCN]
飘云
decolor
hchzdh
Anskya
kingday
sztxgg
bill_wfm
爬爬虫
maomaoma
lhglhg
!VChen
zbqy
yijun8354
北极星2003
redacker
bfqyygy
hrbx
foria
XiaosanAiq
foxabu
heimei
skylly
lbool
hbfp
hawking
陈埃
fishz
lendy
bootdisk
aaaaa
RuShi
yusjoel
wopasi
procyon
qkfang
lonkil
jollygrass
kflnig
hbhgqcyxh
flyingtime
vfer
csijason
soshort
theOcrat
飞鱼片
binbinbin
xnhzh
wuhanqi
疯狂菜鸟
dewar
yjyeming
工人一号
阳小子
demonhert
figa
bzhkl
basherone
ysctl
tebesa
humourkyo
sdfcfy
linyboy
动感超人
垃圾一个
coolwxd
ccgto
蓝莲花
XChicken
zhangfuhai
doking
哈哈在世
那年夏天
疯子鱼
shuguh
Barend
pathvar
kaith
fbly
谁下载
×
bstzxy
kanxue
骨灰C
greentea
Phoenix
xingbing
cwx
daxia200N
xyzjhe
脱脱
wofan[OCN]
飘云
decolor
hchzdh
Anskya
kingday
sztxgg
bill_wfm
爬爬虫
maomaoma
zhy_qie
lhglhg
!VChen
zbqy
yijun8354
北极星2003
redacker
bfqyygy
hrbx
foria
XiaosanAiq
foxabu
heimei
skylly
hbfp
hawking
陈埃
fishz
lendy
bootdisk
aaaaa
RuShi
yusjoel
wopasi
procyon
qkfang
lonkil
jollygrass
kflnig
ToT
hbhgqcyxh
flyingtime
vfer
csijason
soshort
theOcrat
飞鱼片
binbinbin
xnhzh
wuhanqi
疯狂菜鸟
dewar
yjyeming
工人一号
阳小子
demonhert
figa
bzhkl
basherone
ysctl
tebesa
humourkyo
sdfcfy
linyboy
动感超人
垃圾一个
coolwxd
ccgto
蓝莲花
XChicken
zhangfuhai
doking
哈哈在世
那年夏天
疯子鱼
shuguh
Barend
pathvar
kaith
fbly
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部