identify包的构造过程:

去除start包处的断点,重新开始程序,断在identify包的构造处

identify包的构造:

CPU Disasm

Address   Hex dump          Command                            Comments

00409144  |.  66:898424 820 MOV WORD PTR SS:[ESP+82],AX        ; 本机的MAC地址

0040914C  |.  C68424 840000 MOV BYTE PTR SS:[ESP+84],88

00409154  |.  C68424 850000 MOV BYTE PTR SS:[ESP+85],8E

0040915C  |.  C68424 870000 MOV BYTE PTR SS:[ESP+87],0

00409164  |.  C68424 860000 MOV BYTE PTR SS:[ESP+86],1

0040916C  |.  C68424 8A0000 MOV BYTE PTR SS:[ESP+8A],2

00409174  |.  E8 7781FFFF   CALL 004012F0                      ; [mycrack.004012F0

00409179  |.  888424 8B0000 MOV BYTE PTR SS:[ESP+8B],AL        ; 填入ID

00409180  |.  C68424 8E0000 MOV BYTE PTR SS:[ESP+8E],1

00409188  |.  E8 538BFFFF   CALL 00401CE0                      ; [mycrack.00401CE0, 获取账号

CPU Disasm

Address   Hex dump          Command                            Comments

004091B3  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWORD  ; 填入账号

004091B5  |.  8BCA          MOV ECX,EDX

004091B7  |.  83E1 03       AND ECX,00000003

004091BA  |.  83C5 05       ADD EBP,5

004091BD  |.  F3:A4         REP MOVS BYTE PTR ES:[EDI],BYTE PT

004091BF  |.  55            PUSH EBP

004091C0  |.  8D73 17       LEA ESI,[EBX+17]

004091C3  |.  E8 8A3E0000   CALL <JMP.&ws2_32.htons>           ; Jump to ws2_32.ntohs

004091C8  |.  55            PUSH EBP

004091C9  |.  66:898424 8C0 MOV WORD PTR SS:[ESP+8C],AX        ; 填入LENGTH

004091D1  |.  E8 7C3E0000   CALL <JMP.&ws2_32.htons>           ; Jump to ws2_32.ntohs

004091D6  |.  66:898424 8C0 MOV WORD PTR SS:[ESP+8C],AX        ; 填入LENGTH

004091DE  |.  0FB68424 8B00 MOVZX EAX,BYTE PTR SS:[ESP+8B]

……………………….

到这里就开始填写剩下的trailer了,整个过程是这样的

先在409214处调用CALL 00408F70,获得第一部分密钥(就这么叫先),总共4个字节,写入到构造的数据包0x2e处,再把常数00ea00ea(网络格式)填入到后面,然后把服务器发送过来的第一个包的0x23处开始的4个字节写入一个长度为0x38的数组,数字前40为的内容是字符串0到9,然后再把这个数组进行MD5加密,结果与一开始得到的那8个字节进行异或,异或得到的结果就是最后填入包中的数据。

00409211  |.  6A 00         PUSH 0

00409213  |.  50            PUSH EAX

00409214  |.  E8 57FDFFFF   CALL 00408F70                    ;关键CALL,跟入

00409219  |.  03F0          ADD ESI,EAX

0040921B  |.  8D8C24 940000 LEA ECX,[ESP+94]

00409222  |.  56            PUSH ESI

00409223  |.  51            PUSH ECX

00409224  |.  E8 E72F0000   CALL 0040C210                                ;发送包

跟入409214处的CALL后,单步步过前面一些记录日志的代码后来到这里:

00408FBF  |.  83C4 0C       ADD ESP,0C

00408FC2  |.  E8 C9F7FFFF   CALL 00408790                     ;获取密匙关键CALL,跟入

00408FC7  |.  8BF8          MOV EDI,EAX

00408FC9  |.  A1 64B64100   MOV EAX,DWORD PTR DS:[41B664]

00408FCE  |.  33DB          XOR EBX,EBX

00408FD0  |.  3BC3          CMP EAX,EBX

00408FD2  |.  75 06         JNE SHORT 00408FDA

00408FD4  |.  893D 64B64100 MOV DWORD PTR DS:[41B664],EDI

00408FDA  |>  E8 91F7FFFF   CALL 00408770

00408FDF  |.  57            PUSH EDI

00408FE0  |.  E8 67400000   CALL <JMP.&ws2_32.htonl>          ; Jump to ws2_32.htonl

00408FE5  |.  8946 08       MOV DWORD PTR DS:[ESI+8],EAX      ; 密匙1填入数据尾部

00408FE8  |.  E8 13F7FFFF   CALL 00408700                     ; [mycrack.00408700

00408FED  |.  E8 7EF7FFFF   CALL 00408770

00408FF2  |.  E8 09F7FFFF   CALL 00408700                     ; [mycrack.00408700

00408FF7  |.  68 EA00EA00   PUSH 0EA00EA                      ; 常数00ea00ea

00408FFC  |.  E8 4B400000   CALL <JMP.&ws2_32.htonl>          ; Jump to ws2_32.htonl

00409001  |.  8946 0C       MOV DWORD PTR DS:[ESI+0C],EAX

00409004  |.  33C0          XOR EAX,EAX

00409006  |.  885D CC       MOV BYTE PTR SS:[EBP-34],BL

00409009  |.  B9 1F000000   MOV ECX,1F

0040900E  |.  8D7D CD       LEA EDI,[EBP-33]

00409011  |.  F3:AB         REP STOS DWORD PTR ES:[EDI]

00409013  |.  66:AB         STOS WORD PTR ES:[EDI]

00409015  |.  AA            STOS BYTE PTR ES:[EDI]

00409016  |.  33D2          XOR EDX,EDX                       ; 清0后面填入包中

00409018  |.  33C0          XOR EAX,EAX

…….……….

0040903D  |.  8D49 00       LEA ECX,[ECX]

00409040  |>  8A88 F0984100 /MOV CL,BYTE PTR DS:[EAX+4198F0]  ; ASCII "0123456789012345678901234567890123456789"

00409046  |.  884C05 CC     |MOV BYTE PTR SS:[EAX+EBP-34],CL

0040904A  |.  40            |INC EAX

0040904B  |.  3ACB          |CMP CL,BL

0040904D  |.^ 75 F1         /JNE SHORT 00409040

0040904F  |.  B8 F0984100   MOV EAX,OFFSET mycrack.004198F0   ; ASCII "0123456789012345678901234567890123456789"

00409054  |.  8D50 01       LEA EDX,[EAX+1]

00409057  |>  8A08          /MOV CL,BYTE PTR DS:[EAX]

00409059  |.  40            |INC EAX

0040905A  |.  3ACB          |CMP CL,BL

0040905C  |.^ 75 F9         /JNE SHORT 00409057

0040905E  |.  2BC2          SUB EAX,EDX

00409060  |.  8BF8          MOV EDI,EAX

00409062  |.  E8 3981FFFF   CALL 004011A0                     ; [mycrack.004011A0

00409067  |.  50            PUSH EAX

00409068  |.  E8 DF3F0000   CALL <JMP.&ws2_32.htonl>          ; Jump to ws2_32.htonl

0040906D  |.  8B55 50       MOV EDX,DWORD PTR SS:[EBP+50]

00409070  |.  8D4C3D CC     LEA ECX,[EDI+EBP-34]

00409074  |.  8901          MOV DWORD PTR DS:[ECX],EAX

00409076  |.  8B45 54       MOV EAX,DWORD PTR SS:[EBP+54]     ; _第一个request返回包中0x23位的值填入这个包后4个字节

00409079  |.  8951 04       MOV DWORD PTR DS:[ECX+4],EDX

0040907C  |.  8B55 58       MOV EDX,DWORD PTR SS:[EBP+58]

0040907F  |.  8941 08       MOV DWORD PTR DS:[ECX+8],EAX

00409082  |.  8951 0C       MOV DWORD PTR DS:[ECX+0C],EDX

00409085  |.  E8 E6F6FFFF   CALL 00408770

0040908A  |.  83C7 10       ADD EDI,10

0040908D  |.  57            PUSH EDI                          ; /Arg3

0040908E  |.  8D45 CC       LEA EAX,[EBP-34]                  ; |

00409091  |.  50            PUSH EAX                          ; |Arg2

00409092  |.  8D4D 60       LEA ECX,[EBP+60]                  ; |

00409095  |.  51            PUSH ECX                          ; |Arg1

00409096  |.  E8 D5180000   CALL 0040A970                     ; MD5加密构造的包

0040909B  |.  8A4E 09       MOV CL,BYTE PTR DS:[ESI+9]        ; 异或密匙和MD5加密值,结果写入respone包中

0040909E  |.  8A45 61       MOV AL,BYTE PTR SS:[EBP+61]

004090A1  |.  8A5E 08       MOV BL,BYTE PTR DS:[ESI+8]

004090A4  |.  8A55 60       MOV DL,BYTE PTR SS:[EBP+60]

004090A7  |.  32C8          XOR CL,AL

004090A9  |.  8A46 0A       MOV AL,BYTE PTR DS:[ESI+0A]

004090AC  |.  884E 09       MOV BYTE PTR DS:[ESI+9],CL

004090AF  |.  8A4D 62       MOV CL,BYTE PTR SS:[EBP+62]

004090B2  |.  32C1          XOR AL,CL

004090B4  |.  8A4E 0C       MOV CL,BYTE PTR DS:[ESI+0C]

004090B7  |.  32DA          XOR BL,DL

004090B9  |.  8A55 63       MOV DL,BYTE PTR SS:[EBP+63]

004090BC  |.  8846 0A       MOV BYTE PTR DS:[ESI+0A],AL

004090BF  |.  8A45 64       MOV AL,BYTE PTR SS:[EBP+64]

004090C2  |.  32C8          XOR CL,AL

004090C4  |.  8A46 0D       MOV AL,BYTE PTR DS:[ESI+0D]

004090C7  |.  885E 08       MOV BYTE PTR DS:[ESI+8],BL

004090CA  |.  8A5E 0B       MOV BL,BYTE PTR DS:[ESI+0B]

004090CD  |.  884E 0C       MOV BYTE PTR DS:[ESI+0C],CL

004090D0  |.  8A4D 65       MOV CL,BYTE PTR SS:[EBP+65]

004090D3  |.  32DA          XOR BL,DL

004090D5  |.  8A55 66       MOV DL,BYTE PTR SS:[EBP+66]

004090D8  |.  32C1          XOR AL,CL

004090DA  |.  8A4E 0F       MOV CL,BYTE PTR DS:[ESI+0F]

004090DD  |.  885E 0B       MOV BYTE PTR DS:[ESI+0B],BL

004090E0  |.  8A5E 0E       MOV BL,BYTE PTR DS:[ESI+0E]

004090E3  |.  8846 0D       MOV BYTE PTR DS:[ESI+0D],AL

004090E6  |.  8A45 67       MOV AL,BYTE PTR SS:[EBP+67]

004090E9  |.  83C4 0C       ADD ESP,0C

004090EC  |.  32DA          XOR BL,DL

004090EE  |.  32C8          XOR CL,AL

004090F0  |.  884E 0F       MOV BYTE PTR DS:[ESI+0F],CL

004090F3  |.  8B4D 7C       MOV ECX,DWORD PTR SS:[EBP+7C]

004090F6  |.  885E 0E       MOV BYTE PTR DS:[ESI+0E],BL

004090F9  |.  5F            POP EDI

004090FA  |.  894E 10       MOV DWORD PTR DS:[ESI+10],ECX

004090FD  |.  5E            POP ESI

004090FE  |.  B8 14000000   MOV EAX,14

00409103  |.  5B            POP EBX

00409104  |.  83C5 70       ADD EBP,70

00409107  |.  8BE5          MOV ESP,EBP

00409109  |.  5D            POP EBP

0040910A  /.  C3            RETN

跟入00408FC2处的 CALL 00408790,单步后可以发现程序通过ReadFile把宽带上网助手自身读入到内存中,在ReadFile后的代码处:

00408832  |> /8B4424 14     MOV EAX,DWORD PTR SS:[ESP+14]

00408836  |.  50            PUSH EAX                                 ; /Arg2 => ARG.EBX

00408837  |.  56            PUSH ESI                                 ; |Arg1

00408838  |.  E8 F3FEFFFF   CALL 00408730                            ; /跟入这个CALL

0040883D  |.  83C4 08       ADD ESP,8

跟入408838的CALL,来到这里

00408730  /$  8B5424 08     MOV EDX,DWORD PTR SS:[ARG.2]             ; mycrack.00408730(guessed Arg1,Arg2)

00408734  |.  8B4C24 04     MOV ECX,DWORD PTR SS:[ARG.1]

00408738  |.  83C8 FF       OR EAX,FFFFFFFF

0040873B  |.  85D2          TEST EDX,EDX

0040873D  |.  74 21         JE SHORT 00408760

0040873F  |.  56            PUSH ESI

00408740  |.  57            PUSH EDI

00408741  |>  0FB639        /MOVZX EDI,BYTE PTR DS:[ECX]

00408744  |.  8BF0          |MOV ESI,EAX

00408746  |.  81E6 FF000000 |AND ESI,000000FF

0040874C  |.  33F7          |XOR ESI,EDI

0040874E  |.  8B3CB5 889441 |MOV EDI,DWORD PTR DS:[ESI*4+419488]

00408755  |.  C1E8 08       |SHR EAX,8

00408758  |.  33C7          |XOR EAX,EDI

0040875A  |.  41            |INC ECX

0040875B  |.  4A            |DEC EDX

0040875C  |.^ 75 E3         /JNE SHORT 00408741

0040875E  |.  5F            POP EDI

0040875F  |.  5E            POP ESI

00408760  |>  F7D0          NOT EAX

00408762  /.  C3            RETN

加密过程就是:

设*lp为文件指针,*hash为419488处的指针,length为文件长度,eax=0

Eax|=-1;

while(length!=0){

eax=(DWORD) ((eax&0xff)^(byte)*lp)*4+hash)^(eax>>8);

lp++;length--;

}

Result=~eax;

这里的result就是所得的结果,hash表附在后面。

现在一直返回,程序把密匙填入数据尾部后,再在00409096  CALL 0040A970 处用 MD5加密函数加密上面所提到的那个长度为0x38的数组,然后把结果(一个16个字节的数组的前8个字节)在0040909B后与上面的到的密钥(8字节)按字节进行异或运算,结果在写入包中,就得到了identify包

但是这里有点奇异的地方,既然那个密钥是通过程序的每个字节运算得到的,而上网宽带助手是经过脱壳的,内容和原来的肯定是不一样的,但是结果却是仍然可以顺利的通过认证(我们学校里是这样的……),难道是服务器根本就没有进行校验?我经过试验发现认证是通过trailer中的那个linkage字符串进行的,居然和前面的那8个加密字节无关,也就是说前面的过程全都是空架子,只要在trailer中填入linkage的即可,囧~~~

联创宽带上网助手协议的简单分析(二) :identify包的构造相关推荐

  1. 掘金15W沸点简单分析(二)

    一.数据预处理与入库 获取到了原始数据之后,下一步就是清洗入库. 1.1 数据模型 因为是简单分析,所以只获取话题.用户.消息三块内容.具体如下: class Pins(object):"& ...

  2. 关于手游网络协议的简单分析

    前言 大多数加密方案都假定可信的发送者和接收者会通过一个不可信的通道通信. 虽然假设发送者会故意尝试愚弄接收者有点荒谬,但这确实是摆在开发者面前的问题.有些玩家是不可信的, 更糟的是, 他们能够通过客 ...

  3. QUIC 协议的简单分析

    看到google 提交了http3 over QUIC 的标准化草案, 才发现2012年我在 UDP可靠传输那些事 https://blog.csdn.net/danscort2000/article ...

  4. xx助手主体实现简单分析

    前段时间写了关于天天酷跑游戏外挂的实现原理.文章链接:http://bbs.pediy.com/showthread.php?t=187948 这几天正好有时间看了下xx助手主体的实现原理,大致如下: ...

  5. android xmpp 语音,Android:Xmpp协议的简单分析

    概要 在IETF中,把IM协议分为四种协议: 1.IMPP(Instant Messaging And Presence Protocol) 2.PRIM(Presence And Instant M ...

  6. RTSP协议的一些分析(三)——简单的rtsp服务器的实现

    目录 一.简介 二.套接字的创建 三.解析请求 四.OPTIONS的响应 五.DESCRIBE的响应 六.SETUP的响应 七.PLAY的响应 八.源码 一.简介 RTSP服务器有两个部分组成,一个是 ...

  7. 助手的反叛——全面分析浏览器劫持的情况(转)

    一. 谁误导了浏览器 今天是大年初二,王先生家中来了许多客人,把平时埋头于工作的王先生弄了个手忙脚乱,由于客人带来的几个小孩子嚷嚷着要出去上网,王先生只好把寝室里的电脑让给了这一群孩子玩,好容易到了晚 ...

  8. modem (1)---手机主叫的信道流程与Modem Log简单分析

    手机主叫的信道流程与Modem Log简单分析 层三信令里看到建立RRCCMM层什么的到底是什么意思?建立这些层有什么用? 从协议栈的角度来说,RR属于接入层,而MM和CC都属于非接入层即NAS. R ...

  9. Linux TCP/IP网络协议栈:IP协议源码分析

    目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...

  10. 网络故障简单分析指导

    网络故障简单分析指导网络管理 网管  网络管理员每天都会遇到各种各样的问题,面对故障如何分析故障原因进行排故呢?本文列出了62种常见故障并给出了相应的分析和排故建议.     1. 故障现象:网络适配 ...

最新文章

  1. 基于Dockerfile构建新镜像
  2. Linux系统上怎么安装服务器管理软件Cockpit?
  3. javaweb开发后端常用技术_Web后端开发(11)——Session会话技术
  4. openlayers入门开发系列之地图属性查询篇
  5. CFtpFileFind FindFile卡住的问题
  6. [蓝桥杯][算法提高]和谐宿舍2(记忆化搜索)
  7. iOS UIDatePicker设置为中文的方法
  8. Ant Design Pro引入Echarts 报错Unexpected token
  9. TCPUDP测试工具的使用
  10. 微信公众号维护用服务器吗,微信公众号商城开发必须用服务器吗?
  11. Java编程学习指南(带学习经验)
  12. VS2003版本Jsoncpp的配置和使用
  13. MDIO总线简单介绍
  14. 8086/8088 CPU的段寻址方式,段地址和偏移地址
  15. [TF进阶] 卷积神经网络
  16. PC的足迹--多核时代《九》
  17. 前端高效开发必备的js库梳理,日常使用中会持续更新
  18. 利用百度地图Android定位SDK获取经纬度
  19. 深度学习 基础硬件CPU GPU知识笔记
  20. 开发工作流程_您应该了解的9个开发工作流程升级

热门文章

  1. ECharts数据可视化:入门、实战与进阶干货
  2. matlab滤波函数imfilter、生成掩模函数fspecial
  3. [计算机网络]七、IP地址规划和静态路由
  4. 年后跳槽高峰期,字节跳动面试题拿走不谢(含答案)
  5. 视频编解码之理论概述
  6. 西门子200PLC步进控制(入门)
  7. 计算机病毒教学评课,计算机病毒评课稿.pdf
  8. 数据库时间相减_sql中两个时间类型相减得到的值
  9. 关于短信猫死机的问题程序要如何解决
  10. 小程序引入阿里云图标