-
-
一类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直播授课