玩玩破解,写给新人看(第十三集)

查看 166|回复 11
作者:yyhd   
关于灰色按钮的破解思路
上一集给大家写了两个小软件做为阶段性的练习,您破解成功了吗?
如果您成功了,我建议您思考一下,我在设计这个软件的时候做了“哪些手脚”,只有明白了这些手脚,而您又是针对性的绕开了,那么才是您最大的收获。
我认为,对于新人而言,破解是否成功不是关键,重要的是您是否发现了要破解的软件在反破解方面的“坑”在哪里?对于这个的“坑”我们用什么方法能够绕过去。
这一集,我暂且不讲这两个练习软件的破解思路,因为还有很多新人们没有去试验。
我们这一集就讲讲破解“灰色按钮”这一种类型软件的基本思路。
首先我们要明白什么是“灰色按钮”,见下图:


1.png (34.37 KB, 下载次数: 3)
下载附件
2021-1-31 20:03 上传


这是一个小软件的登陆界面,你会发现“请点击”按钮是处于“灰色”的显示状态,无法点击。
此时你输入账号和密码,然后点登陆,如果你的账号和密码是正确的,“请点击”按钮不再是“灰色”,你可以正常点击,你点击后会出现下图:


2.png (52.55 KB, 下载次数: 4)
下载附件
2021-1-31 20:04 上传


这个软件就是我们今天要讲的“灰色按钮”类型的软件。
所谓“灰色按钮”就是指软件窗口上的某个按钮处于“灰色”状态,也就是鼠标不可击状态,这种“灰色按钮”的设计有什么作用呢?
假定某个软件的窗口上有一个功能按钮。
当用户的登录帐号和密码都是正确时,就让功能按钮可点击,然后你点击功能按钮可以执行新的功能,比如打开一个新的功能窗口。
反之,如果用户输入的登陆账号和密码不正确,那就让功能按钮不可点击,用户就被限制使用功能。
拿我们的这个CM(灰色按钮)为例,我们讲讲如何破解这一类型的软件。
我们的破解目标就是当我们输入不正确的账号和密码时,这个“请点击”的按钮也告别“灰色”状态,变成可点击状态,也就是把限制的功能解开。
朋友们,我们开始工作了。
我们先思考一下这个CM的验证流程。
流程为:软件启动后,窗口中的“请点击”按钮处于“灰色状态” → 用户输入账号和密码,点击登陆按钮 → 读取用户输入登陆账号和假码 → 调用算法CALL,计算出真码 → 调用验证CALL对真假码进行比较 → 比较结果为真,“请点击”按钮的状态变为可点击,点击后出现“小牛”图片和弹出“祝你牛年大吉”的信息框;比较结果为假,没有变化。
知道了验证流程后,我们该怎么做呢?
当然还是用我们的破解大法“两头找线索,中间来破解”。
我们首先看验证结果有没有线索?
有,如果成功会有三条结果可做为线索:
一是“请点击”按钮的状态改变为可点击;
二是出现了一个“小牛”图片;
三是出现一个“祝你牛年大吉”的信息框。
好,我们从最熟悉、最基本的方式来试试?
我们可以搜“祝你牛年大吉”这个字符串,也可以下弹出信息框的MessageBoxA函数断点。会来到下图:


3.png (73.62 KB, 下载次数: 3)
下载附件
2021-1-31 20:09 上传

接下来怎么办?
你在“祝你牛年大吉”的那一句下个F2断点?
还是在信息框弹出函数MessageBoxA下函数断点?
结果,都断不下来!
为什么?因为只有成功后代码才会走到这里。
晕了吧。
那怎么办呢?这条线索已经断了。
我们接着思考。
当我们从成功的结果去找线索和突破口的时候,会面临一个很重要的问题,就是我们找到的位置都是代码走不到的位置。
那么你怎么设定断点呢?所谓断点,就是必须要代码能够执行到下断的位置,程序才会停下来。
那我们就换个思路,从失败的结果去找线索,我们来看看有哪些线索可用?
当我们失败的时候,只有一个结果就是“请点击”按钮处于“灰色”不可点击的状态。
这条仅有的线索怎么使用呢?
我告诉你,操作系统为按钮的状态显示有一个专门的函数可以调用,函数名字叫做EnableWindow,中文意思就是窗口或者里面的控件(按钮、菜单、输入框等)能否被允许响应鼠标和键盘的输入。
如果允许,按钮就可点击;如果不允许,按钮就不可点击。
好了,我们知道了这个函数,我们思考一下,我们现在的CM是不是必须要调用这个函数?在程序执行的什么位置调用的?
我们再来回顾一下这个CM的验证流程。
刚启动的时候,“请点击”按钮的状态为不可点击。
我们点登陆后,程序根据真假码的比较对“请点击”按钮的状态做出不同的选择。
在整个过程中,是不是总共有两次会调用这个EnableWindow函数的可能。
一个是程序启动后的最初状态,一个是用户点击登陆按钮后的选择状态。
最初状态是我们的代码必然要经过的,后面的选择状态代码有可能经过也有可能不经过(可能是成功时才经过,失败时不经过)。
好,既然我们已经分析清楚了,我们就在最初状态下函数断点。
我们开始动手,把软件拖进OD后,先不运行,我们先下好EnableWindow断点。
用我们以前说的最暴力的下断点的方式就可以。我们打开OD的插件里提供的API常用断点工具,见下图:


4.png (77.59 KB, 下载次数: 5)
下载附件
2021-1-31 20:17 上传

选择红色箭头指的“限制程序功能函数”,在绿色箭头指的最下面的“EnableWindow”前打钩,然后按确定,就下好了断点。
我试了一下,第一个也是EnableWindow,但是在第一个上面打钩后,你到断点窗口看下的断点是禁止状态,大家可以试试,如果不是我的问题,就是这个OD有BUG。
然后F9直接运行,就到了下图:


5.png (80.46 KB, 下载次数: 3)
下载附件
2021-1-31 20:18 上传

此时,你看右下角的堆栈窗口中红色箭头指的位置,写着FALSE,中文意思就是假。
这个就是表示按钮的状态,假就不可点击,真就可点击。
我们F8返回到上一层CALL。来到下图:


6.png (80.63 KB, 下载次数: 3)
下载附件
2021-1-31 20:19 上传

蓝色方框内就是调用EnableWindow函数的位置,这个函数有两个参数,就是CALL上面的两个PUSH后面的数值。
最上面一个数值就是按钮的状态,如果是1表示按钮可以被点击,如果是0表示按钮不可以被点击。
好,我们就在第一个PUSH语句上直接下F2断点,然后重新运行程序,发现断在了我们第一个PUSH语句上,见下图:


7.png (81.89 KB, 下载次数: 4)
下载附件
2021-1-31 20:19 上传

我们在信息窗口中红色箭头指的地方看到了0,就是说我们目前断下的PUSH语句后面的数值是0。
刚才说过0就是表示不可点击,1才是可点击。
那么我们现在就把PUSH 后面的值改成1,然后F9运行。


8.png (81.31 KB, 下载次数: 3)
下载附件
2021-1-31 20:20 上传

呵呵,我们已经成功了,“请点击”按钮已经不再是“灰色”了。
本节课,主要就是和大家一起分析了“灰色按钮”这种的一般破解思路。
我把本次课程中使用的CM(灰色按钮)发到附件里,大家玩玩看,祝你成功!
如果您觉得我发的内容确实对您有所帮助,请麻烦您支持一个热心值,进行精神鼓励,也是我继续写下去的动力!
玩玩破解,写给新人看(第一集)
玩玩破解,写给新人看(第二集)
玩玩破解,写给新人看(第三集)
玩玩破解,写给新人看(第四集)
玩玩破解,写个新人看(第五集)
玩玩破解,写给新人看(第六集)
玩玩破解,写给新人看(第七集)
玩玩破解,写给新人看(第八集)
玩玩破解,写给新人看(第九集)
玩玩破解,写给新人看(第十集)
玩玩破解,写给新人看(第十一集)
玩玩破解,写给新人看(第十二集)
玩玩破解,写给新人看(阶段练习1)
玩玩破解,写给新人看(第十三集)
玩玩破解,写给新人看(第十四集)
玩玩破解,写给新人看(第十五集)
玩玩破解,写给新人看(第十六集)
玩玩破解,写给新人看(第十七集)
玩玩破解,写给新人看(第十八集)
玩玩破解,写给新人看(第十九集)
玩玩破解,写给新人看(第二十集)
玩玩破解,写给新人看(第二十一集)
玩玩破解,写给新人看(第二十二集)
玩玩破解,写给新人看(第二十三集)
玩玩破解,写给新人看(第二十四集)
闲谈如何破解软件?
玩玩破解——小白实战1,你也行!
玩玩破解——小白实战2,巧搜字符串
玩玩破解——小白实战3,易语言字符串比较通杀
玩玩破解——小白实战4,冰火两重天
对新人们学习《玩玩破解》系列教程的集中解答
玩玩破解—加点油,再前行!

仿宋, 人看

helc   

第十三集!
作业:CM((灰色按钮).exe
先运行程序,发现请点击按钮是灰色的,我们要做的就是让它能点击。尝试输入账号和密码,点击登陆,没有什么变化。只有账户和密码验证正确后,灰色按钮才能被点击,所以中间应该是有一个验证机制的。
三条结果作为线索:
一是“请点击”按钮的状态改变为可点击;
二是出现了一个“小牛”的图片;
三是出现了一个“祝你牛年大吉”的信息框。
用od打开程序,搜索牛年大吉字符串和API信息框,下断点。这个方法不行,理由是它是验证后的结果,代码无法运行到这里,中间的验证机制还存在着,程序过不来。
这里提到了一个新的函数EnableWindow,它可以用来表示按钮的状态,也就是说灰色按钮由它来控制。所以如果在这儿下断点,就行了。其实没完成理解,大概意思这样吧。反正就是多认识了个新函数,它能控制按钮的状态,有判断过程。如果允许,按钮就可点击,不允许,就不可点击。
来到那个API断点工具,在限制程序功能函数中选择第三个EnableWindow,确定。
运行,在堆栈区发现个call,就是这个函数的调用call,跟随它,定位到代码区。
发现EnableWindow的call,上面紧跟着两个push,说是它们分别是两次判断过程。回一下流程,打开程序后,EnableWindow先判断一次,肯定是不允许,在输入账号密码后,再判断一次。那么在第一次push处下断点,看能不能修改它,不就能达到目的了。
在第一个push处下断点,然后重新运行程序(不是继续运行)。
运行后,发现断在了push处,也没有窗口弹出,说明断在了call的前面。代码区下面可看到它堆栈的值为0000000。应该是0为不允许,把这行改为push 0x1,复制保存。
运行保存后的程序,发现按钮可点击了,跳出牛年大吉,成功!
注意:重点是两个push,要搞清楚它们的意义。还有EnableWindow函数的作用。
张哥哥   

真希望你能够出录像教学。
yyhd
OP
  


张哥哥 发表于 2021-1-31 21:05
真希望你能够出录像教学。

谢谢朋友的支持。我也只是小白,还没有这个实力和能力。写写自己会的一点东西,希望能用新人们听的懂的话来和大家共同成长。
WZH19960602   

谢谢楼主分享
~vision~   

不得不顶
tang588   

这个是个好人
pack39   

你这些文章,在数年前发表 的话,必然会热度很高,现在基本都要转到x64dbg了,OD真的是快要日落西山
myjjdf   

这个是不是可以利用到第二个练习课件??
pjlove   

自从这个破解教程出来后,现在看到论坛上都在模仿,我想说的是好东西只能被模仿,从未被超越
您需要登录后才可以回帖 登录 | 立即注册

返回顶部