-
-
一类VB程序的破解思路
-
发表于:
2006-7-13 21:53
8163
-
【文章标题】: 一类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或http://www.xxxxxx.com”.“看到它,就别放过它”!用getvbres将它改为英文或者拼音后保存,我是讲它改为“80008000”(哎,你不是说英文或拼音吗?),再用VBParser1.2解析后,打开ParserVB.txt,搜索刚才修改后的字符(怎么搜索?我不知道):80008000,嗨,找到了(一共有5个,只列出了其中一个):
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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!