难寻。 发表于 2017-6-27 11:49

难寻之核盾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:55

本帖最后由 难寻。 于 2017-6-27 12:56 编辑

Shark恒 发表于 2017-6-27 12:47
其实目前各种游戏FZ用的网络验证没什么难度,拿这源码修改有啥难,主要很多新人不懂编程,看不懂源码, ...
{:5_184:}哈哈,一针见血,现状就是,大多数人,都不知道jnz咋来的,就知道跟着视频或图文一步一步做,不说jnz是啥意思他就不知道,说了他也记不住,为破而破,就针对一个验证一个FZ的去学习某个教程,前一段分析百宝云的时候就是E也不会汇编代码也不看,同样的东西 一个用判断 一个用判断循环首,写出来 ,就不会破了,就要发消息问我了。。
我以前理解的“逆向”就是 去掉限制达到目的,现在理解的“逆向”是 破除限制并解密限制来源和方法

难寻。 发表于 2017-6-27 11:52

@Shark恒 {:5_123:}特别详细且首发,这次够不够sj   

hbj54 发表于 2017-6-27 12:26

支持一下。。。。

小白的烦恼 发表于 2017-6-27 12:28

支持 {:5_119:}

Shark恒 发表于 2017-6-27 12:31

难寻。 发表于 2017-6-27 11:52
@Shark恒 特别详细且首发,这次够不够sj
确实很详细啊,有时间应该把所有源码都收集一遍,来个大讲解,这样大家就知道网络验证其实并不可怕。

源码到手,还怕没有思路入手分析?建议新手先学学编程,起码先学学易语言也好。会对新手们帮助很大。

精华走一波,希望分析更多网络验证源码,带领不懂网络验证的新人们,认识网络验证的本质。

打不死的小强强 发表于 2017-6-27 12:41

大佬看看                        

难寻。 发表于 2017-6-27 12:44

Shark恒 发表于 2017-6-27 12:31
确实很详细啊,有时间应该把所有源码都收集一遍,来个大讲解,这样大家就知道网络验证其实并不可怕。

...

感谢老大,{:5_116:}的确,我认为开源验证比自写或者本地算法啥的简单多了,1个验证拿来,照葫芦画瓢基本就会了,还容易理解
{:5_188:}分析这些过程比写通杀工具空造轮子强多了。

Shark恒 发表于 2017-6-27 12:47

难寻。 发表于 2017-6-27 12:44
感谢老大,的确,我认为开源验证比自写或者本地算法啥的简单多了,1个验证拿来,照葫芦画瓢基本 ...

其实目前各种游戏FZ用的网络验证没什么难度,拿这源码修改有啥难,主要很多新人不懂编程,看不懂源码,那就难了。。

a779260718 发表于 2017-6-27 13:34

不错不错   正好用到本质的教程 精华啊!!!!!!!!!
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 难寻之核盾web网络验证取全部数据思路分析。