首页
社区
课程
招聘
[原创]盖世豪侠明文包
发表于: 2016-12-5 13:40 5941

[原创]盖世豪侠明文包

2016-12-5 13:40
5941
首先确实是不是线程发包

首先来到3大发包函数分别下断。
(send sendto WSASend)

发现send会断下。

这个时候如何确定是否是线程发包呢。

调用堆栈:    主线程
地址       堆栈       函数过程 / 参数                       调用来自                      结构
0017FBA4   002EA8F7   gshx.002EA4B0                         gshx.002EA8F2                 0017FBA0
0017FBBC   002EAA42   gshx.002EA840                         gshx.002EAA3D                 0017FBB8
0017FC0C   002D4E57   gshx.002EAA10                         gshx.002D4E52                 0017FC08
0017FC4C   002D4472   ? gshx.002D4CD0                       gshx.002D446D                 0017FC48
0017FC9C   002C50F4   gshx.002D42E0                         gshx.002C50EF                 0017FC98

调用堆栈:    主线程
地址       堆栈       函数过程 / 参数                       调用来自                      结构
0017FBA4   002EA8F7   gshx.002EA4B0                         gshx.002EA8F2                 0017FBA0
0017FBBC   002EAA42   gshx.002EA840                         gshx.002EAA3D                 0017FBB8
0017FC0C   002D4E57   gshx.002EAA10                         gshx.002D4E52                 0017FC08
0017FC4C   002D4472   ? gshx.002D4CD0                       gshx.002D446D                 0017FC48
0017FC9C   002C50F4   gshx.002D42E0                         gshx.002C50EF                 0017FC98

发现任何动作的包都是来自于同样的位置。那么基本就可以确定不是主线程发包了。

下面来看下线程发包的模型

int main()
{

//创建发包的线程
std::thread th(&threadfuc);
chiyao();

}

//吃药函数
void chiyao()
{
        //遍历物品的id
       
        //组包
       
        //memcpy(全局指针,);

}

//线程发包函数
void threadfuc()
{
        while(1)
        {
        //从全局指针里面去读数据
        //调用游戏发包
        }
}

从上面的模型我们就知道了,肯定会在线程里面调动send的地方对全局指针进行访问。

在buff上面下硬件写入断点,来到这了。

66FA1F87    66:D4 1F        AAM 1F
66FA1F8A    FA              CLI
66FA1F8B    66:CC           INT3
66FA1F8D    1F              POP DS                                   ; 段寄存器更改
66FA1F8E    FA              CLI
66FA1F8F    66:C41F         LES BX,DWORD PTR DS:[EDI]                ; 段寄存器更改
66FA1F92    FA              CLI
66FA1F93    66:BC 1FFA      MOV SP,0FA1F
66FA1F97    66:B4 1F        MOV AH,1F
66FA1F9A    FA              CLI
66FA1F9B    66:AC           LODS BYTE PTR DS:[ESI]
66FA1F9D    1F              POP DS                                   ; 段寄存器更改
66FA1F9E    FA              CLI
66FA1F9F    66:A4           MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
66FA1FA1    1F              POP DS                                   ; 段寄存器更改
66FA1FA2    FA              CLI
66FA1FA3    66:8B448E E4    MOV AX,WORD PTR DS:[ESI+ECX*4-1C]
66FA1FA8    89448F E4       MOV DWORD PTR DS:[EDI+ECX*4-1C],EAX
66FA1FAC    8B448E E8       MOV EAX,DWORD PTR DS:[ESI+ECX*4-18]
66FA1FB0    89448F E8       MOV DWORD PTR DS:[EDI+ECX*4-18],EAX
66FA1FB4    8B448E EC       MOV EAX,DWORD PTR DS:[ESI+ECX*4-14]
66FA1FB8    89448F EC       MOV DWORD PTR DS:[EDI+ECX*4-14],EAX
66FA1FBC    8B448E F0       MOV EAX,DWORD PTR DS:[ESI+ECX*4-10]      ; 在这里断下了
66FA1FC0    89448F F0       MOV DWORD PTR DS:[EDI+ECX*4-10],EAX
66FA1FC4    8B448E F4       MOV EAX,DWORD PTR DS:[ESI+ECX*4-C]
66FA1FC8    89448F F4       MOV DWORD PTR DS:[EDI+ECX*4-C],EAX
66FA1FCC    8B448E F8       MOV EAX,DWORD PTR DS:[ESI+ECX*4-8]
66FA1FD0    89448F F8       MOV DWORD PTR DS:[EDI+ECX*4-8],EAX
66FA1FD4    8B448E FC       MOV EAX,DWORD PTR DS:[ESI+ECX*4-4]
66FA1FD8    89448F FC       MOV DWORD PTR DS:[EDI+ECX*4-4],EAX
66FA1FDC    8D048D 00000000 LEA EAX,DWORD PTR DS:[ECX*4]
66FA1FE3    03F0            ADD ESI,EAX
66FA1FE5    03F8            ADD EDI,EAX
66FA1FE7    FF2495 F01FFA66 JMP DWORD PTR DS:[EDX*4+66FA1FF0]
66FA1FEE    8BFF            MOV EDI,EDI
66FA1FF0    0020            ADD BYTE PTR DS:[EAX],AH
66FA1FF2    FA              CLI
66FA1FF3    66:0820         OR BYTE PTR DS:[EAX],AH
66FA1FF6    FA              CLI
66FA1FF7    66:14 20        ADC AL,20
66FA1FFA    FA              CLI
66FA1FFB    66:2820         SUB BYTE PTR DS:[EAX],AH
66FA1FFE    FA              CLI
66FA1FFF    66:8B45 08      MOV AX,WORD PTR SS:[EBP+8]
66FA2003    5E              POP ESI
66FA2004    5F              POP EDI
66FA2005    C9              LEAVE

上层就是明文包拷贝的位置了。

===============================================
明文包拷贝的位置

002E9F7E    CC              INT3
002E9F7F    CC              INT3
002E9F80    55              PUSH EBP
002E9F81    8BEC            MOV EBP,ESP
002E9F83    E8 B8EFFFFF     CALL gshx.002E8F40
002E9F88    85C0            TEST EAX,EAX
002E9F8A    75 51           JNZ SHORT gshx.002E9FDD
002E9F8C    3986 34000800   CMP DWORD PTR DS:[ESI+80034],EAX
002E9F92    74 06           JE SHORT gshx.002E9F9A
002E9F94    33C0            XOR EAX,EAX
002E9F96    5D              POP EBP
002E9F97    C2 0400         RETN 4
002E9F9A    8B56 08         MOV EDX,DWORD PTR DS:[ESI+8]
002E9F9D    8B4E 04         MOV ECX,DWORD PTR DS:[ESI+4]
002E9FA0    8D0411          LEA EAX,DWORD PTR DS:[ECX+EDX]
002E9FA3    3D 0F000400     CMP EAX,4000F
002E9FA8    73 07           JNB SHORT gshx.002E9FB1
002E9FAA    B9 0F000400     MOV ECX,4000F
002E9FAF    EB 05           JMP SHORT gshx.002E9FB6
002E9FB1    2D 0F000400     SUB EAX,4000F
002E9FB6    2BC8            SUB ECX,EAX
002E9FB8    3BCF            CMP ECX,EDI
002E9FBA  ^ 72 D8           JB SHORT gshx.002E9F94
002E9FBC    03D7            ADD EDX,EDI
002E9FBE    8D4430 0C       LEA EAX,DWORD PTR DS:[EAX+ESI+C]
002E9FC2    8956 08         MOV DWORD PTR DS:[ESI+8],EDX
002E9FC5    85C0            TEST EAX,EAX
002E9FC7  ^ 74 CB           JE SHORT gshx.002E9F94
002E9FC9    8B55 08         MOV EDX,DWORD PTR SS:[EBP+8]
002E9FCC    FF86 88000800   INC DWORD PTR DS:[ESI+80088]
002E9FD2    57              PUSH EDI
002E9FD3    52              PUSH EDX
002E9FD4    50              PUSH EAX
002E9FD5    E8 F8F40A00     CALL <JMP.&MSVCR100.memcpy>              ; 明文包位置
002E9FDA    83C4 0C         ADD ESP,0C
002E9FDD    8BC7            MOV EAX,EDI
002E9FDF    5D              POP EBP
002E9FE0    C2 0400         RETN 4

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 30
活跃值: (1312)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
能改就好。
2016-12-5 15:45
0
雪    币: 30
活跃值: (750)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
新手 不要打击别人
2016-12-5 16:10
0
雪    币: 76
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
线程发包你不拷贝进去的吧
2016-12-5 18:56
0
雪    币: 76
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
00A69B73  |> /8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
00A69B76  |. |64:890D 00000>MOV DWORD PTR FS:[0],ECX
00A69B7D  |. |59            POP ECX
00A69B7E  |. |5F            POP EDI
00A69B7F  |. |5E            POP ESI
00A69B80  |. |5B            POP EBX
00A69B81  |. |8B4D F0       MOV ECX,DWORD PTR SS:[EBP-10]
00A69B84  |. |33CD          XOR ECX,EBP
00A69B86  |. |E8 D1F30A00   CALL gshx.00B18F5C
00A69B8B  |. |8BE5          MOV ESP,EBP
00A69B8D  |. |5D            POP EBP
00A69B8E  |. |C3            RETN
00A69B8F  |> |A1 98D8BB00   MOV EAX,DWORD PTR DS:[BBD898]
00A69B94  |. |68 90F0CB00   PUSH gshx.00CBF090                                        ; 保存结果的
00A69B99  |. |53            PUSH EBX                                  ;明文
00A69B9A  |. |57            PUSH EDI                                  ;长度
00A69B9B  |. |50            PUSH EAX                                  ;key
00A69B9C  |. |FF15 F001B700 CALL DWORD PTR DS:[<&LIBEAY32.#477>]                      ;  加密算法?
00A69BA2  |. |83C4 10       ADD ESP,10
00A69BA5  |. |BB 90F0CB00   MOV EBX,gshx.00CBF090                                     ;  这句就是加密后的值
00A69BAA  |> |53            PUSH EBX
00A69BAB  |. |BE 4CE5C300   MOV ESI,gshx.00C3E54C
00A69BB0  |. |E8 CB030000   CALL gshx.00A69F80                                        ;  上面的那个函数
00A69BB5  |. |85C0          TEST EAX,EAX
00A69BB7  |.^|75 9E         JNZ SHORT gshx.00A69B57
00A69BB9  |. |837D C4 10    CMP DWORD PTR SS:[EBP-3C],10
00A69BBD  |. |C745 A4 480FB>MOV DWORD PTR SS:[EBP-5C],gshx.00BA0F48
00A69BC4  |. |72 0D         JB SHORT gshx.00A69BD3
00A69BC6  |. |8B4D B0       MOV ECX,DWORD PTR SS:[EBP-50]
00A69BC9  |. |51            PUSH ECX
00A69BCA  |. |FF15 EC03B700 CALL DWORD PTR DS:[<&MSVCR100.??3@YAXPAX@Z>]              ;  MSVCR100.??3@YAXPAX@Z
00A69BD0  |. |83C4 04       ADD ESP,4
00A69BD3  |> |B8 01000000   MOV EAX,1
00A69BD8  \.^\EB 99         JMP SHORT gshx.00A69B73
2016-12-5 18:58
0
雪    币: 27
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
围观围观,不要在意二楼逗比
2016-12-5 19:38
0
雪    币: 76
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
估计他就看懂了明文的memcpy,噗
2016-12-5 19:57
0
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
自古二楼...
2016-12-5 20:12
0
雪    币: 34
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=roothxl;1456065]00A69B73  |> /8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]
00A69B76  |. |64:890D 00000>MOV DWORD PTR FS:[0],ECX
00A69B7D  |. |59            POP ECX
00A6...[/QUOTE]

看出来是用的openssl的 RC4对称加密算法
2016-12-9 16:44
0
雪    币: 223
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
想请教下楼主哈,这种线程发包模型的话怎么去获得是否有包需要发送呢?
2016-12-9 23:38
0
雪    币: 142
活跃值: (121)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
牛X,我也跟过这个游戏,确实是RC4,不过你仅凭几句汇编就能看出是RC4,我是真羡慕您的能力
2016-12-10 07:22
0
雪    币: 76
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
可以跟到标记算法那,进去ida看下不就知道了
2016-12-12 20:49
0
雪    币: 76
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
一般这种游戏,基本上缓冲区下写入段就可以出来了,当然lol的那个是个例外,一直在里面写没用的地址
2016-12-12 20:51
0
雪    币: 291
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
怎么做到的,一眼看出加密算法,哪个点?
2016-12-20 18:35
0
游客
登录 | 注册 方可回帖
返回
//