网络验证的攻与防 攻篇(一)
此文章可以做为一些新手逆向网络验证的入门,也可以让不明白自己的程序用的网络验证为什么被破的朋友明白一些防破的道理,攻与防本来就不分家,懂攻才懂防,所以先从攻入手本文以易语言程序为例子,看懂了别的程序也适用,今天的例子以某可为例,下面我们看某可的验证登录代码关键片断如果要逆向这个登录,用改跳转应该怎么办?看下图把箭头标记的那行改成真就行了,但是现在是个强壳的时代,这些代码必被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就成了本文用到的例子的原代码,模块,生成的程序都已经打包好,下载地址**** Hidden Message *****包里面的程序是没有加壳的,使用VMP加壳VM代码一样的有效,加VMP壳后登录按钮事件会被VM,用OD加载你就会发现登录按钮事件的头部没有被VM虚拟化,同理老版本的ks_IdCheck的头部也是一样没有被VM虚拟化的,压缩包里没有注入器,你可以自己找一个注入器,如果找不到,StrongOD插件是带了注入器的,先用OD加载程序,把程序跑起来,然后在CPU窗口右键,然后选StrongOD,然后先InjectDLL,然后再选择Remote Thread,最后选择hook.dll,就把DLL注入了,可可V9DLL模版里的源码建议多看看,举一反三你就知道别的注入DLL要怎么写了
补充内容 (2016-10-29 14:41):
攻篇二传送门:https://www.52hb.com/thread-28720-1-1.html 向大神学习了 {:5_118:}深奥的。看不懂 虽然没看懂。还是支持下 期待下一篇{:5_116:}楼主 防快点出呀 牛。。 大神教教我 这么厉害,真牛 学习学习,共同进步 先占坐,慢慢再看 {:5_120:}学习一下子