某VB编写的幼儿拼音学习软件简单使用分析

(编辑:jimmy 日期: 2024/12/23 浏览:2)

背景:笔者的认知中,VB作为一种较为古老的语言,由于权限和接口等问题,在编程语言中处于鄙视链的较下游,如今如需VB编写软件,大多会用.NET,VB本尊使用量可能已经比不上VBA了。因此找一个VB编写的软件其实也挺不容易的,但找到了的话,软件的破解难度一般都挺低的。作为新人历程笔记,笔者认为一款VB编写的软件还是需要的。其实VB这方面,论坛里有人发过那个齿轮、轴承等的计算软件很好,软件的注册思路清晰,暴破、读内存、注册码计算算法都非常简单,用于熟悉VB破解软件的使用非常顶,新手的小伙伴建议拿那个练手。这次选择的这款学拼音软件,个人并不推荐使用,主要原因是flash这种形式比较惹人烦,而对于破解来说,这软件也有点莫名其妙,以至于笔者至今未能领悟其注册的思路。然而VB写的软件本来就不多,笔者自身相关的更少,鉴于之后可能再找不到合适的软件,VB这块就试着先放这个,就当熟悉下工具软件操作。由于只为使用的话,软件的破解难度实在有点低,这篇加了权限。
〇、准备
软件官网:官网下载地址
使用工具:VB Decompiler,x32dbg,可选VBExplorer
注意:软件安装完成后会自动进入flash player的安装程序,笔者建议先不要装,直接退出,待确定软件无法运行后再想办法,比如找论坛中一些无广告版本传送门安装。
软件运行需要管理员权限,并且会将分辨率调整为1024×768,这令笔者非常不适,不论使用还是分析都非常不便,所以在准备工作中先干掉分辨率设置。通过VB Decompiler反编译,很容易找到分辨率设置是Form1加载是进行,查看Form1的Form_Load,通过1024×768,伪代码很容易找到分辨率设置的地方
某VB编写的幼儿拼音学习软件简单使用分析
不熟练的话可以用x32dbg调试一下,004153FA处NOP掉,就不设分辨率了
某VB编写的幼儿拼音学习软件简单使用分析
熟练的话直接VB Decompiler反汇编找到代码,在十六进制编辑器中将7402改为9090,保存就好
某VB编写的幼儿拼音学习软件简单使用分析
准备工作完毕。
一、软件初步了解
由于软件没有帮助文件,这次的分析完全没有上一篇清晰。
首先还是尝试运行软件,flash点进去后有一个注册软件按钮,点击后会出来一个窗体,显示使用者、机器码、注册号码三个文本框,看起来挺正规的,但也没说没注册会咋样,是功能限制、时间限制还是次数限制。直接点注册没有任何反应,似乎是直接进行验证的。至于flash内容,笔者粗略翻了翻,未发现功能限制。
某VB编写的幼儿拼音学习软件简单使用分析
VB Decompiler打开程序。这里注意下VB Decompiler的选项,注意别勾上只编译窗体,其他按个人喜欢设置就好,另外软件本身是有中文语言包的,需要相应语言的改下语言包文件名称,只要让语言包排序第一就好。
工程中一共4个窗体,2(4)个模块,有一个重要信息,启动对象是Form168,这和刚才试运行的感受不一样。Form168和Form188有一点像,但可以明显看出刚才的注册窗体是Form188。Form1是软件运行的主窗体,但只是给flash提供个地方,主要内容都是flash嵌入。此外还有个关于窗体。
某VB编写的幼儿拼音学习软件简单使用分析
Form1中也可以看到注册命令打开的确实是Form188。
某VB编写的幼儿拼音学习软件简单使用分析
这里可以初步判断,软件先打开Form168,对试用是否到期会有个判断,未到期会由Form168打开Form1,否则会由Form168要求注册。
二、注册码初步了解
直接打开Form188中注册按钮点击事件(command1_click),通过伪代码很容易看出,按钮点击后会进行判断,如果文本框Text3的文本(也就是用户输入的注册码)将换行回车替换后,与文本框Text4的文本相等,就会在Windows文件夹中的winuser.ini文件中写入注册信息,写入的信息还不是Text3中自行填写的信息,而是软件算出来的信息,并且关闭该窗体。这做法就是警告你别逆向我啊,你要逆向我,我就直接告诉你注册码。
某VB编写的幼儿拼音学习软件简单使用分析
所以要暴破注册号码的话,直接把这里Nop掉就好,或者调试器里改下ZF就行。
某VB编写的幼儿拼音学习软件简单使用分析
当然VB的字符串比较本来就不太高明,而这个软件也没特别弄这方面,稍微往前一点就可以看到比较的内容。
某VB编写的幼儿拼音学习软件简单使用分析
此外既然注册号码是存在隐藏文本框里的,直接让文本框显形也行,VBExplorer里找到Text4,可以看到不但不可见,而且位置超出窗体,设完为可见并将Form188的高度设为5200,单步保存即可。有心的小伙伴可以对比一下文件改了哪里,笔者个人觉得这个技能不常用,就不比较十六进制了
实际上注册窗体的流程大致是Form168/188载入时获取用户名、硬件信息,填入Text1和Text2,按下隐藏的按钮3计算注册号,填入隐藏的Text4,比较Text3与Text4判断注册码是否正确。控件的使用可谓眼花缭乱。这里可以在command3_click找注册号计算过程,但伪代码有缺,需要自己看汇编,笔者本来想练习一下,可惜发生了意外。
三、软件试用初步了解
意外:在第二步操作完成,一段时间后,软件突然不能使用了,打开软件时打开Form168,显示已注册所以注册按钮未使能,试用过期所以试用按钮未使能,只能购买或关闭。鉴于之前的注册码获取实在过于简单,笔者开始反思注册的姿势对不对。
找到Form168的Form_Load,简单分析窗口载入时的操作,代码较长,不上图了,感兴趣小伙伴自己看看:
1.对注册表进行操作,建删子键,操作不成功则弹出对话框并关闭窗体;
2.获取用户名、硬件信息,填入Text1和Text2,按下隐藏的按钮3计算注册号,填入隐藏的Text4;
3.如Windows文件夹有winuser.ini文件,从中读取信息,如没有,新建该文件;
4.如Windows文件夹有hpysoft.txt文件,从中读取信息,如没有,从临时文件夹复制文件,如临时文件夹也没有,新建该文件;
5.注册表信息更新;
6.hpysoft.txt文件信息比较,最后一组信息如等于某一值,认为试用期已到,出现意外中描述的情况,否则正常载入Form1。
另外Form168的Form_Unload中会对hpysoft.txt文件信息加一写入hpysoft.txt文件。
知道了以上信息,破解的方式就比较多了,笔者将Windows和临时文件夹中的hpysoft.txt文件删除,待新建后将Windows文件夹中的hpysoft.txt文件设为只读。
其余方式,包括暴破,做个批处理,修改EP等也都有的搞。
所以注册号码有没有貌似关系不大,软件就是个按次试用的软件,做了那眼花缭乱的注册窗口笔者真没看出其意义。
四、后记
关于伪代码,有人说比汇编还难看,笔者个人觉得除了变量用栈地址命名外,其实VB的伪代码和原代码其实还是挺像的,笔者多少算写过VB的小计算程序,看伪代码并没有感觉特别吃力。笔者认为,写一写功能性的小程序,对于破解时看懂代码是非常有用的。
最后,这个软件虽然结构简单,可以学的其实也还挺多的,只是笔者水平和接下来时间所限,对该软件的学习暂止于此。