now刘 发表于 2016-10-4 22:06:57

可可山寨分析篇(一)

本帖最后由 now刘 于 2016-10-4 22:27 编辑

大家好,我是Now You See Me ,今天为大家带来可可VM后山寨的思路,我写这个东西原因来自几个月前,有人用易语言写了可可的山寨软件。他说他这个能卖8000RMB这样。然后我对这个生起了兴趣,犹豫刚刚步入大学生活,感觉时间非常充裕,加上又学C语言,所以我就缓慢地研究,终于今天弄好。 2016\10\02。我录制的视频估计有点长,因为自己为了提高C++的基础,用C++首次尝试DLL劫持打补丁(有C++apihook基础),并且还是成功了,注意:这种分析方法挺适合新手利用编程破解VM方法之一。先说说我的开发环境:系统:Windows 8.1专业版开发平台:VS2015分析破解的源码:可可9.5易语言例子可可9.5模块源码自己的DLL补丁开发环境:MFC DLL系统DLL劫持开发环境:WIN32 DLL需要用到的技术 API HOOK(我使用微软detours开发框架的HOOK源码,虽然detours有局限性,并且有我目前还没解决的问题)系统DLL劫持 “version.dll”(可以用AXXXXB.EXE生成源码,但是估计系统不兼容的原因,生成的源码报错,之后我使用飘零阁校长发过的代码能使用)裸函数的小小应用(进入OD后会讲到)在此由衷感谢裸函数的小小使用 ID:大老爷 的指点,劫持源码感谢飘零阁校长的系统劫持DLL源码提供。后面都是自己一顿瞎搞。我先粗略的讲解一下可可网络验证每次加载的话都会加载“version.dll”这个系统的DLL文件(也许会跟系统的原因,DLL可能不一样)系统DLL劫持技术就在于系统先扫描当前目录系统DLL(如“version.dll”),当前目录没找到然后在扫描C盘里面的系统DLL,我们先建立一个文件名一模一样的“version.dll”,注意微软的DLL貌似不开源。因此我们并不知道“version.dll”这个文件怎么仿照弄,所以每当程序调用我们自己的“version.dll”上的应用时,我们在源码上建立一个接口,让程序跳到系统目录执行原系统DLL函数的功能,因为程序是先执行我们自写系统DLL的,之后我们就可以在自写系统DLL上自由的读写了。我这选择LoadLibary这个API函数加载我的补丁DLL。因为他有他的好处。(以上废话到此结束)用OD来破解我们先来看看可可登录验证的源码,启动窗口时就调用ks_setLicense来链接服务器接口(需要API来下断,跑过了就失败了,我获取到的是GetModuleHandleA这个API函数进行劫持,当然这是打补丁的事情)。这个函数在模块使用得,我在某论坛看了一下模块源码,发现一个套路秘密,他这个模块是里边加载DLL并且使用DLL里边的函数的进行验证的。然而这个DLL被VM过的。这是坏事,也是好事,坏事就是不能分析DLL原理,能分析话他就不用玩了。好事就是几乎所有软件作者都没动过DLL,也就是说,这些DLL可以说结构一成不变的。然而你在看看模块有一句获取函数地址- -* ,我直接把模块添加信息框,进行地址获取,当然写法估计有点变,特征码需要自己定位,在用C++补丁写法我会讲到有关地址的问题。也就是说,模块为了加载DLL不得不获取函数头地址进行传参,然而我们获取能随意获取DLL传参函数头地址,在那个地方进行HOOK。
我先给大家介绍函数参数与堆栈的小小意展示图先分析ks_setLicense只有一个参数并且没有返回值,这样只有HOOK了,我测试过如果是仿照模块函数的话程序直接结束运行我们看堆栈应用图片知道ebp+8是函数参数1存放的地方,存放着是一个4字节的指针地址,我们HOOK ,先在空白地址写上补码数据,记上函数的头地址(当它是一个指针吧),我们就添加这一句:mov dword ptr ss:,0x地址之后补上剩余的字节 jmp回去
过程展示全图


F9后窗口启动完成,修改ks_setLicense已经完成,到这里已经达到了一半成功=-=。
下一步就是看登录按钮事件,这个事件调用模块的ks_setSoftVal函数,不出意料的模块调用的也是DLL的函数,同样的方法,在函数头下方HOOK ebp+8是软件编号,ebp+c是软件秘钥按照上面的方法进行,HOOK完成也就完成了,看看登录效果,登录进去就是HOOK山寨成功了(数据签名貌似并不重要,不清楚原因,不过数据签名与验证算法有关,数据签名改也是非常容易,易语言有个取中间文本,定位特征码就能改,而且伦发的可可山寨软件也有取中间文本的地址,数据签名在ebp+24吧好像,我比较懒,不去弄了)。第二步同第一步一样,在下断的地方HOOK到空白字节集进行补码


最后卖个关子,大白补丁能做到这一切,但并不是非常完美,第一有logo加载,第二,hex补丁有RSA加密字节限制ks_setLicense数据根本不能补全,第三补丁不能动态申请内存空间,容易出错。 下次用视频讲解一下C++补丁写法和自身一些疑问问题。注:本次图文教程非常不适合实验,因为会出挺多差错,适合写补丁提供一下思路。下一期进行介绍我的C++补丁,我会发源码给大家参考的。
这篇文章是我利用学习之余发表个人研究与个人观点,老手飘过,同时这算是VMP破解的旁门歪道吧,缺点就是要有源码新手才能分析。下面是我用VS2015C++写的补丁源码(源码很重要),这个源码其实动动脑子也能劫持其他的网络验证的软件打补丁,对新手扩展了打补丁自由性,并不一定需要补丁工具。



AngMer 发表于 2016-10-19 21:08:49

顶!!凑字数啦!!!

无邪 发表于 2017-1-13 17:10:00

路过 ,,,,,,,,,:o
页: [1]
查看完整版本: 可可山寨分析篇(一)