网络验证的攻与防 攻篇(一)
此文章可以做为一些新手破解网络验证的入门,也可以让不明白自己的程序用的网络验证为什么被破的朋友明白一些防破的道理,攻与防本来就不分家,懂攻才懂防,所以先从攻入手本文以易语言程序为例子,看懂了别的程序也适用,今天的例子以某可为例,下面我们看某可的验证登录代码关键片断
如果要破解这个登录,用改跳转应该怎么办?看下图
把箭头标记的那行改成真就行了,但是现在是个强壳的时代,这些代码必被VM,被VM以后想改就难了
我们换一种办法,用HOOK API,至于HOOK API的技术如果不会可以在网上找一些资料来看
我们要HOOK API呢,HOOK ks_IdCheck,因为ks_IdCheck是验证的关键所在,下面我们看ks_IdCheck函数形式
输入一个文本型变量,输入一个整数,由于第二个参数是控制联网的,我们可以不去管它,主要是第一个v_signA,从验证代码中可以看出signData由800个字符组成,可以分成100份8个字符的字符串,而ks_IdCheck是输入前50份由8个字符组成的字符串中的一个,我们就当它是第N个,而ks_IdCheck返回的是后50份由8个字符组成的字符串中的第N个
那么我们的HOOK的方案就出来了,写一个与ks_IdCheck函数形式一样的函数,亦v_signA得到随机数N,然后取出后前50份由8个字符组成的字符串中的第N个,返回这个字符串,这个字符串就是正确的结果了
可能你们会问VM了怎么HOOK,易语言程序加VM有一毛病,就是函数头并不VM,因为易语言的VM标记会在函数头部以下,由于我用的某可9.5版本做的例子,ks_IdCheck并没有被VM,如果你有老一点的版本,比如9.3版,ks_IdCheck是被VM的,一样可以找到头部,所以还是可以VM的
下面我们看看HOOK函数的写法
上面是HOOK函数的写法,只要把原来是ks_IdCheck换成这个这个我写的ks_IdCheck就成了,跟踪程序发现ks_IdCheck的开头在地址407D4C处,我们只要在407D4C处跳到我们自己写的ks_IdCheck就成了
本文用到的例子的原代码,模块,生成的程序都已经打包好,下载地址:链接: http://pan.baidu.com/s/1eSfZcxO 密码: 41id
包里面的程序是没有加壳的,使用VMP加壳VM代码一样的有效,加VMP壳后登录按钮事件会被VM,用OD加载你就会发现登录按钮事件的头部没有被VM虚拟化,同理老版本的ks_IdCheck的头部也是一样没有被VM虚拟化的,压缩包里没有注入器,你可以自己找一个注入器,如果找不到,StrongOD插件是带了注入器的,先用OD加载程序,把程序跑起来,然后在CPU窗口右键,然后选StrongOD,然后先InjectDLL,然后再选择Remote Thread,最后选择hook.dll,就把DLL注入了,可可V9DLL模版里的源码建议多看看,举一反三你就知道别的注入DLL要怎么写了
本帖最后由 xu2611 于 2016-10-12 09:28 编辑
yAYa的表哥 发表于 2016-10-11 18:05
这个转的吧!!看过了,至于这个方法好久之前用过了!确实可以,只不过还有更好的。
不是转的,本人写的,如果你在别的地方看到,也是我写的,可以说说更好的指的是什么方法么?
lonely_coder 发表于 2016-10-11 18:57
写的应该算是很不错的,但是为什么要拿易语言写啊,基本没看懂。。
写一般的程序用易语言比较快,省事,而且论坛里大多会易语言,不会的,只要会别的语言也看的懂 不懂易语言,一脸懵逼…… 感谢分享,学习一下 这个转的吧!!看过了,至于这个方法好久之前用过了!确实可以,只不过还有更好的。 转载都不转载全了 感谢分享,学习一下 对于小白我来说,表示看不懂! 感谢楼下谢谢分享 写的应该算是很不错的,但是为什么要拿易语言写啊,基本没看懂。。 写的不错 谢分享