封包协议,加密解密,线程发包,recv,明文收包(转载)

封包协议,加密解密,线程发包,recv,明文收包 什么是封包?封包就是按照某种协议组成的一段字节集.这个很容易理解那为什么要按照某种协议呢?这个我们一会再说所有联网的软件,包括网络游戏,客户端和服务端进行通信都是通过封包进行的.大家可以想象成2个人打电话,封包就是说话的内容.而协议呢?就是封包的语种, 2个人打电话一个用日语,一个用英文もしもし、韓さんです。那边接电话 What are you talking?这怎么交流啊?好,那么我们定好协议,本通电话我们全部采用中文,这样就可以正常交流了对吧?这就是协议。 阅读详情

转自吾爱大佬

 

1.封包,协议
什么是封包?封包就是按照某种协议组成的一段字节集.这个很容易理解
那为什么要按照某种协议呢?这个我们一会再说
所有联网的软件,包括网络游戏,客户端和服务端进行通信都是通过封包进行的.
大家可以想象成2个人打电话,封包就是说话的内容.
而协议呢?就是封包的语种,  2个人打电话一个用日语,一个用英文
もしもし、韓さんです。 那边接电话 What are you talking?  这怎么交流啊?
好,那么我们定好协议,本通电话我们全部采用中文,这样就可以正常交流了对吧?
这就是协议
一句话概括, 联网软件,客户端和服务端通过约定好的协议用封包来进行通信.


2.收发包
上面了解了什么是封包协议,我们来看下什么是收发包
网络游戏和单机游戏的区别就在于时刻要和服务器进行通信,也就是收发包.我们发给服务器的叫做发包, 我们收到服务器发给我们的叫做收包,
当然这是相当于我们而言.反之一样.
来一个简单的例子:
我们进入游戏说一句:你好! 为什么别的玩家可以看到?
通过这个流程我们就会了解收发包以及服务器的作用.
首先我们发送要和周围人说你好的封包给服务器,
服务器收到我们的封包以后, 一般会给我们回一个封包,说OK没问题,当然也可能高冷的不回啊.
然后服务器会执行代码判断我周围都有哪些玩家,然后对这些玩家逐个发包
这些玩家收到服务器的封包以后,就会看到我们的喊话内容了.
了解了什么是收发包
我们就要知道调用什么函数来实现.
这里的三大快递公司
就是三个发包函数    send   sendto   WSASend 以及对应的  3个收包函数  recv recvfrom  WSARecv
用哪一组都是可以的.
例如 口袋西游是  send recv
幻想神域是   WSASend  WSARecv

3.心跳包
上面了解了封包协议,收发包,我们来看下什么是心跳包?
心跳包也是封包,只是一种比较特殊的封包.
他可以证明我们的客户端还活着,顾名思义,有心跳就是活着.
举个简单的例子:
2个人打电话, A: 喂在吗? B:... A:在吗? B....A:挂了.  多次没得到回应直接就挂断了.
心跳包也一样,当服务器给我们发包,我们没有回复的时候,服务器就有可能把我们强制踢下线. 当然也有可能我们定时主动发送
1-2次服务器可能会认为偶尔丢包,如果2个以上应该就会直接认为我们掉线,直接强制踢下线了.
心跳包有很多好处:
1.一定程度防止脱机外挂
2.掉线立刻下线, 比如以前的老游戏,电脑蓝屏关机了,由于没有自然下线, 心跳也特别少,人物可能还在上面很长一段时间,这是不安全的,比如传奇2
3.可以隐藏一些数据在心跳包中.


4.针对发包函数的保护方法
了解了封包的概念,我们发现发包函数非常重要,
监听了发包函数就相当于掌握了所有功能实现的方法,可以替代所有call.监听了收包函数就相当于掌握了所以数据信息.因为数据本质来源于服务器
同时通过调用关系我们还知道,可以通过发包函数返回到所有的功能函数.
这是连新手的都知道的2点,所以一定要进行防护

针对这2点我们可以做什么防护呢?
那么第一件事,当然是把这个函数给尽量的隐藏起来
有的时候我们会发现,三大发包函数都不断!
那么是不是这个游戏不用这3个函数发包呢?当然不是,我们只能用这三个发包函数发包,没有其他的方法。
那就是重新实现发包函数,自己重新写一个发包函数,不用系统提供的成品函数了。
说的简单点就是,代码还是这三个发包函数的代码,只是换了个位置,搬家了,不直接调用这3个函数了。
知道这个原理以后就很容易处理了

方法一
既然还是之前的代码,那么我们到他的更内层函数下断就可以了
既WSPSend,相当于用内层函数当特征码。
函数体内的虚函数

X64结构不一样,但是一样是虚函数进去 找到WSPSend

方法二
通过三个函数的特征码到对应模块中进行搜索,这里注意的是这个重新实现的发包函数,可能在原来的模块中ws2_32,也可能在游戏自己的某个模块中。
所以搜索的时候要注意.
特征码比如头部这一段

可能会有微小变化,所以我们要尝试
同时也可能搜索到多个位置,全部下断,测试即可.
总之两种方法思路是一致的,都是找原代码的特征而已。

对发包函数第二个保护方案就是加密
如果不加密,直接监听发包函数就可以获得所有的信息了.
比如直接hook send函数
例如WPE等简单工具就是hook的发包函数
所以必须进行加密
加密也一定要进行动态加密,就是同样的结果加密后内容是不同的.那么以上方法也就没有任何作用了.



5.对发包函数第三个保护方案就是线程发包
正常的游戏调用流程是
功能函数1---》功能函数2---》组包过程---》明文封包---》加密---》发包函数
所谓组包过程就是把功能函数的参数按照格式组成一个字节集
明文封包就是组装完成但是没有进行加密的封包
最后一步加密发送.

通过上面的调用关系,我们能看出来
这样只要找到发包函数,所以功能函数以及加密解密函数随意返回,随意分析
那怎么样避免呢?线程发包!

线程发包原理
就是说用2条线程来控制以上流程,让逆向者不能直接返回
第一条线程
功能函数1---》功能函数2---》组包---》明文封包---》封包写到某一个地址中
第二条线程
得到那个地址中的内容---》加密---》发包函数

当然两条线程分工不一定是严格这样写的,也可能明文封包在第二条线程中

这样的发包会有什么的特征呢?
1.无论什么功能,堆栈返回都是一样的,因为第二条线程的调用过程,什么功能都一样了
2.第二条线程由于不断循环,断的可能会比较频繁



6.线程发包跳出循环线程
先不管线程通信都有哪些方法,我们先来一个锻炼,然后我们再详细分析原理.

上面我们知道了线程发包的原理,那么这2条线程唯一的关联就是封包内容
所以我们直接追封包内容来源即可.就有线索从第二条线程返回到第一条线程了.
1.包内容地址如果是固定的,我们直接下断就能跳出去了,相当于用全局变量做线程之间通信
这里是变化的
那么我们追其来源

edi+2888 开始不发生变化了
根据我们的思路,要找变化的值来源, 那么我们在该地址上下写入断,

找到写入来源以后  我们看是否跳出了线程
发现并未跳出线程,还在原来的线程里.
2.那么我们还要继续追其来源

edx开始不变化了,对EDX下断

跳出了线程,我们可以通过这里下断,断到功能函数了
返回就是明文发包call
而这里就可以当成我们的"send"了

7.整理完全线程发包流程

1.跳出线程在这个位置,我们来整理下整体流程

线程1将ebp写入一个地址.
ebp 是会变的是动态申请的,存放的封包结构
这个地址是全局类对象指向封包结构的指针


线程2将线程1写入的  封包结构取出来
edi+2880就是全局类对象指向封包结构的指针
取出来给edx,我们依然写ebp  为了知道是线程1断出去的ebp
[[ebp]+8]   又写入  全局类型对象 +2888的位置

全局类对象+2888的位置 取出来给ebx
取出来的就是前面的   [[ebp]+8]  
[[ebp+8]+4]  就是是封包内容

8.验证发包内容

我们下断可以验证一下 里面的封包内容是否是最后发送的内容,这个必须验证,防止中间又有多次加密
如果不相同,我们还要在这里对封包下访问断,追踪他经历了什么
方法很简单:
我们同时在这个位置下断 和WSASend 下断
对比两个位置封包是否一样
分别下条件断
byte ptr[[[EBP+8]+4]] != 0x0F

喊话11对比

2B771F00  C2C70011
2B771F04  C0105E58
2B771F08  D805FBB8
2B771F0C  910B1805
2B771F10  6F043A08

$ ==>    >C2C70011
$+4      >C0105E58
$+8      >D805FBB8
$+C      >910B1805
$+10     >6F043A08
$+14     >404B0000
发现是一样的那么我们在这里继续分析即可

9.明文发包call 和锁定加密call

我们现在跳出的位置  其实就是相当于"send"
正常可以返回到各种功能call, 如果使用call的话,我们现在已经足够了
如果想自己加密自己send发送封包,那么我们还需要分析加密解密过程,分析加密算法.
返回一层层看看  是否有明文内容,喊话是最容易看到明文的位置
返回的第一个call里面就看到了明文


那么说明    从这个call的头部   到第二次跳出的位置  中间就有加密call
如果这层发现不了明文,我们继续返回
当然我们也可以从ebp 一句一句逆向来源也是可以的
这个地方同样需要条件断  byte ptr[[[esp]+4]]!=0f

那么这地方就是明文发包call
找到了明文发包call,我们可以直接调用或则调用更外层功能函数实现各种功能,这之前我们都已经讲过了,这节课我们想用更好的方法
就是找到加密函数,我们自己加密封包,然后通过发包函数发送


10.加密call
加密函数的位置我们已经锁定了,就是在返回的call到我们断的位置之间
那么可以进行分析了
从call 断下以后 F7单独执行即可

发现了加密calll
以及分析出来加密call的参数 

00B92266    2BF8            sub     edi, eax
00B92268    83C5 02         add     ebp, 2
00B9226B    55              push    ebp                              ; 加密的地址
00B9226C    83C3 02         add     ebx, 2
00B9226F    53              push    ebx                              ; 加密的地址
00B92270    83C7 FE         add     edi, -2
00B92273    8D46 54         lea     eax, dword ptr [esi+54]
00B92276    57              push    edi                              ; 加密的长度
00B92277    50              push    eax                              ; 秘钥 往上追  [[[[[00f84ba4]]+4]+0xC+8]]+54
00B92278    E8 83240000     call    00B94700                         ; 加密call
00B9227D    8B9E 80280000   mov     ebx, dword ptr [esi+2880]

全过程:
功能call参数进行组包,调用明文发包call, 明文发包call内部进行加密, 写入到一个全局类对象的属性中
线程2访问该属性,进行发包

11.偷功能
偷功能很容易就是把程序的汇编代码复制到我们的程序内进行使用
我们自己组包,自己加密,自己发送封包
好处是,彻底不走游戏的任何代码.

复制出来的汇编代码需要进行初步处理才能写到内联汇编中
1.常数全部要加上0x
2.如果有call 还要自己分析出来继续执行内容  否则还是要以来原有程序
3.mov  eax,[0x12345678] 类似这种容易错误的汇编代码也要转一下
4.跳转都标注出来
例如 jnz  12345678  他是要跳转到目的代码地址执行的,我们偷出来的代码已经不是原来的地址了
所以要通过标签修改跳转的地址。


我们把加密call的代码全部偷出来

push    ebp
push    ebx
push    esi
push    edi
mov     edi, dword ptr [esp+0x14]
mov     edx, dword ptr [esp+0x18]
mov     esi, dword ptr [esp+0x1C]
mov     ebp, dword ptr [esp+0x20]
xor     eax, eax
xor     ebx, ebx
cmp     edx, 0
je      Label1 =========================================
mov     al, byte ptr [edi]
mov     bl, byte ptr [edi+4]
add     edi, 8
lea     ecx, dword ptr [esi+edx]
sub     ebp, esi
mov     dword ptr [esp+0x18], ecx
inc     al
cmp     dword ptr [edi+0x100], -1
je      Label2================================================
mov     ecx, dword ptr [edi+eax*4]
and     edx, 0xFFFFFFFC
 je      Label3===============================================
lea     edx, dword ptr [esi+edx-4]
mov     dword ptr [esp+0x1C], edx
mov     dword ptr [esp+0x20], ebp
 
 
Label4:
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
mov     ecx, dword ptr [edi+eax*4]
mov     ebp, dword ptr [edi+edx*4]
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
ror     ebp, 8
mov     ecx, dword ptr [edi+eax*4]
or      ebp, dword ptr [edi+edx*4]
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
ror     ebp, 8
mov     ecx, dword ptr [edi+eax*4]
or      ebp, dword ptr [edi+edx*4]
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
ror     ebp, 8
mov     ecx, dword ptr [esp+0x20]
or      ebp, dword ptr [edi+edx*4]
ror     ebp, 8
xor     ebp, dword ptr [esi]
cmp     esi, dword ptr [esp+0x1C]
mov     dword ptr [ecx+esi], ebp
lea     esi, dword ptr [esi+4]
mov     ecx, dword ptr [edi+eax*4]
jb      Label4============================================
cmp     esi, dword ptr [esp+0x18]
je      Label5===================================
mov     ebp, dword ptr [esp+0x20]
 
 
Label3:
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
 inc     al
and     edx, 0x0FF
mov     edx, dword ptr [edi+edx*4]
xor     dl, byte ptr [esi]
lea     esi, dword ptr [esi+1]
mov     ecx, dword ptr [edi+eax*4]
cmp     esi, dword ptr [esp+0x18]
mov     byte ptr [ebp+esi-1], dl
jb      Label3==========================================
jmp     Label5========================================
 
 
Label2:
 
movzx   ecx, byte ptr [edi+eax]
 
Label6:
add     bl, cl
movzx   edx, byte ptr [edi+ebx]
mov     byte ptr [edi+ebx], cl
mov     byte ptr [edi+eax], dl
add     dl, cl
movzx   edx, byte ptr [edi+edx]
add     al, 1
xor     dl, byte ptr [esi]
 lea     esi, dword ptr [esi+1]
movzx   ecx, byte ptr [edi+eax]
cmp     esi, dword ptr [esp+0x18]
mov     byte ptr [ebp+esi-1], dl
jb      Label6=============================================
Label5:
dec     al
mov     byte ptr [edi-4], bl
mov     byte ptr [edi-8], al
 
Label1:
 
pop     edi
pop     esi
pop     ebx
pop     ebp
retn


最终代码

__declspec(naked) void 加密call(DWORD 秘钥,DWORD 加密长度,DWORD 加密地址,DWORD 加密地址2)
{
 
 
__asm
{
push    ebp
push    ebx
push    esi
push    edi
mov     edi, dword ptr [esp+0x14]
mov     edx, dword ptr [esp+0x18]
mov     esi, dword ptr [esp+0x1C]
mov     ebp, dword ptr [esp+0x20]
xor     eax, eax
xor     ebx, ebx
cmp     edx, 0
je      Label1
mov     al, byte ptr [edi]
mov     bl, byte ptr [edi+4]
add     edi, 8
lea     ecx, dword ptr [esi+edx]
sub     ebp, esi
mov     dword ptr [esp+0x18], ecx
inc     al
cmp     dword ptr [edi+0x100], -1
je      Label2
mov     ecx, dword ptr [edi+eax*4]
and     edx, 0xFFFFFFFC
 je      Label3
lea     edx, dword ptr [esi+edx-4]
mov     dword ptr [esp+0x1C], edx
mov     dword ptr [esp+0x20], ebp
 
 
Label4:
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
mov     ecx, dword ptr [edi+eax*4]
mov     ebp, dword ptr [edi+edx*4]
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
ror     ebp, 8
mov     ecx, dword ptr [edi+eax*4]
or      ebp, dword ptr [edi+edx*4]
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
ror     ebp, 8
mov     ecx, dword ptr [edi+eax*4]
or      ebp, dword ptr [edi+edx*4]
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
inc     al
and     edx, 0x0FF
ror     ebp, 8
mov     ecx, dword ptr [esp+0x20]
or      ebp, dword ptr [edi+edx*4]
ror     ebp, 8
xor     ebp, dword ptr [esi]
cmp     esi, dword ptr [esp+0x1C]
mov     dword ptr [ecx+esi], ebp
lea     esi, dword ptr [esi+4]
mov     ecx, dword ptr [edi+eax*4]
jb      Label4
cmp     esi, dword ptr [esp+0x18]
je      Label5
mov     ebp, dword ptr [esp+0x20]
 
 
Label3:
add     bl, cl
mov     edx, dword ptr [edi+ebx*4]
mov     dword ptr [edi+ebx*4], ecx
mov     dword ptr [edi+eax*4], edx
add     edx, ecx
 inc     al
and     edx, 0x0FF
mov     edx, dword ptr [edi+edx*4]
xor     dl, byte ptr [esi]
lea     esi, dword ptr [esi+1]
mov     ecx, dword ptr [edi+eax*4]
cmp     esi, dword ptr [esp+0x18]
mov     byte ptr [ebp+esi-1], dl
jb      Label3
jmp     Label5
 
 
Label2:
 
movzx   ecx, byte ptr [edi+eax]
 
Label6:
add     bl, cl
movzx   edx, byte ptr [edi+ebx]
mov     byte ptr [edi+ebx], cl
mov     byte ptr [edi+eax], dl
add     dl, cl
movzx   edx, byte ptr [edi+edx]
add     al, 1
xor     dl, byte ptr [esi]
 lea     esi, dword ptr [esi+1]
movzx   ecx, byte ptr [edi+eax]
cmp     esi, dword ptr [esp+0x18]
mov     byte ptr [ebp+esi-1], dl
jb      Label6
Label5:
dec     al
mov     byte ptr [edi-4], bl
mov     byte ptr [edi-8], al
 
Label1:
 
pop     edi
pop     esi
pop     ebx
pop     ebp
retn
 
       }
 
}


12.不走游戏代码自己发送封包
我们简单分析一个喊话封包,开始自己调用不走任何游戏代码
send头文件
#include "winsock.h"
有问题记得加上如下代码
#pragma comment(lib,"ws2_32.lib")

void HXSYDialog::OnBnClickedButton16()
{
 
 
byte a[100]  = {0x11,0x00,0x7E,0x00,0x00,0x00,0x00,0x02,0x00,0x31,0x31,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x60,0xA8,0x6C};
DWORD 包长 = 0x13;
DWORD 包地址 = (DWORD)a;
DWORD 加密地址 = 包地址 + 2;
DWORD 加密长度 = 包长 - 2;
DWORD 秘钥 = 0;
__asm
{
 
mov ecx,0x00f84ba4
        mov ecx,[ecx]
        mov ecx,[ecx]
        mov ecx,[ecx+0x4]
        mov ecx,[ecx+0x14]
        mov ecx,[ecx]
        lea ecx,[ecx+0x54]
mov 秘钥,ecx
 
}
 
加密call(秘钥,加密长度,加密地址,加密地址);
 
 
HWND 窗口句柄 =FindWindowA("Lapis Network Class",0);
DWORD A = GetWindowLongW(窗口句柄,-21);
DWORD S =*(DWORD*)(A+0x38);
 
send(S,(const char*)包地址,包长,0);
 
 
// TODO: 在此添加控件通知处理程序代码
}

我们分析几个明文包  ,然后调用测试

13.收包

收包函数recv,recvfrom, WSARecv
(收包的参数包地址和长度  是准备接受的包地址  和最大包长)
这是必然的,因为调用前是不可能知道收到的内容和具体长度的,只有执行完毕才会获得

recv 的实际包长 在返回值eax

WSARecv 在第四个参数

14.粘包
我们发现断的时间越长 收包越大 原因很简单 因为可能沾包
当我们线程停住的时候,服务器依然在给我们发包,这个时候就会一起接收到
那么停住的时间越长,包就粘的越长.
每个独立的封包都有很明显的划分方法,所以拆包并不难

15.明文收包和解密call
收包我们收到的肯定也是服务器发给我们的加密封包
加密封包经过解密处理,把里面的数据写入到对应内存位置,这样我们就在界面上显示相应的反馈了.

明文收包和明文发包方向是反的
要找去哪里了,所以是下访问断追其去向

我们发现   lpbuffers  +4里的包地址  是固定的, 是否固定其实无所谓
那么我们想追解密函数 就要对  他进行访问断
当然 通过我们自己喊话等方式 让其断下  

2个拷贝的位置都可以
再对拷贝的地址下访问断

返回就是解密call
同时也是明文收包的位置了

然后我们发现    加密和解密是同一个函数
加密和解密是一个可逆的过程
正常我们其实直接搜索call 就可以找到明文收包的位置了 

 

Socket 收发内部拆包封包函数 根据缓存大小批次发送和接收,内部有自己的缓冲区 阅读详情

相关推荐

某传奇手游封包和数据分析

android逆向传奇手游,解密游戏脚本,抓取游戏封包,lua脚本加密解密。

kfyzjd2008的博客 1万+

任鸟飞逆向C++高级篇

【课程简介】本课程为任鸟飞逆向C++高级篇,注重在逆向中运用的技巧和思维逻辑,掌握后相关工具与手法可以熟练运用,在反汇编的世界里如鱼得水。 本套课程不只是一套深入学习C++的课程,更是一套深入学习汇编逆向课程、外挂与反外挂、软件安全的课程。 逆向思路技术随笔,请关注我的优快云博客:https://blog.youkuaiyun.com/qq_36553941 欢迎大家来学习交流,活动折扣咨询等请在博客私聊我。 PS: 课程中工具包、源码、课件请关注第一章的第一节的随课课件,工欲望善其事,必先利其器! 【学前预备知识】任鸟飞逆向C++系列课程是一条精心安排为掌握汇编逆向、外挂与反外挂、软件安全以及软件编程的学习路线,包括但不限于 基础篇、进阶篇、高级篇(本篇)、实战篇等,所以为保证您能学有所成请在学习本篇之前务必掌握基础篇与进阶篇!!! 基础篇优快云学院链接:https://edu.youkuaiyun.com/course/detail/30509进阶篇优快云学院链接:https://edu.youkuaiyun.com/course/detail/30680 【学员学成收获】认真学习并练习后将掌握:1、熟练游戏逆向思想与技巧。2、熟练通用辅助程序设计。3、熟练诸多逆向工具使用。4、熟练常见数据结构逆向分析。5、熟悉智能主线脚本编写。 

x86游戏逆向之实战游戏线程发包与普通发包的逆向

下面的演示以天龙八部私服和官服分别演示,因为天龙八部私服发包不频繁所以用来演示第一种方法,具体操作就是 进游戏有下send断点,然后对数据包下硬件访问断点,我们去游戏选怪,硬件断点断下后,删除我们下的断点,然后Ctrl+f9一层一层返回,每次返回的CALL都下个断点,然后让游戏跑起来,跑起来后我们再选怪,对断下的地方进行分析。既然是这样,那就说明,你往数据缓冲区写包数据的时候之前肯定会调用某个公共函数,那我们只要分析硬件断点断下来的时候堆栈里面有没有公共函数就行了,然后我们去最外层的公共函数分析。

彭于晏长沙分晏 3134

安卓模拟器封包抓取加解密

封包解密教程

xgbnapsua的博客 1万+

HookRecv 拦截输出

hookrecv拦截输出封包信息 不错的东西

【Docker】如何让docker容器正常使用nvidia显卡

描述了如何在docker容器中使用英伟达显卡的过程和问题解决方法。

NameLoadingFailed的博客 8372

游戏封包的加密与解密算法的破解

游戏封包的加密与解密算法的破解  破解封包的加密与解密算法是制作外挂的第一步,是外挂制作中最具技术含量的步骤,同样也是一个十分令人头痛的环节。如果加密与解密算法被成功地破解,那么外挂制作也就完成了一半。破解封包的加密与解密算法的行为同样属于黑客们其中之一的行为,因此我们可以在黑客网站里找到相应的资料,另外网络上也有专门的破解网站为大家提供信息。  在破解封包的加密与解密算法之前我们首先需要知道

sanshao27的专栏 2万+

ESP32实战:破解校园网WPA2-Enterprise认证的完整指南

本文详细介绍了如何使用ESP32开发板破解校园网WPA2-Enterprise认证的完整指南。通过硬件准备、环境搭建、核心代码实现及常见问题排查,帮助开发者解决企业级WiFi连接难题,特别适用于校园网环境下的物联网设备开发。

weixin_29194817的博客 457

网络通信封包解析

项目需求: 为游戏聊天功能制作增强功能,能够使用户在脱离游戏界面的情况下使用窗口化助手进行聊天,能够设置自动回复,记录关键聊天记录,自动说话等 游戏聊天功能本身比较不容易找到切入点,类似这种不容易找到切入点的功能,我们都可以通过解析网络游戏的通信系统,来找到切入点,另外一个软件或者网络的通信系统是一个程序的核心命脉,全面解读通信系统有助于我们二次开发 首先是网络通信系统的解读和还原 应用程序网络通信的经典流程 组织数据-> 加密数据 -> 发送数据 接收数据 -&gt...

m0_55875295的博客 962

从零到一:在RK3588 Android12上实战RTL8723DU WiFi蓝牙双模驱动移植

本文详细介绍了在RK3588 Android12系统上实战RTL8723DU WiFi蓝牙双模驱动移植的全过程。从驱动源码获取与修改、系统级集成与编译,到调试与性能优化,提供了完整的解决方案。特别针对USB接口适配、电源管理和蓝牙共存等关键问题给出了具体代码示例,帮助开发者快速完成驱动适配并提升设备稳定性。

weixin_28703489的博客 326

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1162

新人的游戏逆向安全追数据找CALL学习笔记

题目是新手笔记,大佬别看了. QQ2222112176一起交流学习 最重要的第一点,一定要懂正向,了解数据结构,脑中构思功能间的调用关系. 比如打怪功能.,点击怪物之后触发的功能调用可能如下 鼠标点击CALL { ..判断点的什么东西call { ....选中怪物call { ......走路call { ..........攻击call { 技能CALL { ... ... } } } ...

qq_41853215的博客 4053

告别Win11睡眠假死:深入解析Modern Standby S0与S3冲突及注册表修复方案

本文深入解析了Windows 11中Modern Standby(S0)与传统睡眠(S3)模式的冲突,该冲突是导致电脑睡眠后出现假死、断网等问题的根源。文章提供了通过修改注册表键值(PlatformAoAcOverride)强制启用稳定S3睡眠的终极修复方案,并附有详细诊断步骤与避坑指南,帮助用户彻底解决睡眠故障。

ol789012的博客 823

WPE详细教程三

关于滤镜  经过前面的讲解,大家该知道封包制作外挂的原理了,这里再深入讲解一点,作为封包,按道理只能修改封包,达到修改游戏的目的,其实,如果我们能更广泛地想一想,如果我们能分析封包,其实是可以制作出很强大的功能的,当然,如果让WPE分析封包,能达到的功能是有限的,首先是不能进行详尽的分析,如果可以的话,那么就应该能完成任何功能,想一想,网络游戏的工作原理,从服务器发一个封包到客户电脑,然后

z40144256的专栏 7267

避坑指南:Qt5.14.2 ARM交叉编译中那些你可能遇到的‘坑’及解决方案

本文深度解析了Qt 5.14.2在ARM架构上进行交叉编译的完整流程与常见难题。重点阐述了如何精准匹配交叉编译器与目标板环境、正确配置sysroot以及使用configure参数的艺术,并针对编译过程中的头文件缺失、链接错误等典型“坑”提供了经过验证的解决方案,旨在帮助开发者成功构建适用于嵌入式设备的Qt运行时库。

weixin_29279101的博客 354

PLC的模糊PID控制

模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分,小车通过传感器采集赛道信息,PLC通过温度传感器获取炉内温度,确定当前实际温度和设定目标值的偏差e(error), e=setpoint-input以及偏差的变化ec(当前偏差-上次偏差),根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数 其次我们需要对这2个参数进行模糊化,e 、 ec 这里我对e进行举例,两个输入的标准化范围都在 [-1,1] 范围内。模糊逻辑控制器还产生范围 [-1,1] 内的归一化输出。 博

RXXW_Dor的博客 1万+

国服游戏封包解密-外挂制作全过程

[软件]国服游戏-路尼亚战记 [工具]OD,Wep,以及其它的一些文本工具 [目的]研究游戏保护技术,深论协议级分析。 意在抛砖引玉,抵制游戏外挂。我会在每个分析点做出一些保护上的思考。 开始正文。 一个多月前,有看过一些游戏,DNF,路尼亚战记。他们大概是属于那种靠操作,连招一张地图一张地图那种游戏。DNF是由腾迅公司代理的,自己做了点不强的小保护,但是还是被别人开发出了外

liujiayu2的专栏 3万+

EPLAN 电气制图(六):电机正反转副勾主电路绘制

【插入】→【设备】→选择 “SIE.3RV2011-1AA15”(Q1)和 “SIE.1TL0001-1DB3”(M1),放置于图纸左侧。生成端子排 X3:【端子排导航器】→新建编号 “1-20”,部件 “PXC.3211814”,放置于电机上方,功能文本标注 “电机端子”。属性设置:双击结构盒,在 “显示设备标识符” 中输入位置代号(如 “+ 柜外”),并在 “格式” 选项卡中调整线型与颜色。实用技巧:勾选【选项】→【设置】→【图形的编辑】中的 “绘制带有空白区域的结构盒”,可使元件布局更清晰。

电工 2031

recv和明文收包分析

我们喊18个字节,例如“123456789123456789 ” 收包长度必然大于0x10,小于多少我们可以尝试,可以尝试0x30,0x50。我们只要对加密包下访问断,就可以找到解密的位置,当然可能不只一次解密或则拷贝,一追到底便是。然后下断,另外的号立刻喊话,看收到的封包长度,可以多次试验确认。那么证明recv是真正的收包函数,游戏没有重新实现该函数。由于收包比较频繁,基本下断就断,所以我们要下条件断。我们上2个号,让另外的一个号喊话,这个号进行收包。用这个解密函数就可以顺利解密了。

douluo998的博客 980

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

外挂学习之路(10)--- 穿透发包线程寻找call的通杀方法

就像我的 “外挂学习之路(1)--- bp send 回溯寻找关键call” 里描述的那样,无发包线程函数的游戏找call可以用bp send方法通杀,但是遇见好点的游戏(现在游戏一般都有发包线程),这种方法就不行了。今天就来说说网上看到的一篇文章,讨论如何穿透这个发包线程的。 ==========================================================

liujiayu2的专栏 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

收包函数调用流程

linux  内核数据报文接收流程 [70977.808241]  [] ? tcp_ack+0xd8a/0x1390  [70977.887555]  [] ? tcp_rcv_established+0x18a/0x6a0 [70977.978619]  [] ? tpacket_rcv+0x50/0x800 [70978.044437]  [] ? tcp_v4_do_rcv+0x1

already_skb的专栏 848

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

详谈HOOK API的技术

 详谈HOOK API的技术        上一帖     下一帖    查看完整版本页: [1] 麦克风http://www.51cto.com2006-4-6 03:05详谈HOOK API的技术HOOKAPI是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现。这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的AP

skyremember的专栏 787

网络收包流程-收包函数__netif_receive_skb的核心函数__netif_receive_skb_core(三)

调用关系:netif_receive_skb-->netif_receive_skb-->netif_receive_skb_internal(->__netif_receive_skb)-->__netif_receive_skb_core 1.netif_receive_skb_internal的实现 static int netif_receive_skb_int...

hzj_001的博客 6728

hook socket send recv的代码(zz)

(zzfrom)http://hack.gameres.com/showthread.asp?threadid=3379 hook socket send recv的代码(1) 最后更新:2005.07.17 本程序演示如何拦截一个程序对send、recv函数的调用, 并把send、recv函数的参数用 WM_COPYDATA 消息发送 到监视程序中。 附带演示如何拦截Di...

weixin_34210740的博客 687
上一篇: Excel小技巧记录
下一篇: PC端微信双开脚本
耳语吖
博客等级 码龄9年 215粉丝 158原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值