难寻之核盾web网络验证取全部数据思路分析。
{:5_188:}搜了下,没有关于核盾web数据的教程,这里小菜为大家献上,很简单的思路,纯适合小白,大牛飘过昨天看到有个web爆破,我才发现核盾出了个web登录,我在这里为核盾web送上见面礼,喜欢的请大家给评个分,感觉升级好难。
下载源码看了一下,大概主要就两个子程序
1.调用webapi(网址,参数) 提交数据到网址山寨需要用到的数据,在这里可以获取到,核盾3要素嘛,源码如下:
.版本 2
AppID = 18
SafeCode = “843007551”
CustomCode = “456”
url = “WebApi/Initialize?”
参数 = “appID=” + 到文本 (AppID) + “&safeCode=” + SafeCode + “&customCode=” + CustomCode
返回值 = 到文本 (调用WebApi (url, 到字节集 (参数)))
当然还有其他各种提交的数据,机器码啦版本啦等等都可以,总之就是提交的数据都要用这子程序提交,大家看下源码,我就不一一示例了
2.核盾_json.GetValue (参数) 取回数据到本地伪造数据需要用的数据,在这里可以获取到,返回时间啊,静态数据啊,远程调用啊,源码如下:
到期时间 = 到数值 (登录后数据.GetValue (“expireTime”)) 时间
登录后数据.GetValue (“staticData”)静态数据
.版本 2
url = “WebApi/TelnetFun”
参数 = “fun=” + fun + “?m=” + param
返回值 = 到文本 (调用WebApi (url, 到字节集 (参数)))
json.SetJSON (返回值)
json.Parser ()
返回 (json.GetValue (“msg”)) 远程调用
还包括什么公告,心跳之类的,总之就是返回的数据都需要从这里取回,大家也可以下载源码自己看一下
那么问题来了,知道这两个是主要子程序,我们在od中怎么去找它呢?
超简单大家都会的方法,按钮事件F8 单步 F7进callcall代表跳转 调用子程序嘛,因为这俩子程序都是需要参数的,所以F7进call 55 那里就应该看到提交的参数,如果看到了,证明就是你要找的call如果没看到,可能就是其他运算call之类的,那我们找调用webapi这个call
我们看到,在登录按钮下 会调用这个子程序,我们编译出来扔od看一下,因为有时钟 ,我就没用按钮特征码找了,直接用的虫子。
控件名称:登陆按钮→事件地址:401253
.版本 2
参数 = “userName=” + 用户帐号1.内容 + “&password=” + 登陆密码1.内容 + “&verifyCode=” + 验证码1.内容 + “&machineCode=” + 机器码
返回值 = 到文本 (调用WebApi (url, 到字节集 (参数)))
在这句话中,调用了3个子程序,到文本(),调用webapi(),到字节集(),其中只有调用webapi置入了vm代码,所以我们按钮事件下,只需要要到这个带vm代码的就是调用webapi子程序了
那我们就按钮事件下的call都下断?错了~太麻烦,我们只需要在 字符串 &machineCode= 下面再有call再下断,起码能省好多call呢,原因就是 ,很明显子程序是在这个字符串之后调用的嘛
这时候 挨个call下断,跟进去找vm代码,有的肯定就是这个子程序了
那我在第7个call中找到了vm代码
00401906 $55 PUSH EBP
00401907 .8BEC MOV EBP, ESP
00401909 .81EC 5C000000 SUB ESP, 0x5C
0040190F .C745 FC 00000>MOV DWORD PTR SS:, 0x0
00401916 .C745 F8 00000>MOV DWORD PTR SS:, 0x0
0040191D .C745 F4 00000>MOV DWORD PTR SS:, 0x0
00401924 .C745 F0 00000>MOV DWORD PTR SS:, 0x0
0040192B .C745 EC 00000>MOV DWORD PTR SS:, 0x0
00401932 .C745 E8 00000>MOV DWORD PTR SS:, 0x0
00401939 .C745 E4 00000>MOV DWORD PTR SS:, 0x0
00401940 .C745 E0 00000>MOV DWORD PTR SS:, 0x0
00401947 .C745 DC 00000>MOV DWORD PTR SS:, 0x0
0040194E .C745 D8 00000>MOV DWORD PTR SS:, 0x0
00401955 .C745 D4 00000>MOV DWORD PTR SS:, 0x0
0040195C .C745 D0 00000>MOV DWORD PTR SS:, 0x0
00401963 .C745 CC 00000>MOV DWORD PTR SS:, 0x0
0040196A .68 08000000 PUSH 0x8
0040196F .E8 9A670000 CALL 0040810E
00401974 .83C4 04 ADD ESP, 0x4
00401977 .8945 C8 MOV DWORD PTR SS:, EAX
0040197A .8BF8 MOV EDI, EAX
0040197C .BE 52FE4900 MOV ESI, 0049FE52
00401981 .AD LODS DWORD PTR DS:
00401982 .AB STOS DWORD PTR ES:
00401983 .AD LODS DWORD PTR DS:
00401984 .AB STOS DWORD PTR ES:
00401985 .EB 10 JMP SHORT 00401997
00401987 .56 4D 50 72 6>ASCII "VMProtect begin",0
并且在堆栈窗口中找到他的两个参数
0012F700|003C15F8ASCII "userName=nanxun&password=xuepojie&verifyCode=&machineCode=123"提交的参数 帐号密码验证码机器码
0012F704|0049FE15ASCII "WebApi/Login"网址
因此我们确定这是webapi子程序的call ,在段首00401906 下个断点,按其他按钮试试吧,我们按注册按钮,因为注册按钮下也调用了这个子程序
在注册按钮按下,我们发现又进了这个call,没错,就是它,堆栈窗口出现:
0012F700 003697D8ASCII "userName=nanxun&password=xuepojie&KEY=&data=&verifyCode=&machineCode=123"
0012F704 004A01F2ASCII "WebApi/Register?"
是不是和源码一样?举一反三,退出程序重新载入,初始化的时候也调用了,那我们是不是可以获得核盾3要素了?
026AFF64 007ACBD8ASCII "appID=18&safeCode=843007551&customCode=456"
026AFF68 004A00D2ASCII "WebApi/Initialize?"
ID 编号自定义,3个数据都出来了,和源码中是一样的
.版本 2
AppID = 18
SafeCode = “843007551”
CustomCode = “456”
url = “WebApi/Initialize?”
参数 = “appID=” + 到文本 (AppID) + “&safeCode=” + SafeCode + “&customCode=” + CustomCode
返回值 = 到文本 (调用WebApi (url, 到字节集 (参数)))
当然了,不这么费劲,直接bp send也能看到这些东西。==额,我讲的是小白思路,不调用api 就是一步一步追调用
这时候又有人冒出来说,这只能取官方示例的吧?谁家发布的时候还不加个vm壳,vm后代码看不到了怎么办?
这个我不想给你解释,头部一般是不会被vm 的,找到子程序,记录特征码,vm又何妨?
又有人要问了,数据找到了我们如何修改呢?
哈哈哈,脓个大撒子,怎么推进来的就怎么返回去找数据修改啊,段首下断,堆栈是会告诉你是从哪调用的,比如:
0261FF34 00405713返回到 核盾验证.00405713 来自 核盾验证.00401906
返回去,往上找肯定就出现你要的数据了,如果没有呢,也许是加密解密了,你自己在call上面几句代码jmp跳到空白处补你的数据再跳回来就得了,管他加密不加密
写这么多,嫌我自己麻烦了都,为坛友留下一点小作业,也就是我的另一半没说的类模块中的GetValue咋找的呢?希望广大坛友动动手,举一反三的去找,这里我不在讲解。
看到这里是不是想骂我标题党?提交的数据取了返回的数据不讲了?
**** Hidden Message *****
本帖最后由 难寻。 于 2017-6-27 12:56 编辑
Shark恒 发表于 2017-6-27 12:47
其实目前各种游戏FZ用的网络验证没什么难度,拿这源码修改有啥难,主要很多新人不懂编程,看不懂源码, ...
{:5_184:}哈哈,一针见血,现状就是,大多数人,都不知道jnz咋来的,就知道跟着视频或图文一步一步做,不说jnz是啥意思他就不知道,说了他也记不住,为破而破,就针对一个验证一个FZ的去学习某个教程,前一段分析百宝云的时候就是E也不会汇编代码也不看,同样的东西 一个用判断 一个用判断循环首,写出来 ,就不会破了,就要发消息问我了。。
我以前理解的“逆向”就是 去掉限制达到目的,现在理解的“逆向”是 破除限制并解密限制来源和方法 @Shark恒 {:5_123:}特别详细且首发,这次够不够sj 支持一下。。。。 支持 {:5_119:} 难寻。 发表于 2017-6-27 11:52
@Shark恒 特别详细且首发,这次够不够sj
确实很详细啊,有时间应该把所有源码都收集一遍,来个大讲解,这样大家就知道网络验证其实并不可怕。
源码到手,还怕没有思路入手分析?建议新手先学学编程,起码先学学易语言也好。会对新手们帮助很大。
精华走一波,希望分析更多网络验证源码,带领不懂网络验证的新人们,认识网络验证的本质。
大佬看看 Shark恒 发表于 2017-6-27 12:31
确实很详细啊,有时间应该把所有源码都收集一遍,来个大讲解,这样大家就知道网络验证其实并不可怕。
...
感谢老大,{:5_116:}的确,我认为开源验证比自写或者本地算法啥的简单多了,1个验证拿来,照葫芦画瓢基本就会了,还容易理解
{:5_188:}分析这些过程比写通杀工具空造轮子强多了。 难寻。 发表于 2017-6-27 12:44
感谢老大,的确,我认为开源验证比自写或者本地算法啥的简单多了,1个验证拿来,照葫芦画瓢基本 ...
其实目前各种游戏FZ用的网络验证没什么难度,拿这源码修改有啥难,主要很多新人不懂编程,看不懂源码,那就难了。。 不错不错 正好用到本质的教程 精华啊!!!!!!!!!