首页
社区
课程
招聘
一类VB程序的破解思路
发表于: 2006-7-13 21:53 8319

一类VB程序的破解思路

2006-7-13 21:53
8319

【文章标题】: 一类VB程序的破解思路
【文章作者】: badboys
【作者邮箱】: rmb6962819@163.com
【作者QQ号】: 36545246
【软件名称】: lose通用工具
【软件大小】: 25k
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: 功能限制
【编写语言】: VB
【使用工具】: pe0.95,all versions aspack unpacker汉化版by[1].cxlrb,GetVBRes0.90,VBParser1.2(VB pcode反编译程序),hiew6.86等
【操作平台】: win2000
【软件介绍】: 一款赚德国lose的工具(不要问我lose是什么!)
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
       关于VB语言的这类破解,看雪上有许多的文章,说明如何破解。不过都只是简单的讲一下而已,没有具体的例子,本人虽是菜鸟一个,不揣冒昧,写了这样一个例子,或许能为与我差不多的菜鸟提供一个思路。
       前些日子得到这款软件,一看有这样的限制,便想试试身手,一来提高自己的手艺,另外也给自己增加一款赚钱工具。(现在看来用途不大了)。
       说干就干。先看看有没有加壳。用peid0.95 一看,ASPack 2.12 -> Alexey Solodovnikov的壳,用peid自带的plugin就可以脱,我用all versions aspack unpacker汉化版by[1].cxlrb 来脱,一下子就脱光了(比我脱衣服快多了^-^),而且脱壳后的文件只有34k,比peid脱的80k要小多了。脱壳后再用peid察看,vb语言的。
       按照以前在龙族混时学到的东西,用wasdam打开一看,傻眼了,没有字符串,跳转也是莫名其妙:有的是跳到自身,有的是跳到语句中间。不知道该如何下手了。幸亏这是跳到了看雪论坛(是我,不是程序),潜水学习了几天,学到了不少东西,感觉到自己以前在龙族是白混了(不要拍砖头啊,龙族是有不少好东西的)。看了不少前辈的文章后,重新开始!
       原来vb的程序,特别是用p-code编的软件,它的格式与那些汇编语言的格式是根本不同的。(我没有学过VB,还是到看雪后才知道vb还有p-code和native的差别)它的字符串形式也不同,所以用wasdm等是看不到字符串的。这是可以用vbexplore等软件来可以反汇编。用vbexplore还可以很方便的删除一些不需要的按钮之类的资源。用VBParser1.2(VB pcode反编译程序)将软件反汇编(它称之为VB P-CODE解析)(不知道为什么,每次我解析vb程序,软件就出错,退出,使得我好久以后,偶然看到它目录下的那个ParseVB.txt文件为最新文件,奇怪之下,打开这个文件才发现解析后的文件就是这个txt).打开ParseVB.txt文件,可以看到一些字符串,可是需要的关键字符串(也就是超过8000lose时提示你的那句话)却没有,不仅如此,其他还有一些中文的语句也找不到。
       怎么办呢?再向前辈们(或许应该是后辈们)学习,哦,原来如此。
       用getvbres看看。哦,找到了,“本工具为试用版,仅当帐户LOSE数量少于8000时适用。正版请联系QQxxxxxxxx或5a6K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4S2^5P5s2S2^5P5q4)9J5k6h3y4G2L8g2!0q4x3W2)9^5x3q4)9&6c8q4)9J5k6g2!0q4x3W2)9^5x3q4)9&6b7#2!0q4y4#2)9&6b7#2)9^5b7W2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4g2!0m8c8g2)9^5x3#2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2!0n7x3q4!0n7x3g2!0q4y4g2)9^5z5q4!0m8b7W2!0q4y4W2)9&6y4q4!0n7c8g2!0q4z5q4!0n7c8W2)9^5y4#2!0q4y4g2!0m8c8g2)9^5x3#2!0q4x3W2)9^5x3q4)9&6c8q4!0q4c8W2!0n7b7#2)9^5x3g2!0q4y4#2)9&6y4q4!0m8z5r3N6W2N6s2k6T1M7X3g2K6i4@1f1#2i4@1t1H3i4K6R3$3i4@1f1#2i4@1q4q4i4K6R3K6i4@1f1$3i4K6V1@1i4@1t1&6i4@1f1@1i4@1t1^5i4@1u0m8i4@1f1^5i4K6S2n7i4@1t1I4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1$3i4K6R3^5i4K6V1$3i4@1f1^5i4K6R3H3i4K6R3#2i4@1f1$3i4K6S2n7i4@1u0o6i4@1f1&6i4K6W2r3i4@1t1K6i4@1f1#2i4K6V1H3i4K6S2q4i4@1f1@1i4@1u0r3i4K6W2p5i4@1f1#2i4@1q4p5i4K6V1^5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1^5i4@1q4q4i4@1t1J5i4@1f1#2i4@1q4q4i4K6R3K6i4@1f1$3i4K6V1@1i4@1t1&6i4@1f1@1i4@1t1^5i4@1u0m8i4@1f1J5i4K6R3H3i4K6W2o6z5o6l9H3x3o6R3H3x3o6m8Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4c8f1k6Q4b7V1y4Q4z5o6S2Q4c8e0g2Q4z5e0y4Q4z5p5g2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0c8Q4b7V1c8Q4b7e0m8Q4c8e0c8Q4b7U0S2Q4z5p5c8Q4c8e0k6Q4z5e0S2Q4b7f1k6Q4c8e0S2Q4b7f1k6Q4b7U0c8Q4c8e0S2Q4z5p5u0Q4b7U0q4Q4c8e0k6Q4z5e0k6Q4z5o6N6Q4c8e0k6Q4z5o6S2Q4z5e0k6Q4c8e0k6Q4z5p5u0Q4b7V1y4Q4c8e0W2Q4z5f1k6Q4b7U0y4Q4c8e0g2Q4z5e0m8Q4z5e0N6Q4c8f1k6Q4b7V1y4Q4z5f1k6Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4z5o6k6Q4z5p5c8Q4c8e0N6Q4z5e0c8Q4b7e0S2h3b7W2m8S2M7Y4y4W2M7U0q4Q4x3X3f1J5i4@1f1^5i4@1p5%4i4@1p5K6i4@1f1$3i4K6W2q4i4K6V1H3i4@1f1#2i4K6V1H3i4K6S2q4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3&6i4K6V1K6i4@1f1#2i4@1u0o6i4K6R3H3f1r3q4J5M7$3g2J5g2V1u0Q4x3X3g2@1P5s2c8Q4x3V1y4Q4c8e0k6Q4z5e0m8Q4z5f1y4Q4c8e0N6Q4b7U0c8Q4b7e0u0Q4c8e0g2Q4z5o6S2Q4z5f1q4Q4c8e0k6Q4z5o6W2Q4z5p5c8Q4c8e0c8Q4b7V1k6Q4b7f1g2Q4c8e0k6Q4z5e0c8Q4b7U0W2Q4c8e0g2Q4z5e0m8Q4z5p5g2Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4b7f1c8Q4z5e0N6Q4c8e0N6Q4b7f1y4Q4b7e0k6Q4c8f1k6Q4b7V1y4Q4z5o6S2Q4c8e0k6Q4z5o6m8Q4z5p5g2Q4c8e0c8Q4b7U0W2Q4z5o6S2Q4c8e0k6Q4z5e0m8Q4z5f1y4Q4c8e0N6Q4b7U0c8Q4b7e0u0Q4c8f1k6Q4b7V1y4Q4z5f1k6Q4c8e0k6Q4z5o6S2Q4z5e0q4Q4c8e0c8Q4b7U0S2Q4z5p5c8Q4c8e0N6Q4z5f1k6Q4b7e0g2Q4c8e0W2Q4z5o6q4Q4z5e0y4Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8f1k6Q4b7V1y4Q4z5f1p5^5x3o6l9H3z5o6l9H3x3q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2)9&6y4#2!0m8z5q4!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4W2)9^5z5g2!0n7c8g2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4q4!0n7b7g2)9^5y4W2!0q4c8W2!0n7b7#2)9^5z5q4!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4g2)9^5y4g2!0n7x3g2!0q4y4W2)9&6b7#2)9^5z5e0g2Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4z5p5k6Q4b7f1q4Q4c8e0g2Q4z5o6S2Q4z5e0N6Q4c8e0g2Q4z5o6N6Q4b7V1q4Q4c8e0c8Q4b7V1q4Q4z5o6k6Q4c8e0g2Q4z5o6g2Q4b7U0k6Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0c8Q4b7U0S2Q4z5o6m8Q4c8e0c8Q4b7U0S2Q4b7f1q4Q4c8f1k6Q4b7V1y4Q4z5o6W2Q4c8f1k6Q4b7V1y4Q4z5f1p5`.
       00408DD7: 1A 88 FD           FFree1Ad                Push [local_278]; Call [[[local_278]]+8]; [[local_278]]=0
  00408DDA: 08 08 00           FLdPr                   [SR]=[stack_08]
  00408DDD: 8A 9C 02           MemLdStr                Push#4 [[SR]+029C]
  00408DE0: 0A 20 00 04 00     ImpAdCallFPR4           Call Ptr_004010B4; check stack 0004 (no return value)
  00408DE5: ED                 CR8R8                  
  00408DE6: F3 40 1F           LitI2:                  
  00408DE9: EB                 CR8I2                  
  00408DEA: E1                 GeR8                                                                                                      into DC
  00408DEB: 1D C9 01           BranchT                 If Pop<>0 then ESI=ProcPC+01C9
  00408DEE: 27 F8 FC           LitVar_Missing          PushVarError 80020004 (missing)                                                   VT_ERROR signifies an optional argument that is missing
  00408DF1: 27 38 FD           LitVar_Missing          PushVarError 80020004 (missing)                                                   VT_ERROR signifies an optional argument that is missing
  00408DF4: 27 48 FD           LitVar_Missing          PushVarError 80020004 (missing)                                                   VT_ERROR signifies an optional argument that is missing
  00408DF7: F5 00 00 00 00     LitI4:                  Push 00000000
  
  *********** Referent String: "80008000" ***********
                                |
  00408DFC: 3A 8C FD 21 00     LitVarStr               PushVarString Ptr_00405120
  
  00408E01: 4E 74 FD           FStVarCopyObj           [local_28C]=vbaVarDup(Pop)
  00408E04: 04 74 FD           FLdRfVar                Push local_28C
  00408E07: 0A 13 00 14 00     ImpAdCallFPR4           Call Ptr_004010A8; check stack 0014 (no return value)
  00408E0C: 36 08 00 74 FD 48  FFreeVar                Free 0008 variants : 74 FD 48 FD 38 FD F8 FC
            FD 38 FD F8 FC   
  00408E17: FC C8 04           End                     
  00408E1A: 84 FD 21           IStI2                  
  00408E1D: 0F 20 03           VCallAd                 
  00408E20: 19 88 FD           FStAdFunc               
  00408E23: 08 88 FD           FLdPr                   [SR]=[local_278]
  00408E26: 0D A0 00 01 00     VCallHresult            
  00408E2B: 6C 84 FD           ILdRf                   Push#4 [local_27C]
  00408E2E: 1B 22 00           LitStr:                 Push Ptr_004051A4
  00408E31: 2A                 ConcatStr               vbaStrCat
  00408E32: 23 70 FD           FStStrNoPop             SysFreeString [local_290]; [local_290]=[stack]
  00408E35: 1B 23 00           LitStr:                 Push Ptr_004051B0
  00408E38: 2A                 ConcatStr               vbaStrCat
  00408E39: 23 68 FD           FStStrNoPop             SysFreeString [local_298]; [local_298]=[stack]
  00408E3C: 21                 FLdPrThis               [SR]=[stack2]
  00408E3D: 0F 20 03           VCallAd                 
  00408E40: 19 6C FD           FStAdFunc               
  00408E43: 08 6C FD           FLdPr                   [SR]=[local_294]
  
  这一段程序是什么意思?我不懂,不过我看到:
  00408DEB: 1D C9 01           BranchT                 If Pop<>0 then ESI=ProcPC+01C9
  
  这不是要跳吗?(其实我也不知道它是要跳,我只知道branch是分支、支部、树枝的意思,觉得它应该就是je,至于后面它要跳到哪里,我还是不明白。不过依据以前的经验,应该是一个关键跳)
  将它修改成branchF 应该可以吧?branchF的机器码是多少?我不知道。不过按照一种语言的习惯,应该是连在一起的,不是1c就是1e.用hiew6.86,找到1D C9 01 27 F8 FC改成1c C9 01 27 F8 FC吧。
  修改后还不行。
  再在txt文件里搜索,哦,原来有5处80008000,这就是说,要判断5处?。统统修改成1c!
  再试,哈,可以了!
  
  注1:这样修改其实还是有缺陷的,那就是与试用版相反,在lose少于8000时会有“本工具为试用版,仅当帐户LOSE数量少于8000时适用。”应该是其中某一个跳转的问题,可能某个跳转不需要修改。但是因为我的账户被k了,所以也就懒得再去找是哪一处了。
  
  
  
--------------------------------------------------------------------------------
【经验总结】
  1、想破解,多向前辈们学习.
  2、这一类的软件,通用的做法是:先脱壳,再用getvbres将注册或验证的提示改为拼音、英语、数字等,然后用VBParser
  解析,再对软件进行静态调试。
  3、同一公司或作者出品的软件,编写方法、保护措施等很有可能是相似的,可以用同样的方法来破解。(记得以前刚开始
  学破解,一个网络验证的软件,就是对照它的上一个版本的破解版来找相同的地方破解的,幸亏这个软件不大)
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年07月13日 21:48:12


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 239
活跃值: (77)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
2
学习。我对PCODE没分析过,下次遇到,可以借鉴借鉴。
2006-7-13 22:07
0
雪    币: 58782
活跃值: (21956)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
虽然文章很简单,但思路对新手还是有些启发的。所以设个精华鼓励一下badboys,希望以后看到你更精彩的文章。
2006-7-13 22:12
0
雪    币: 203
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
最初由 kanxue 发布
虽然文章很简单,但思路对新手还是有些启发的。所以设个精华鼓励一下badboys,希望以后看到你更精彩的文章。


    谢谢。我还是第一次发破解的文章,居然精华文章就1篇了。呵呵。 真是莫大的鼓舞啊。
    第一次,文章不怎么好。
2006-7-14 19:48
0
雪    币: 232
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
羡慕ing `
2006-7-14 22:53
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
喜欢思路性的文章

我要猎枪,不要大米
2006-7-14 23:53
0
雪    币: 106832
活跃值: (202484)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
sustain.
2006-7-15 00:01
0
雪    币: 159
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
嘿嘿,真的启发不小!
2006-7-23 12:48
0
雪    币: 155
活跃值: (3361)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
VB的破解确实让人头疼。
2006-7-23 20:23
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
方法是不错,学习了.
2006-7-24 06:29
0
游客
登录 | 注册 方可回帖
返回