这篇文章是我前两天写的,本来没有发表在这里的意思,毕竟这种文章对于高手们来说简直不屑一顾,但我发现这里有好多想入门和想学破解的朋友急于希望能看到一些对自己有帮助的文章,所以我才献丑发表在这里,毕竟我也是菜鸟所以很理解那些朋友的心情,让大家见笑了。
假如我的这篇文章对你哪怕有一点点帮助,那我的目的也就达到了。
==================================================================================
【工程作者】深海游侠
【作者邮箱】shenhaiyouxia@163.com
==================================================================================
【软件名称】叮咚极品网络电视电影III V3.92
【下载地址】http://www1.skycn.com/soft/16782.html
【所受限制】功能限制
【加壳保护】ASPack加壳
【软件介绍】
软件大小: 1052 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 网络电视
应用平台: Win9x/NT/2000/XP
界面预览: 无
加入时间: 2004-05-25 21:58:32
下载次数: 4725
中国在线电视电影数量第一位的软件!追求稳定、高速的网络电视电影软件!
汇集国内、外、港澳台300多家电视台以及精彩的明星写真,精彩电影,学习视频、动听音乐、游戏动画等,同时收集了许多当今国内、外最酷、最流行的上百套音乐和外语广播电台节目。本软件最注重节目质量,专用服务器提供热点影视,节目收看率极高。
1、提供超过几百套超高清晰的卫星电视节目,高速HBO大片,BBC新闻,日本MM、港台凤凰、华娱、星空、TVB系列,国内中央及各省卫星电视节目 。
2、提供境内外广播、特别影视、精彩实况、在线电影,在线音乐,精彩动画、时尚写真、游戏等。
3、采用\"智能链\"技术,内置多种加速引擎,智能分析网络状态追寻最佳速度方案
4、小巧玲珑,以实用为本,启动快速,占用系统资源极少,不产生垃圾文件! 不修改注册表系统!
5、专业人员每天更新电视电影数据,发布前经过严格测试,确保每个节目有效,回报注册用户 。
==================================================================================
【工程平台】WIN ME
【调试工具】Ollydbg W32DASM FI 2.5 WINDOWS自带计算器
【脱壳方式】专用工具脱壳
==================================================================================
【破解过程】
因为今天心情烦闷,新买的麦居然用不了,看来明天还要跑趟商店换换哈。想看电视又怕影响到家人,没办法去下个网络电视吧,没想到限制多多,于是就想研究起这方面的软件算法来,这类软件最近不是很火的嘛:)好拉废话不多说开始我们的破解旅程!!
查壳 ASPACK 2.12,脱之→Borland Delphi 6.0 - 7.0。用偶最熟悉的TRW2000载入,恩?非法。晕系统死琐,从起再试还是不行,不知道是不是我机器的问题,没办法只好用我最不擅长的OD了。没想到这东西这么方面。
W32DASM载入程序,找到关键爆点 4D4E75,在他前面的地方下断点,F9运行输入用户名:cxxx 假码:121212.程序断在这里:
004D4E01 . 8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]
004D4E07 . E8 D87AF6FF CALL UNPACKED.0043C8E4
004D4E0C . 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 ------->是否输入注册码?
004D4E10 . 74 14 JE SHORT UNPACKED.004D4E26 ------->没,那再见。
004D4E12 . 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
004D4E15 . 8B83 14030000 MOV EAX,DWORD PTR DS:[EBX+314]
004D4E1B . E8 C47AF6FF CALL UNPACKED.0043C8E4
004D4E20 . 837D F8 00 CMP DWORD PTR SS:[EBP-8],0 -------->是否输入用户名?
004D4E24 75 35 JNZ SHORT UNPACKED.004D4E5B -------->没?那再见。跳下去。
004D4E26 > A1 20D34D00 MOV EAX,DWORD PTR DS:[4DD320]
004D4E2B . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004D4E2D . E8 266BF8FF CALL UNPACKED.0045B958
004D4E32 . 6A 00 PUSH 0
004D4E34 . B9 CC4F4D00 MOV ECX,UNPACKED.004D4FCC
004D4E39 . BA D44F4D00 MOV EDX,UNPACKED.004D4FD4
004D4E3E . A1 20D34D00 MOV EAX,DWORD PTR DS:[4DD320]
004D4E43 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004D4E45 . E8 4E7CF8FF CALL UNPACKED.0045CA98
004D4E4A . A1 20D34D00 MOV EAX,DWORD PTR DS:[4DD320]
004D4E4F . 8B00 MOV EAX,DWORD PTR DS:[EAX]
004D4E51 . E8 126BF8FF CALL UNPACKED.0045B968
004D4E56 . E9 32010000 JMP UNPACKED.004D4F8D
004D4E5B > 33C0 XOR EAX,EAX
004D4E5D . 55 PUSH EBP
004D4E5E . 68 7C4F4D00 PUSH UNPACKED.004D4F7C
004D4E63 . 64:FF30 PUSH DWORD PTR FS:[EAX]
004D4E66 . 64:8920 MOV DWORD PTR FS:[EAX],ESP
004D4E69 . A1 00EF4D00 MOV EAX,DWORD PTR DS:[4DEF00]
004D4E6E . E8 2DFEFFFF CALL UNPACKED.004D4CA0 -------->算法CALL,跟进!
004D4E73 . 84C0 TEST AL,AL
004D4E75 . 0F84 BA000000 JE UNPACKED.004D4F35 -------->剥破这里即可。(我想你不会只爆他吧:))
004D4E7B . B8 0C504D00 MOV EAX,UNPACKED.004D500C
004D4E80 . E8 3B15F6FF CALL UNPACKED.004363C0 -------->成功之门
004D4E85 . B2 01 MOV DL,1
004D4E87 . A1 0C0E4600 MOV EAX,DWORD PTR DS:[460E0C]
004D4E8C . E8 7BC0F8FF CALL UNPACKED.00460F0C
004D4E91 . 8BF0 MOV ESI,EAX
004D4E93 . BA 02000080 MOV EDX,80000002
004D4E98 . 8BC6 MOV EAX,ESI
004D4E9A . E8 0DC1F8FF CALL UNPACKED.00460FAC
004D4E9F . B1 01 MOV CL,1
004D4EA1 . BA 20504D00 MOV EDX,UNPACKED.004D5020 ; ASCII "Software\dingdongsoft\ddnettviii" 不用我说也知道这个是成功后的标志吧。
004D4EA6 . 8BC6 MOV EAX,ESI
算法CALL:
004D4E6E . E8 2DFEFFFF CALL UNPACKED.004D4CA0
|
004D4CA0 /$ 55 PUSH EBP
004D4CA1 |. 8BEC MOV EBP,ESP
004D4CA3 |. B9 05000000 MOV ECX,5
004D4CA8 |> 6A 00 /PUSH 0
004D4CAA |. 6A 00 |PUSH 0
004D4CAC |. 49 |DEC ECX
004D4CAD |.^ 75 F9 \JNZ SHORT UNPACKED.004D4CA8
004D4CAF |. 51 PUSH ECX
004D4CB0 |. 53 PUSH EBX
004D4CB1 |. 56 PUSH ESI
004D4CB2 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
004D4CB5 |. 33C0 XOR EAX,EAX
004D4CB7 |. 55 PUSH EBP
004D4CB8 |. 68 CE4D4D00 PUSH UNPACKED.004D4DCE
004D4CBD |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004D4CC0 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004D4CC3 |. 33F6 XOR ESI,ESI
004D4CC5 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
004D4CC8 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004D4CCB |. 8B80 0C030000 MOV EAX,DWORD PTR DS:[EAX+30C]
004D4CD1 |. E8 0E7CF6FF CALL UNPACKED.0043C8E4
004D4CD6 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ------->出现敌情。(机器码)
004D4CD9 |. E8 AAFCF2FF CALL UNPACKED.00404988
004D4CDE |. 8BD8 MOV EBX,EAX
004D4CE0 |. 85DB TEST EBX,EBX
004D4CE2 |. 7E 43 JLE SHORT UNPACKED.004D4D27 ------->一定不会跳吧。
004D4CE4 |. C745 F8 01000>MOV DWORD PTR SS:[EBP-8],1
004D4CEB |> 8D45 F0 /LEA EAX,DWORD PTR SS:[EBP-10]
004D4CEE |. 50 |PUSH EAX
004D4CEF |. 8D55 EC |LEA EDX,DWORD PTR SS:[EBP-14]
004D4CF2 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
004D4CF5 |. 8B80 0C030000 |MOV EAX,DWORD PTR DS:[EAX+30C]
004D4CFB |. E8 E47BF6FF |CALL UNPACKED.0043C8E4
004D4D00 |. 8B45 EC |MOV EAX,DWORD PTR SS:[EBP-14] ------->EAX为机器码,又出现一遍。
004D4D03 |. B9 01000000 |MOV ECX,1
004D4D08 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
004D4D0B |. E8 D0FEF2FF |CALL UNPACKED.00404BE0
004D4D10 |. 8B45 F0 |MOV EAX,DWORD PTR SS:[EBP-10]
004D4D13 |. E8 68FEF2FF |CALL UNPACKED.00404B80
004D4D18 |. 8A00 |MOV AL,BYTE PTR DS:[EAX] -------->机器码第一位变成ASCII形式入AL,
004D4D1A |. 25 FF000000 |AND EAX,0FF -------->只留前两为。EAX=机器码第一位
004D4D1F |. 03F0 |ADD ESI,EAX -------->ESI=ESI+EAX,累加用。
004D4D21 |. FF45 F8 |INC DWORD PTR SS:[EBP-8]
004D4D24 |. 4B |DEC EBX -------->EBX充当计数器。
004D4D25 |.^ 75 C4 \JNZ SHORT UNPACKED.004D4CEB -------->没全部累加?继续。
004D4D27 |> 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004D4D2A |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004D4D2D |. 8B80 10030000 MOV EAX,DWORD PTR DS:[EAX+310]
004D4D33 |. E8 AC7BF6FF CALL UNPACKED.0043C8E4
004D4D38 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18] -------->出现我们输入的加码,当没看见:)
004D4D3B |. 50 PUSH EAX -------->压栈了,看来是用于下面比较了。
004D4D3C |. 8BC6 MOV EAX,ESI -------->ESI入EAX,此时ESI为机器码累加结果。
004D4D3E |. B9 1C000000 MOV ECX,1C -------->ECX=1C
004D4D43 |. 99 CDQ
004D4D44 |. F7F9 IDIV ECX -------->EAX/ECX,商入EAX,余入EDX。
004D4D46 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004D4D49 |. E8 8243F3FF CALL UNPACKED.004090D0 -------->这个CALL着实让我费了好大力气跟,结果眼都花了都没有结果,最后看了下规律才知道是把刚才的计算记过转为10进制。(算出注册码第一部分)
004D4D4E |. FF75 E0 PUSH DWORD PTR SS:[EBP-20]
004D4D51 |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004D4D54 |. 8BC6 MOV EAX,ESI -------->累加结果再入EAX
004D4D56 |. C1E0 05 SHL EAX,5 -------->EAX逻辑左移5位,EAX=EAX*32
004D4D59 |. 2BC6 SUB EAX,ESI -------->EAX=EAX-ESI
004D4D5B |. E8 7043F3FF CALL UNPACKED.004090D0 -------->EAX结果转为10进制,(注册码第二部分)
004D4D60 |. FF75 DC PUSH DWORD PTR SS:[EBP-24]
004D4D63 |. 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
004D4D66 |. 8D86 BE070000 LEA EAX,DWORD PTR DS:[ESI+7BE] -------->不要被迷惑,其实就是EAX=ESI+7BE.(注册码第三部分)
004D4D6C |. E8 5F43F3FF CALL UNPACKED.004090D0 -------->结果转为10进制,(注册码第三部分)
004D4D71 |. FF75 D8 PUSH DWORD PTR SS:[EBP-28]
004D4D74 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
004D4D77 |. 69C6 BC000000 IMUL EAX,ESI,0BC -------->EAX=ESI*0BC
004D4D7D |. 83C0 02 ADD EAX,2 -------->EAX=EAX+2
004D4D80 |. E8 4B43F3FF CALL UNPACKED.004090D0 -------->结果转为10进制,(注册码第四部分)
004D4D85 |. FF75 D4 PUSH DWORD PTR SS:[EBP-2C]
004D4D88 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004D4D8B |. BA 04000000 MOV EDX,4
004D4D90 |. E8 B3FCF2FF CALL UNPACKED.00404A48 -------->把四部分连接起来。
004D4D95 |. 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C] -------->内存注册机的位置!
004D4D98 |. 58 POP EAX
004D4D99 |. E8 2EFDF2FF CALL UNPACKED.00404ACC -------->比较CALL,有兴趣的朋友可以跟进看看,我是没心情了。
004D4D9E |. 75 04 JNZ SHORT UNPACKED.004D4DA4 -------->关键跳
004D4DA0 |. B3 01 MOV BL,1 -------->关键的钥匙啊,用与下面使AL=1,大关键跳才能过关。
004D4DA2 |. EB 02 JMP SHORT UNPACKED.004D4DA6
004D4DA4 |> 33DB XOR EBX,EBX
004D4DA6 |> 33C0 XOR EAX,EAX
004D4DA8 |. 5A POP EDX
004D4DA9 |. 59 POP ECX
004D4DAA |. 59 POP ECX
004D4DAB |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
004D4DAE |. 68 D54D4D00 PUSH UNPACKED.004D4DD5
004D4DB3 |> 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
004D4DB6 |. BA 05000000 MOV EDX,5
004D4DBB |. E8 34F9F2FF CALL UNPACKED.004046F4
004D4DC0 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
004D4DC3 |. BA 04000000 MOV EDX,4
004D4DC8 |. E8 27F9F2FF CALL UNPACKED.004046F4
004D4DCD \. C3 RETN
004D4DCE .^ E9 81F2F2FF JMP UNPACKED.00404054
004D4DD3 .^ EB DE JMP SHORT UNPACKED.004D4DB3
004D4DD5 . 8BC3 MOV EAX,EBX -------->就是这里拉。EAX=1就可以看电视拉!!
004D4DD7 . 5E POP ESI
004D4DD8 . 5B POP EBX
004D4DD9 . 8BE5 MOV ESP,EBP
004D4DDB . 5D POP EBP
004D4DDC . C3 RETN
1>算法总结:
1)必须输入用户名和注册码。(废话)
2)机器码转为ASCII码然后累加,累加结果入ESI用于下面运算。
3)算注册码第一部分:
EAX=ESI/1C
结果转为10进制。
4)算注册码第二部分:
EAX=ESI*32-ESI
结果转为10进制。
5)算注册码第三部分:
EAX=ESI+7BE
结果......
6)算注册码第四部分:
EAX=ESI*0BC+2
结果......
7)合并注册码四个部分。
2>实例运算:
我的机器码是306650343,转为ASCII码累加后的结果是1CE.
注册码第一部分 注册码第二部分 注册码第三部分 注册码第四部分
运算: 1CE/1C=10 1CE*20-1CE=37F2 1CE+7BE=98C 1CE*BC+2=1534A
注册码: 16 14322 2444 86858
看到了么?最后把注册码连起来就是了:1614322244486858
3)内存注册机:
中断地址:4D4D98
中断次数:1
第一字节:58
字节长度:1
寄存器:EDX
4)VB注册机:
我已经编写出来,但因为是国产软件所以不公开了。毕竟我们只为技术。
5)恢复注册办法:
HKEY_LOCAL_MACHINE\SOFTWARE\dingdongsoft\ddnettviii\ddnettviiisn: "1614322244486858"
HKEY_LOCAL_MACHINE\SOFTWARE\dingdongsoft\ddnettviii\user: "cxxx"
删除以上两个键值后面的数值即可。
破后感评:
累啊,终于写完了,计算过程可都是偶用计算器算的哦。
也许高手们看了这篇文章会觉的罗嗦,其实我写这篇文章的主要目的是希望更多朋友能赶快找到算法的入门,毕竟问题不是理所当然来的,当然我也是菜鸟就更身有体会了。
如果你能在这篇文章学到些东西,那我的目的也就达到了。
外边还在淅沥的下着小雨,看着渐明的天空,感慨又一个破解之夜过去了,但我不会后悔的!
----------深海游侠
----------2004.5.27凌晨
==================================================================================
【工程声明】本过程只供内部学习之用!如要转载请保持过程完整!
==================================================================================
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)