首页
社区
课程
招聘
[旧帖] [原创]Ghost mp3 0.00雪花
发表于: 2007-2-11 15:19 3267

[旧帖] [原创]Ghost mp3 0.00雪花

2007-2-11 15:19
3267
打开Ghost mp3,四处转转,看看有什么限制。看到如图一的时候,我着实吓了一跳。有时汉化过的软件会这样,提供一组注册码。



图一
不管它,我的目的不仅是注册码,而且还想要注册代码。
首先,peid扫壳,ASPack 2.12 -> Alexey Solodovnikov
可恶的是PEID自己的插件无法脱,手动esp定律然后用ImportREC很好的解决了。
再扫发现是Borland Delphi 6.0 - 7.0这个写的。
那好,DEDE出马,找到一个register的类,如图二,肯定就是这里了



图二
右边看看发现button_okclick最像是注册call。如图三



图三
双击button_okclick出现反汇编代码?找到如下字符串。
* Possible String Reference to: '⒉岢晒? 非常感谢您的注册, 欢迎您在
|                                使用中提出宝贵意见和建议! 汉化作者:
|                                周宝峰 向您祝贺!  '
关键在前面。向前看看,看到这个好熟悉,我不多说了。关键啊!

004A94A1   E886CEFFFF             call    004A632C
004A94A6   84C0                   test    al, al
004A94A8   0F84CE000000           jz      004A957C

看前面代码,知道al在这个call出来时需不为0,否则就跳向了注册错误的代码处了!
进入004A632C(在004A94A1行双击就可以了)。

004A6370   E893FCFFFF             call    004A6008
004A6375   8B45F4                 mov     eax, [ebp-$0C]
004A6378   8B55F8                 mov     edx, [ebp-$08]
004A637B   E8C0E2F5FF             call    00404640
004A6380   0F94C3                 setz    bl
……
004A63A5   8BC3                   mov     eax, ebx

这些东西联系在一起我还有什么可说的呢!bl必须要不为0,即setz bl条件一定要满足,也就是说在执行这条语句的时候zero标志位需要为1。
当然我们得去00404640这个里面看看,哎,一大堆的比较和跳转,这时假如你对代码的感知程度强一点的话,你也许会猜到,这个东西的代码是以明码显示的,这里就是在进行比较的地方。因为在004A6375和004A6378两处,EAX和EDX寄存器作为参数传了进去。而且前面只有一个call我认为那个call只会处理一件事或处理用户名或处理注册码。所以现在我们来动态调戏一次,验证一下。
OD载入。F9(运行)。输入
用户名和注册码,如图四所示。



图四
直接CTRL+G(转到――>表达式)到004A94A1,F2下断。然后到返回到ghost mp3界面中点确定。
断下后F7(单步步入)进这个call。

004A635E   837DFC00               cmp     dword ptr [ebp-$04], +$00;发现此处指针的指向为kflnig(用户名),在比较用户名长度是否为0,隐含地告诉我们接下去有戏!
004A6362   741F                   jz      004A6383;不跳,除非你的用户名长度是0
004A6364   837DF800               cmp     dword ptr [ebp-$08], +$00;不用说这里就是注册码了的比较是否为0了。
004A6368   7419                   jz      004A6383;同上,不跳
004A636A   8D55F4                 lea     edx, [ebp-$0C]
004A636D   8B45FC                 mov     eax, [ebp-$04];eax中又指向了用户名,看来下面一句的这个call是在处理用户名然后得出序列号。

* Reference to : TThreadedTimer._PROC_004A6008()
|
004A6370   E893FCFFFF             call    004A6008
004A6375   8B45F4                 mov     eax, [ebp-$0C]
004A6378   8B55F8                 mov     edx, [ebp-$08]

不管你乐意还是不乐意,假如你要分析算法004A6370这个call你是非进不可了。F7进入。很长,看着都像在生成注册码!^_^,通过动态调戏,发现本来就是吗,而且[ebp-$0C]是真码的地址了!有耐力的话,你去看看004A6370处的这个call吧!

/*4A6121*/  MOV EAX,ghost_mp.004A6318
/*4A6126*/  CALL ghost_mp.00409858
/*4A612B*/  MOV EDX,DWORD PTR SS:[EBP-20]
/*4A612E*/  MOV EAX,DWORD PTR SS:[EBP-8]
/*4A6131*/  CALL ghost_mp.004044FC
/*4A6136*/  MOV EAX,DWORD PTR SS:[EBP-8]

以上的两处call关键call中的关键,是比较头痛的两处,下面还会多次用到。此处我略过了不去看它们了,否则这篇文章长度就要×5了,而且我自己又要花一个晚上去看这个头疼的代码了,再者还会有几只小鸟可以看懂,我还未必可以分析出来,但是我有一个感觉,就是好像算法并不是那么简单,可能是一些经典的算法,可是peid的插件kanal却找不到有这种算法,也许某些数据它是动态生成的吧!
好了,我就这么结束了,通过本文我希望你感受到DEDE的好,也加强对汇编代码的感知程度和理解,最后如果你有兴趣可以给它做一个内存注册机,也不简单哟!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
坐坐沙发!
2007-2-11 16:59
0
游客
登录 | 注册 方可回帖
返回
//