首页
社区
课程
招聘
[旧帖] [求助]小白在破解一个注册表重启验证的软件时遇到的问题,求助。 0.00雪花
发表于: 2013-10-3 22:19 27020

[旧帖] [求助]小白在破解一个注册表重启验证的软件时遇到的问题,求助。 0.00雪花

2013-10-3 22:19
27020
软件名称 :Crystalbutton
我的思路:
由于打开软件会出现一个提醒你注册的NAG
所以我就从这点入手 ,F8寻找哪里弹出NAG。

00408DF1   .  6A 00         push    0
00408DF3   .  68 C4324C00   push    004C32C4                         ;  ASCII "Show"
00408DF8   .  68 BC324C00   push    004C32BC                         ;  ASCII "Splash"
00408DFD   .  8BCF          mov     ecx, edi
00408DFF   .  E8 C6E70700   call    004875CA                         ;  关键CALL
00408E04      85C0          test    eax, eax
00408E06   .  0F84 96000000 je      00408EA2                         ;  若跳则可以跳过NAG
00408E0C   .  6A 01         push    1
00408E0E   .  8D4C24 7C     lea     ecx, dword ptr [esp+7C]
00408E12   .  E8 89ECFFFF   call    00407AA0
00408E17   .  8D4C24 78     lea     ecx, dword ptr [esp+78]
00408E1B   .  C78424 380600>mov     dword ptr [esp+638], 0E
00408E26   .  E8 A8AA0600   call    004738D3                         ;  呼出NAG
00408E2B   .  8D8C24 040200>lea     ecx, dword ptr [esp+204]
00408E32   .  C78424 380600>mov     dword ptr [esp+638], 13
00408E3D   .  E8 5E82FFFF   call    004010A0
可最后NAG是跳过了 却还是显示没有注册。
我跟进了关键CALL,也没有发现他读取了我的注册信息。
非常不解。求大牛指点一下!谢谢!

附上已脱壳的程序

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (28)
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持下 大手快来
2013-10-3 23:17
0
雪    币: 1556
活跃值: (853)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
3
调出NAG之前他就已经读取注册表判断是否注册,你跳过了NAG也没用
2013-10-3 23:25
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢帮顶~。呼唤大牛来看几眼~
2013-10-3 23:25
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
大牛快快搞定 加油
2013-10-3 23:30
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
回复3L:
我一开始也下了RegOpenKeyExA这个断点,可是没发现读取了我的假码啊(假码在注册表里没加密)
2013-10-3 23:40
0
雪    币: 113
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
简单跟了下 你看下 关键call里面的这两句
00487615  |.^\75 CD         jnz Xdumped_.004875E4
00487617  |.  8B45 FC       mov eax,[local.1]

eax==0则表示注册
eax!=0则未注册

不对的话请楼下高手指正
2013-10-4 02:42
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我按你的方法让EAX置0,跳过了NAG却没有注册。不对
2013-10-4 13:34
0
雪    币: 113
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
昨天就用的这方法。。。进入后的关于页面直接由个Regited to XXX的乱码...既然不对 你那自己再研究研究吧
2013-10-4 15:58
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
nag 只是调用 你跳过也没用 不到关键cal都是白说
2013-10-4 16:04
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
有些难度
2013-10-4 16:37
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
回复10L:
那你看看关键CALL在哪里呢。
2013-10-4 17:00
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
额,不会吧。是直接置0然后F9运行?
2013-10-4 17:02
0
雪    币: 1556
活跃值: (853)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
14
你确定它不是文件重启验证?
2013-10-4 17:25
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
额。难道那个注册表是骗人的。= = 我还真不确定是不是文件重启验证。我去试试
2013-10-4 18:52
0
雪    币: 26
活跃值: (189)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
找个成功注册过的完整注册信息
调试找到机器码所在的内存地址或寄存器等,把机器码改成上面对应的机器码,再用上面对应的注册码组成。
具体用dll劫持法比较好实现。
这原理是比较彻底的,爆破的方式暗疮的可能性比较大
2013-10-7 11:41
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
额。 这个的确可以用你说的方法,视频里也是这样随手破的。
但是我想问的是到底这个程序如何注册的。
我找的那个关键CALL对吗
2013-10-7 23:04
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
7 楼 不bui 的提示很有用。

未注册


已注册


祝楼主早日成功,并且发布一个心得的帖子。

补充,
依据 不bui 提供的线索,在不输入注册码的情况下,注册的名字是乱码没错。
如果你有可用的注册码,应该可以显示正常名字。
上传的附件:
2013-10-9 18:03
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我将 mov eax,dword ptr [ebp-4]
改为了 xor eax,eax
依旧显示没注册
后面我又觉得可能是 EBP-4这个值其他地方还要用,
于是我又打了一个补丁 在这里改成了
xor dword ptr [ebp-4],dword ptr [ebp-4]
xor eax,eax
依旧没注册 。 非常不解。
请问你是怎么修改的呢?
2013-10-10 18:53
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
应该找到关键调,call指令,而直接找注册表位置,基本已经过了。
2013-10-11 11:59
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
[QUOTE=reveur;1229585]我将 mov eax,dword ptr [ebp-4]
改为了 xor eax,eax
依旧显示没注册
后面我又觉得可能是 EBP-4这个值其他地方还要用,
于是我又打了一个补丁 在这里改成了
xor dword ptr [ebp-4],dword ptr [ebp-4]
xor eax,eax
...[/QUOTE]

首先,修改这个地址并不是注册。
它只是把这里的取出值修改为 0。

你手动修改注册表这个地方为 0,效果是一样的。
只是刚进程序时,不显示注册提示。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Crystal_Button_2\Crystal\Splash]
"Show"=dword:00000001


但,由于你是未注册,所以程序会帮你把这里设置为 1.
下次再运行,就又出现注册提示了。

到此,你有很多线索了。
并且知道,这软件确实可以注册成功的。
接下来,就靠你自己思考,一个一个尝试看看。

我本身鼓励每个人自己动手学习,
所以我不会直接告诉你答案。
以免剥夺你成功之前的挫折,以及成功之后的喜悦。
2013-10-12 12:05
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢zenix!
我再试试
2013-10-13 14:46
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
23
不知楼主进展如何。
找了个v2.8的看了看,有点意思,可玩性极强!

它是用ASProtect 1.23 RC4来保护的,并使用了它的注册系统。
查壳软件能识别出是ASProtect,但不能确定具体版本。比如,DIE: ASProtect(1.33-2.1 Registered)[EXE32];FastScanner 4: ASProtect v1.33 - v2.1 Registered -> Alexey Solodovnikov。
ASPrINFO则一无所知,因为它实在太老了──十年前的产品。从其整个体系的设计思想和算法的具体实现来看,不能否认它的经典。
正因为经典,有很多人研究,按这个版本搜索论坛会得到大量文章。知道的人多了,强度自然就减弱了。
读那些文章很有意思,你会发现它造就了现在论坛的一大批大神!有的已经离开,让人怀念。

不过这些文章讲脱壳、破解的多,几乎没有找到讲算法的(我的搜索有问题?)。
为什么要脱?我逐渐明白了,国情决定的,因为要“汉化”。Crystal Button 2.5/2.8有很好的破解中文版,可供研究学习。

论坛有篇帖子讲怎么利用到达OEP之前内存访问异常的次数来准确识别早期ASProtect的版本,我写了个脚本来记录次数(26次)和位置以确认版本。当然对Crystal Button来说,已早有定论。
算法方面,Amenesia//TKM!有文章讲利用AS在生成RSA密钥时的漏洞来攻击ASProtect 1.0/1.1/1.11c的RSA-1024保护。论坛有两个帖子翻译这同一文章,足见其影响和重要。

好了,现在有两条路:脱壳、破解或搞定注册算法。

a) 脱壳、破解
有太多的文章,fly有很多经典文章。用工具脱或手工脱:Stripper不能替你还原OEP处的代码,手工则可以完全补回OEP的Stolen Code。VolX的脚本脱不了,目标版本太低!
这里有个术语:Pre-Dip。lipton有两篇文章专门讲这个,其中一篇还特别提到“水晶按钮”。请搜索KSSD或《看雪论坛精华6》。
脱完后,程序可以运行。“以自己的名字注册”也可出ZeNiX展示的About。但是事情没这么容易:注册版的导出和项目保存功能没法用。还需要破解!
我相信ZeNiX手里有可供注册的Key,嘿嘿!

b) 研究注册算法
如果楼主打算学习它的注册原理,就不应从你脱壳后的版本开始,这是徒劳:ASProtect的注册系统已经被你脱掉了,找不到的!
应该从原版开始!为方便,这次应勾选忽略"Memory access violation"。
楼主的思路是对的,断RegOpenKeyExA。我Crystal Button 2.8的记录:
[FONT="Courier"]00E1962D    E8 C6BAFFFF      CALL    00E150F8           ; JMP to advapi32.RegOpenKeyExA
00E19632    85C0             TEST    EAX, EAX
        0012FA70   00E19632  /CALL to RegOpenKeyExA from 00E1962D
        0012FA74   80000001  |hKey = HKEY_CURRENT_USER
        0012FA78   00E41F98  |Subkey = "Software\Crystal_Button_2\Crystal\Registration"
        0012FA7C   00000000  |Reserved = 0
        0012FA80   00020019  |Access = KEY_READ
        0012FA84   0012FAAC  \pHandle = 0012FAAC

00E1965F    E8 A4BAFFFF      CALL    00E15108           ; JMP to advapi32.RegQueryValueExA
00E19664    85C0             TEST    EAX, EAX
        0012FA6C   00E19664  /CALL to RegQueryValueExA from 00E1965F
        0012FA70   0000005C  |hKey = 5C
        0012FA74   00E41F08  |ValueName = "Key"
        0012FA78   00000000  |Reserved = NULL
        0012FA7C   0012FAA0  |pValueType = 0012FAA0
        0012FA80   00000000  |Buffer = NULL
        0012FA84   0012FAA8  \pBufSize = 0012FAA8

00E1968F    E8 74BAFFFF      CALL    00E15108           ; JMP to advapi32.RegQueryValueExA
00E19694    8B45 F0          MOV     EAX, [EBP-10]
        0012FA6C   00E19694  /CALL to RegQueryValueExA from 00E1968F
        0012FA70   0000005C  |hKey = 5C
        0012FA74   00E41F08  |ValueName = "Key"
        0012FA78   00000000  |Reserved = NULL
        0012FA7C   0012FAA0  |pValueType = 0012FAA0
        0012FA80   00E42028  |Buffer = 00E42028
        0012FA84   0012FAA8  \pBufSize = 0012FAA8

00E196B9    E8 22BAFFFF      CALL    00E150E0           ; JMP to advapi32.RegCloseKey
00E196BE    33C0             XOR     EAX, EAX
        0012FA80   00E196BE  /CALL to RegCloseKey from 00E196B9
        0012FA84   0000005C  \hKey = 0000005C[/FONT]

这里内部DLL的基址在00E10000,大小0001E000。在不同的操作系统和机器上会不同。已经不是程序的原区段地址空间了,所有的算法都在这里。
第一次advapi32.RegQueryValueExA返回Key的长度以分配空间,第二次读入Key。接下来返回地址00E19694以后就是怎么处理Key了。

搞清楚了它的算法和Key的结构后,再结合ASProtect自带的Keygen示例就可以自己做注册机了。
我测试机器的“硬盘指纹”和注册码:
[FONT="Courier"]HardwareID = "FKTuYABgFAA="
Key = "1xdggZpH/3Rs02Os8RNY2YzFkZt2l226TtBD33nx204wF6gnmig6/AHoBV62aJnmobrEcOIPGgaacrUFtf05TFx+1ZYaI9S9dqxBhk8RllVlA7C9fxwadw1bES0bh4ytXUo2TYr9vr2MS/BWvhC8KPno8Qrbf+JiUrKAz96DLwFM="[/FONT]
注意Key的第一个字符:'0'/'1',硬件锁定与否,应排除在BASE64编码范围内。“硬盘指纹”、Key的结构等等,如果有兴趣以后再讲。
按以往的经验替换用于RSA解密的密钥后,我就可以顺利注册了。但是Key里包含一个A(见Amenesia//TKM!的文章),我是没有的。它用来解密DLL后面的代码和程序空间的代码,没有它我就走不下去了。
这是ASProtect的强悍之处,所以破解的多,“注册”的少。很偶然地得到了它,这样我就能成功“注册”了。

16楼kingday讲“找个成功注册过的完整注册信息...”。是的,象这种东西,没有有效的注册信息很难搞,只有破解这条路可走。

遵循ZeNiX的教导,不要剥夺别人的挫折和喜悦。今天先讲这些,如果有需要再上传一个替换RSA密钥的“原版”和Key供参考。
“注册版”还可以弄成这样哦:
上传的附件:
2013-10-19 12:33
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我按你的方法让EAX置0,跳过了NAG却没有注册。不对
2013-10-19 13:02
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
[QUOTE=MistHill;1232113]不知楼主进展如何。
找了个v2.8的看了看,有点意思,可玩性极强!

它是用ASProtect 1.23 RC4来保护的,并使用了它的注册系统。
查壳软件能识别出是ASProtect,但不能确定具体版本。比如,DIE: ASProtect(1.33-2.1 Registered)[EXE32...[/QUOTE]
感谢 MistHill回复的这么详细!小白不胜感激!
我的进展因为最近学业压力而耽搁了,不过看了您的回复后,明白了很多天草视频里没讲的东西,等最近忙过一段时间后我再整理整理思路好好研究下。
话说新人学这些真的好迷茫啊,总感觉视频那些什么的总是告诉你 怎么做,而没有讲述原理方面的。
请问如果要从原理开始学习 脱壳 或者 破解 应该从哪些基本的看起呢?
2013-10-20 20:59
0
游客
登录 | 注册 方可回帖
返回
//