Lijunlin7611 发表于 2017-4-25 20:11

MediaCoder 思路分析,适合新手学习。

本帖最后由 Lijunlin7611 于 2017-4-25 20:16 编辑

MediaCoder 分析,商业软件,仅供学习,分享思路。
http://www.mediacoderhq.com/
需要的可以自己去下载最新版来分析学习,今天分析的也是最新的版本。

先来一张图:

http://attach.52pojie.cn/forum/201704/25/010903p161ezq1aa6aapy0.png

简单说一下这个软件的一些关键点:
Peid查一下或者直接看程序入口特征,即可判定,是VC++ 8 写的。VC++的程序,结构很好。
软件没有加壳,代码结构清晰,程序逻辑思路很明确,适合分析学习。
验证方式:注册码、网络认证、加密狗认证(这里下载的免费版,就没有加密狗的那个版本了)。
校验方式:计算程序MD5,然后和资源文件中的数据进行比对,判断文件是否存在修改。
软件中有很多的地方,都是可以作为教学点的,适合新手学习分析。

1、软件Nag框:

软件启动后,会有这个启动框,很烦人,很多的软件,未注册的等等,都会有这个启动框,比如说UltraISO等等。

去掉此框也很简单,既然是分析,这里从逆向和正向两个方向思考。
这里说的是VC++,没有讨论其他的。
如果你是编程人员,想要弹出个窗口,自然会调用MessageBox、DialogBox、DialogBoxParam、CreateWindow、ShowWindow、UpdateWindow等等函数。
所以反过来,软件的Nag框,无非两种,一、MessageBox,二、Window
第一个:下断点MessageBoxExA\W,绝对逃不掉。其他的什么消息断点函数,自己逆向一下,可以看系统的底层调用就懂了。
http://attach.52pojie.cn/forum/201704/25/010820hp3v3cztz934t0oa.png
第二个:既然是窗口,窗口要显示,然会用到函数UpdateWindow,在此处断点,自然能够搞定。当然,上面说的那些函数,心情好,随便你怎么挑都行。

http://attach.52pojie.cn/forum/201704/25/010819g74hu0ux03uug6uv.png
此软件自然也不例外,另外,同时开启两个,则会出现一下一个MessageBox,方法如上,断点,找到了,喜欢怎么改都行,注意好堆栈平衡即可。


比如说,我这里是就是这么改的,既可以解除不能同时运行两个的软件的问题,也能解决启动框的问题。
http://attach.52pojie.cn/forum/201704/25/010553xvksvy0uuuzpucyf.png

另外,这里提一下,上面有个CreateMutexA(不懂的去学学编程),所以改的方式多种多样。再次提醒,注意好堆栈平衡。

2、网络ID验证:
既然是网路验证型,那么必然要联网的,这个大家不用说,就知道该用哪些函数去弄了。反正是网络连接要用的函数,大家都可以试试。
相信很简单,就能实践出来。实在不知道,就用OD的API断点工具,网络断点一下就全搞定。
这里说说其他的方式,更简单点,也算是给新手一个快捷方向。

点击验证窗口,随便输入验证码,点击验证,可以看到红色框中的提示。
http://attach.52pojie.cn/forum/201704/25/010820g11r0k1xovffqfki.png

当然,搜索字符串自然是最简单的,先给个和谐图:
http://attach.52pojie.cn/forum/201704/25/010820cxcsctb316jgcvgw.png
这个字符串提示信息,简直是非常和谐……但是,如果你搜索不到字符串呢?
你还怎么快速定位这个点?我们说说另外的方法,消息断点。

也就是上面图中的下面那两个函数调用:
GetDlgItem,SendMessageA。
当然,如果你学了编程,这两个函数,不用想也知道,在这里下条件断点。
有了这两个函数,问题来了,控件ID怎么得到呢?
spy++\ViewWizard\PeXplorer等等,很多的工具,可以让通过动态、静态的多种方式获得。
上个图,大概演示一下:
http://attach.52pojie.cn/forum/201704/25/010304b6e2z46f4fu02ggl.png

当然,找按钮事件等等,都是可以的,心情好,你也可以用F12来搞定它。
接下来继续分析,上面图中有很和谐的提示,分析即可看到
要求网络验证的返回值在eax中,且要为0,才算是通过。而上面的调用中,并没什么关键的。
自然,call 00446AF0,就是关键call,分析它,世界自然就会和谐。
进去之后,可以看到文件的访问、注册表的访问,以及认证的网页地址等等。
http://attach.52pojie.cn/forum/201704/25/002935kswirkqwnn3llh9a.png

http://attach.52pojie.cn/forum/201704/25/002942rw7jttwztiwo7nto.png



喜欢看看,就去看看咯,其他的程序,很多都差不多的,掌握这些信息,程序注册了,可以删除了,再分析,适合学习。
当然, 中间还有个烦人的sleep,心情好,去掉即可。
修改返回值,自然是在函数返回的位置,可以跟踪一下。
懒得跟踪的人,可以看一下堆栈,分析可以知道,直接返回就可以了。
所以,修改函数头部代码如下:
xor eax,eax
retn
这里,eax传入的本来也是零,为防止其他情况,就还是清理一下较好。
调用这里的有两个地方,一次解决了,世界清静,而且还没有必须要网络使用限制了。
返回为零了,网络验证这个就算是过了。
这里提一下,在验证这个函数之前,还有对注册ID的长度验证,以及计算MD5之类的,随便看看吧。

3、自校验:这个自校验也还算做得不错。
先把文件校验了,把校验结果先放起,等到你真正使用的时候,尤其是批量使用的时候,才来校验正确性。

但是所有的自校验,都有个基本的特征,就是一定要首先取得当前文件的句柄,然后读取文件。
当然,也可以不停的内存校验,比如说很浪的lol这个游戏,在登录界面的时候,想注入修改一下代码,可不简单。
必须要同时修改代码和校验值,然后才能做你想做的……当然,你想要知道校验值,就必须要知道其校验算法,
还有其校验的代码段,剩下的,就是你自己计算好修改后的代码校验值,然后再去改原来的代码,原来的校验值。
不然,就一定会提示你电脑中毒啦,不安全什么的……扯远了。想要挑战难度的,可以去试试。也算是练练基本功。

相比之下,这个校验,仅仅只是一个简单的文件Md5值校验。
先说一下思路:基本上就是取得文件句柄,打开文件,读取文件,计算文件MD5,校验文件内容。
翻译一下就是:GetModuleFileNameA->CreateFileA->GetFileSize->ReadFile->GetMD5->CheckMD5。
废话不多说,直接上图:
http://attach.52pojie.cn/forum/201704/25/010822woxpopkkpppz1pvr.png

这里着重需要分析一下GetMd5的函数参数,为什么呢?看图。
http://attach.52pojie.cn/forum/201704/25/004433edpmqp4ibukbeo4z.png
分析可以看到,这里没有比较过程,或者比较函数的调用。而只是计算了文件的MD5,所以比较一定在其他地方。
但是在哪里呢?这个自然是不好找的。不过,硬件断点可以帮忙嘛。
分析参数得知,该函数,第一个参数是文件的大小,第二个参数是文件内容的缓冲区,第三个,则是返回来的MD5值。

http://attach.52pojie.cn/forum/201704/25/004809vgf77a6g6ffgwl77.png
不用说,这里自然是要对返回来的Md5值下硬件访问断点了,内存访问断点也是可以的。但这个是要分情况的。
比如说lol,人家本身就是硬件断点占坑,不停的异常,又不停的处理异常,这个时候,硬件断点就不好用了,
但使用内存断点就非常好用,当然,这也看个人习惯。
然后嘛,然程序跑起来,随便转换一个文件,转换结束的时候,会断下来,来到校验的地方。看图。
http://attach.52pojie.cn/forum/201704/25/005313z3cqex0qxxjj3wpp.png

首先是传入两个Md5值,然后对其计算,至于算法分析,不是这里将的重点,
心情好,直接用IDA,F5一下看起来就舒服了,心情不好,慢慢虐一下,很简单,只要返回值为零就对了。
难得去IDA的,这里给个图,先大致结合着看,作为锻炼吧。基本上就是异或和与,很简单。



然后嘛,改一下返回值前面的那句话,xor esi,esi,即返回值永远为0,世界就和谐了。
当然,分析到这里了,也自然能够看到,原始的文件MD5值在mcres.dll中。
如果懒得改这里,或者不想让别人改你修改过的程序,直接把你改好的程序,计算个Md5值。
用winhex之类的16进制编辑工具,替换一下mcres.dll中的md5值就OK了。

剩下的,还有什么做计算题窗口啊,各种延迟啊,甚至打开浏览器访问网页啊,都可以自己分析一下,
自校验过了,程序就基本上随你改了。

另外,64 位版本的程序,分析流程和这个一样,改法也是一样的。随便改吧。

最后,上一张大结局:x86和x64的全家福。

http://attach.52pojie.cn/forum/201704/25/010303awjhy55hdh9nye5y.png

Lijunlin7611 发表于 2017-4-29 19:51

zbhhyn520 发表于 2017-4-26 20:54
兄弟,破解个出来分享下嘛

教程仅供学习,要学会尊重软件作者的劳动成果。破解好的,网上一大堆。给出来的是思路和方法。而学习的,也是这个思路和方法,去体会找到破解软件的思路,而不是仅仅破解个软件。

zbhhyn520 发表于 2017-4-26 20:54

兄弟,破解个出来分享下嘛

123012a 发表于 2017-8-10 13:01

对于我这种完全不会的,请给个破解版呗?谢谢

youdamushi 发表于 2017-5-20 18:40

说得好 赞楼主

奈落堇梦 发表于 2017-8-10 15:06

支持!教程说的太详细了!

山岗田野 发表于 2017-8-25 17:29

不是计算机专业的,不会破,能给个现成的用用该多好啊

楓林晚 发表于 2017-9-25 11:50

给个现成的吧,大神

优库里伍德 发表于 2017-12-19 14:15

水平不够 先收藏了 顺便求现成+1

fhwangyinan 发表于 2018-2-25 12:11

感谢楼主!学习了!
页: [1] 2 3
查看完整版本: MediaCoder 思路分析,适合新手学习。