xu2611 发表于 2016-10-19 13:02

网络验证的攻与防 攻篇(二)

本帖最后由 xu2611 于 2016-10-19 13:09 编辑

攻篇(一)地址:http://www.52pojie.cn/thread-544094-1-1.html
攻篇(一)所有的网络验证是某可9.5版,关键API没有带VMP标记,所以加壳的时候关键API并没有被VM,这次我把示例程序换成9.1版,关键API是带VMP标记的,这篇主讲VM后的程序怎么处理
先讲一讲VM后的程序如何定位API头部,易语言的VMP标记是在API头部以下的,所以一般的加壳并没有VM掉API的头部
打个比方,如果你现在正想破一个某可9.1版的程序,你先找一份某可9.1版的原程序,生成一个示例程序,然后对照程序用OD跟踪出未加壳的头部地址
我的示例程序ks_IdCheck函数的头部在408FF3处,如下图

看箭头所指地方,是VMP的标记字符串,字符串上面是一个JMP,然后把头部到VMP标记以面的JMP之前的二进制代码复制一下
55 8B EC 81 EC 94 00 00 00 C7 45 FC 00 00 00 00 C7 45 F8 00 00 00 00 68 0C 00 00 00 E8 64 2D 01
00 83 C4 04 89 45 F4 8B D8 C7 03 00 00 00 00 C7 43 04 00 00 00 00 C7 43 08 00 00 00 00 C7 45 F0
00 00 00 00 C7 45 EC 00 00 00 00 C7 45 E8 00 00 00 00 C7 45 E4 00 00 00 00 C7 45 E0 00 00 00 00
C7 45 DC 00 00 00 00 C7 45 D8 00 00 00 00 C7 45 D4 00 00 00 00 C7 45 D0 00 00 00 00 C7 45 CC 00
00 00 00 68 10 00 00 00 E8 F8 2C 01 00 83 C4 04 89 45 C8 8B D8 C7 03 00 00 00 00 C7 43 04 00 00
00 00 C7 43 08 00 00 00 00 C7 43 0C 00 00 00 00 C7 45 C4 00 00 00 00 68 08 00 00 00 E8 C4 2C 01
00 83 C4 04 89 45 C0 8B F8 BE 78 51 4A 00 AD AB AD AB
由于每次用原程序重新生成程序的时候,图片中CALL的地址基本都会不一样,所以上面的二进制要改一下才能用在别的程序,怎么改呢?把CALL后面的地址用OD的通配符??代替,就变成了下面的二进制代码、
55 8B EC 81 EC 94 00 00 00 C7 45 FC 00 00 00 00 C7 45 F8 00 00 00 00 68 0C 00 00 00 E8 ?? ?? ??
?? 83 C4 04 89 45 F4 8B D8 C7 03 00 00 00 00 C7 43 04 00 00 00 00 C7 43 08 00 00 00 00 C7 45 F0
00 00 00 00 C7 45 EC 00 00 00 00 C7 45 E8 00 00 00 00 C7 45 E4 00 00 00 00 C7 45 E0 00 00 00 00
C7 45 DC 00 00 00 00 C7 45 D8 00 00 00 00 C7 45 D4 00 00 00 00 C7 45 D0 00 00 00 00 C7 45 CC 00
00 00 00 68 10 00 00 00 E8???? ?? ?? 83 C4 04 89 45 C8 8B D8 C7 03 00 00 00 00 C7 43 04 00 00
00 00 C7 43 08 00 00 00 00 C7 43 0C 00 00 00 00 C7 45 C4 00 00 00 00 68 08 00 00 00 E8 ?? ?? ??
?? 83 C4 04 89 45 C0 8B F8 BE 78 51 4A 00 AD AB AD AB
然后在易语言的401000处开始,用上面的二进制代码查找,就可以找到VM后的ks_IdCheck函数头部,这种方法也就是所谓的特征码定位,用这种方法,只要你网络验证的同版本的原程序,基本就可以把API的头部查找出来
ks_IdCheck函数的HOOK在攻篇(一)中有兴趣的去看攻篇(一)
下面我们解决第二个关键函数ks_GetData
用OD跟踪,ks_GetData函数头部在41508A处,下面我们看一看这个函数的说明

此函数根据不同的输入整数返回不同的信息,我的例子就写了一个输入整数为4,返回的是用户绑定信息,我们假设此信息是文本:123456
则我们的HOOK程序的写法如下图

如果要返回别的信息,你们可以自己改写一下就行了,所有要用到程序和原代码都打包好了
下载地址为:链接: http://pan.baidu.com/s/1b8XA26 密码: xxsa
压缩包里的程序没有加VMP壳,你们可以自己加一下VMP壳比较一下未VM与VM后函数内部的变化,上面的特征码定位方法大家自己动手操作一下更容易懂
对照例子,只要你手上有某可同版本的原代码,解决ks_IdCheck与ks_GetData是没有问题的。压缩包里有HOOK原代码,也有注入程序源代码,怎么HOOK大家
可以参照一下我的写法,别光看帖子,要接合原代码

hunkiss 发表于 2016-10-19 15:16

还有网络验证也是 放OD就调用了TApi.dlldm.dlllogin.dllTLib.dll这是什么网络验证在访问个183.131.212.50:443 IP.
有人说是注册宝。我怎么就觉得不像啊

mutou666 发表于 2017-6-5 16:19

viply 发表于 2016-10-19 13:45
现在破解可可没什么难度了,满大街被玩烂的一个验证系统
可可每次调用它的函数都会先调用一个CALL,直接找 ...

看见你说的话我仿佛已经瞬间学会了hh,

温柔你的兔子哥 发表于 2016-10-19 13:06

消灭零回复

Sound 发表于 2016-10-19 13:30

段首VM的话HOOK的地方就得换了。

影佑 发表于 2016-10-19 13:31

厉害了啊老哥

JackDx 发表于 2016-10-19 13:38

支持下。

viply 发表于 2016-10-19 13:45

现在破解可可没什么难度了,满大街被玩烂的一个验证系统
可可每次调用它的函数都会先调用一个CALL,直接找到并且HOOK掉这个CALL然后直接修改返回值就行了。

黑龍 发表于 2016-10-19 13:56

{:301_1001:}甭说了 我去找可可定制模块了...看见你们就害怕。

hc696di 发表于 2016-10-19 14:59

好多眼熟的大神

hunkiss 发表于 2016-10-19 15:13

有个软件VS2008编写的区段就只多加了一个vmp0.这是VMP壳吗?还是其他壳伪装的
页: [1] 2 3
查看完整版本: 网络验证的攻与防 攻篇(二)