首页
社区
课程
招聘
[旧帖] [原创]破解多重验证及解除功能限制的详细全过程,图文并茂 0.00雪花
2012-5-10 19:27 11107

[旧帖] [原创]破解多重验证及解除功能限制的详细全过程,图文并茂 0.00雪花

2012-5-10 19:27
11107
【文章标题】: 【原创】新手破解keyfile及功能限制全过程
【文章作者】: 呆呆的幻行者
【作者邮箱】: [email]369989309@163.com[/email]
【作者QQ号】: 381561450
【软件名称】: 数控机床联网专家--DSDNC
【软件大小】: 3.80M
【下载地址】: www.dssoft.com.cn
【加壳方式】: UPX
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OllyICE,PEID,UPXShell
【操作平台】: XP SP3
【作者声明】: 我是新手,这是我破解的第一个软件。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  帮朋友破解这个软件,软件介绍如下:
  注册限制:
  1.打开提示注册,输入错误注册码后,直接关闭
  2.注册成功后,生成key.ini文件,每次启动检测key.ini,如果即将过期,过期,无效,无法使用,这四种情况则弹出messagebox,然后自动退出。
  功能限制:
  1.注册成功后,打开软件,在设置界面里有一个combox下拉框,里边只有com1到com10这10个选项,朋友要求增加到com100
  ==========================================================================================
  
  第一步:脱壳
  先用PEID(看雪网站工具区可以下载到)查壳,可以看到是UPX的壳,
  再用UPXShell(看雪网站工具区可以下载到)脱壳。
  脱完壳后,可以看到是Microsoft Visual C++ 6.0编写的软件。EP Section显示.text,EntryPoint和File Offset显示相同,均为00006C12
  深度扫描一下,信息没有变化。说明脱壳成功。
  
  第二步:动态调试
  使用OllyICE(看雪网站工具区可以下载到)载入程序,
  直接点击右键,使用插件,查看所有参考字符串。

看到如图四条提示。随便双击一个。

  看到没有,就是这里,

如果注册码过期就自动退出。这里就要动动脑筋了。注册码即将过期,过期,无效,无法使用,这四种情况自动退出。还有输入无效注册码没有提示,直接退出,我们只需要找到第五个无故退出的地方就OK了。
  双击
  00403B6F  |.  FF15 30804000 call    dword ptr [<&KERNEL32.ExitProcess>]     ; \ExitProcess

  复制
call    dword ptr [408030]

  Ctrl+F查找
call    dword ptr [408030]

  一共找到10个地方,除去刚才四个。还有四个。
  先看最后两个。
  
00404000   .  E8 25270000   call    <jmp.&MFC42.#1168_AfxGetModuleState>
  00404005   .  8B48 04       mov     ecx, dword ptr [eax+4]
  00404008   .  E8 09290000   call    <jmp.&MFC42.#2652_CCmdTarget::EndWaitCu>
  0040400D   .  8D4C24 30     lea     ecx, dword ptr [esp+30]
  00404011   .  C64424 48 02  mov     byte ptr [esp+48], 2
  00404016   .  FF15 FC834000 call    dword ptr [<&ncuicore.CMultiLanguageToo>;  ncuicore.CMultiLanguageTool::~CMultiLanguageTool
  0040401C   .  8D4C24 20     lea     ecx, dword ptr [esp+20]
  00404020   .  C64424 48 01  mov     byte ptr [esp+48], 1
  00404025   .  E8 E6280000   call    <jmp.&MFC42.#665_CFile::~CFile>
  0040402A   .  8D4C24 0C     lea     ecx, dword ptr [esp+C]
  0040402E   .  C64424 48 00  mov     byte ptr [esp+48], 0
  00404033   .  E8 6E260000   call    <jmp.&MFC42.#800_CString::~CString>
  00404038   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
  0040403C   .  C74424 48 FFF>mov     dword ptr [esp+48], -1
  00404044   .  E8 5D260000   call    <jmp.&MFC42.#800_CString::~CString>
  00404049   .  8B4C24 40     mov     ecx, dword ptr [esp+40]
  0040404D   .  5F            pop     edi
  0040404E   .  5E            pop     esi
  0040404F   .  B8 01000000   mov     eax, 1
  00404054   .  64:890D 00000>mov     dword ptr fs:[0], ecx
  0040405B   .  5D            pop     ebp
  0040405C   .  83C4 40       add     esp, 40
  0040405F   .  C3            retn
  00404060   >  6A 00         push    0                                       ; /ExitCode = 0
  00404062   .  FF15 30804000 call    dword ptr [<&KERNEL32.ExitProcess>]     ; \ExitProcess

  
  类似这样子。在退出之前没有判断语句,应该不是。
  再看另外四个
  
00402BC2   .  6A 04         push    4                                       ; /ExitCode = 4
  00402BC4   .  FF15 30804000 call    dword ptr [<&KERNEL32.ExitProcess>]     ; \ExitProcess
  第一个,ExitCode = 4 应该不是。
  第三个和第四个
  00403852  |.  FF15 04804000 call    dword ptr [<&ADVAPI32.RegOpenKeyA>]     ; \RegOpenKeyA
  00403858  |.  85C0          test    eax, eax
  0040385A  |.  74 16         je      short 00403872
  0040385C  |.  6A 00         push    0
  0040385E  |.  6A 00         push    0
  00403860  |.  68 BCC04000   push    0040C0BC                                ;  system error!
  00403865  |.  E8 8E300000   call    <jmp.&MFC42.#1200_AfxMessageBox>
  0040386A  |.  6A 00         push    0                                       ; /ExitCode = 0
  0040386C  |.  FF15 30804000 call    dword ptr [<&KERNEL32.ExitProcess>]     ; \ExitProcess

  
  有判断,有退出。但是退出之前的注释是“system error!” 这两个应该是系统出错退出。
  排除法就只剩下第二个了,

  00403767  |.  3BF7          cmp     esi, edi
  00403769      74 07         je      short 00403772
  0040376B  |.  57            push    edi                                     ; /ExitCode
  0040376C  |.  FF15 30804000 call    dword ptr [<&KERNEL32.ExitProcess>]     ; \ExitProcess
  00403772  |>  8D4C24 30     lea     ecx, dword ptr [esp+30]

  
  
  
  这个退出之前有判断,肯定是他了,如果我没有猜错的话,这个判断就是判断注册码是否有效,如果有效则转跳到00403772
  这就好办了,无脑爆破之,双击
je      short 00403772 
修改为
jmp      short 00403772

  点击右键,复制到可执行文件,保存文件。
  执行,随便输入一个注册码,软件没有自动关闭,我们成功了~!!
  但是立即弹出了一个提示框,提示注册码无效。
  
  第三步:解决key.ini无效及过期的问题。
  无需多说,直接查找参考字符串,找到四个字符串。双击第一个。

  je      short 00403B75

  修改为
 jmp      short 00403B75

  其他三个同理。
  再打开软件,软件运行正常。
  点击设置,发现在设置界面里有一个combox下拉框,里边只有com1到com10这10个选项,朋友要求增加到com100
  
  第四步:修改功能限制
  既然有数量限制。说明这个combox里的东西肯定是动态增加的。如果要动态增加肯定要格式化字符串,
  还记得之前我们用peid看到这个软件是用Microsoft Visual C++ 6.0 编写的吧
  格式化字符串肯定是com%d

  到参考字符串里找到com%d,双击之
 300032E9    8D4C24 18       lea     ecx, dword ptr [esp+18]
  300032ED    68 1C010230     push    3002011C                                ; ASCII "COM%d"
  300032F2    51              push    ecx
  300032F3    E8 00E10000     call    <jmp.&MFC42.#2818_CString::Format>
  300032F8    8B5424 20       mov     edx, dword ptr [esp+20]
  300032FC    8B86 B4010000   mov     eax, dword ptr [esi+1B4]
  30003302    83C4 0C         add     esp, 0C
  30003305    52              push    edx
  30003306    53              push    ebx
  30003307    68 43010000     push    143
  3000330C    50              push    eax
  3000330D    FFD7            call    edi
  3000330F    45              inc     ebp
  30003310    83FD 0A         cmp     ebp, 0A
  30003313  ^ 7E D3           jle     short 300032E8

  
  
  看到没,很典型的一个循环体,每次都和0A进行比较,如果小于0A就转跳回去,继续添加。把循环次数0A改成64.
  重新运行软件,可以看到100个com口。
  
  打完收工。~
顺便问一句,如何成为正式会员?
  
--------------------------------------------------------------------------------
【经验总结】
  感谢我的朋友hyp,关于解除功能限制的地方是他找到的。万分感谢。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2012年05月10日 19:22:46

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (50)
雪    币: 135
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯狂阿呆 2012-5-10 20:02
2
0
顺便问一句,如何成为正式会员?
雪    币: 270
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
小天狼星 2012-5-10 20:40
3
0
mfc的库函数怎么显示出来的?
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
孤单的狼 2012-5-10 20:52
4
0
不错 很适合我们这些新手观看
雪    币: 51
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
HuErr 2012-5-10 20:53
5
0
围观喽。。。
雪    币: 135
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯狂阿呆 2012-5-10 21:15
6
0
我不明白你在讲什么。。。
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
liuyq 2012-5-10 21:45
7
0
在菜单 里加载LIB文件就可以了
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
liuyq 2012-5-10 21:47
8
0
用100KX换个邀请码,就在控制面板里,左边找
雪    币: 63
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rainboys 2012-5-10 22:05
9
0
围观喽。。。
雪    币: 135
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯狂阿呆 2012-5-10 22:50
10
0
我按照你说的,购买了注册邀请码,怎么使用呢? 有效期只有15天啊
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
agaowei 2012-5-10 23:13
11
0
点击成为正式会员就会用到了
雪    币: 135
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯狂阿呆 2012-5-10 23:20
12
0
成为正式会员的按钮在哪里呢?
雪    币: 192
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jackyuy 2012-5-11 00:14
13
0
受教了.谢谢楼主!
雪    币: 155
活跃值: (225)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
prik 2012-5-11 09:46
14
0
这篇文章不错,很工整
雪    币: 1683
活跃值: (380)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
hackerlzc 10 2012-5-11 23:50
15
0
mark一下,顺便灌水。
雪    币: 602
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kangcin 2012-5-12 06:56
16
0
看雪真好,灌水都么事
雪    币: 295
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
榻榻米 2012-5-12 09:23
17
0
看雪真是没落了 这种帖子也能加精了。。
雪    币: 6
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kingfs 2012-5-12 09:45
18
0
多谢楼主分享,新手学习了
雪    币: 1579
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
柔情似水 2012-5-12 10:50
19
0
不错,楼主技术不错了啊,呵呵。应该比我强。
雪    币: 71
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
StartAoA 2012-5-12 15:05
20
0
楼主:你是想说成为神马VIP会员、高级会员、中级会员?VIP会员,我等人是望成莫及啦~~

不过,多弄几篇精华篇,那还是很容易进阶的~~
雪    币: 111
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ronging 2012-5-12 15:40
21
0
回去试下。..
雪    币: 5660
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rjchen 2012-5-12 15:54
22
0
不错啊,学习一下了啊
雪    币: 81
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
寻梦小子 1 2012-5-13 00:04
23
0
受教了.谢谢楼主
雪    币: 6
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
nightx 2012-5-13 00:46
24
0
个人认为,衡量一个帖子也不能仅依赖技术等级吧。而且,舍得发帖子总是好的。大牛技术很强,但不分享,与没有大牛有什么区别?在我看来,作者介绍的思路至少比较正统,给新手一个学习的机会。还是不错的。
呵呵,说的不对之处请指教
雪    币: 2105
活跃值: (404)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
exile 1 2012-5-13 15:15
25
0
呆呆不是去国外了么。
游客
登录 | 注册 方可回帖
返回