zoukankan      html  css  js  c++  java
  • 第5章:演示版保护技术——网络验证

    网络验证的目的是:将关键数据放到服务器上,从服务器上取得数据后软件才能运行。拆解的一般思路是拦截网络返回包,分析程序是如何处理数据包的。

    当一个连接建立后,就可以传输数据了。常用的数据传送函数有 send()recv() 两个 Socket 函数,以及微软的 WSASend()WSARecv()

    在书上给的例子中看一下:

    首先需要注意的是,这个程序和上个程序类似,也是基于按钮事件触发的。直接上 IDA 看是最简单的,可以看到相应的函数,然后在 x64dbg 中调试。

    首先会对服务器进行连接,连接失败则:

    若连接成功,则程序会将信息(按照  字符数1+字符数2+随机数+字符串1+字符串2 )发送给服务器,并执行 Sleep()函数,然后再执行 Recv() 函数,接受服务器的返回信息:

    返回成功后 eax == 5A ,并会接受服务器的返回信息,然后进入一个循环,总共循环 5A 次,即将返回的信息全部与 6E 进行 Xor 运算,并存储到 41AE68 开头的地址中:

    然后依次与特定位置的值进行对比,都不跳转,即验证正确:

    因为数据包会发送到服务器进行处理,导致返回的数据难以猜测是如何加密的,因此分析客户端加密方式的意义不大。

    可以直接使用 jmp 指令跳过该程序验证阶段或者不执行,或者修改 host 文件(以域名访问服务器) or 在 inet_addr() / connect() 处下断,修改 ip 地址,自己编写服务器并返回值。

  • 相关阅读:
    MIne FirstBlog
    P6563 [SBCOI2020]一直在你身旁
    P6563 [SBCOI2020]一直在你身旁
    T122085 [SBCOI2020]时光的流逝
    LC 918. Maximum Sum Circular Subarray
    1026 Table Tennis
    LC 1442. Count Triplets That Can Form Two Arrays of Equal XOR
    LC 1316. Distinct Echo Substrings
    LC 493. Reverse Pairs
    1029 Median (二分)
  • 原文地址:https://www.cnblogs.com/Rev-omi/p/13799016.html
Copyright © 2011-2022 走看看