工具:ollydbg2.0 , Wireshark,
步骤:
1. 软件有加壳,要先脱壳,在这里就不说了,另外写了一篇
2. 用Wireshark抓包,发现用的是802.1X的EAP协议,eap具体的协议结构网上有很多的
宽带上网助手认证网络总共要发送3个数据包,1个发起连接请求的广播start包,1个identity包,在这里是用户名包,还有一个则是密码包,若认证成功则会返回success包,之后每隔一段时间服务器就发送request包,客户端回应identity包,直到用户下线或断网,下线则发生off包
3. start包和off包的构造:
OD载入脱壳后的程序,右键->search for->all intermodulelar call中找到pcap_sendpacket函数,双击来到相应的代码,向上找下就发现有4处调用这个函数,在每个函数的最开始都下断点,让程序运行起来,会发现断在第一个start包的构造函数处(因为源程序中有把状态写入日志的无关部分,所以代码有省略):
Address Hex dump Command Comments
00408AA0 /$ 56 PUSH ESI ; 发送start包和off包
00408AA1 |. 68 80000000 PUSH 80 ; /Arg1 = 80
00408AA6 |. E8 E3460000 CALL 0040D18E ; /mycrack.0040D18E
00408AB6 |> 53 PUSH EBX
00408AB7 |. 8A5C24 0C MOV BL,BYTE PTR SS:[ARG.1]
00408ABB |. 80FB 01 CMP BL,1
00408ABE |. 57 PUSH EDI
00408ABF |. 0F85 C0000000 JNE 00408B85 ; 是否是第一个请求包arg1==1?
…………………………………
00408B83 |. EB 10 JMP SHORT 00408B95
00408B85 |> A1 A0984100 MOV EAX,DWORD PTR DS:[4198A0] ; off包时候的服务器mac
00408B8A |. 8BD6 MOV EDX,ESI
00408B8C |. 8902 MOV DWORD PTR DS:[EDX],EAX
00408B8E |. 66:8B0D A4984 MOV CX,WORD PTR DS:[4198A4]
00408B95 |> 66:894A 04 MOV WORD PTR DS:[EDX+4],CX
00408B99 |> E8 428AFFFF CALL 004015E0 ; [mycrack.004015E0
00408B9E |. 80FB 01 CMP BL,1
00408BA1 |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
00408BA3 |. 8D56 06 LEA EDX,[ESI+6]
00408BA6 |. 890A MOV DWORD PTR DS:[EDX],ECX ; 写入本机的MAC地址
00408BA8 |. 66:8B40 04 MOV AX,WORD PTR DS:[EAX+4]
00408BAC |. 66:8942 04 MOV WORD PTR DS:[EDX+4],AX
00408BB0 |. C646 0C 88 MOV BYTE PTR DS:[ESI+0C],88 ; 写入88, 802.1X Authentication (0x888e)
00408BB4 |. C646 0D 8E MOV BYTE PTR DS:[ESI+0D],8E ; 写入8E
00408BB8 |. C646 0E 01 MOV BYTE PTR DS:[ESI+0E],1 ; 写入1 version
00408BBC |. 885E 0F MOV BYTE PTR DS:[ESI+0F],BL ; 写入type,start为1
00408BBF |. C646 10 00 MOV BYTE PTR DS:[ESI+10],0 ; 写入length 0
00408BC3 |. C646 11 00 MOV BYTE PTR DS:[ESI+11],0 ; 0
00408BC7 |. 75 04 JNE SHORT 00408BCD
00408BC9 |. 6A 00 PUSH 0
00408BCB |. EB 06 JMP SHORT 00408BD3
00408BCD |> E8 EE87FFFF CALL 004013C0 ; [mycrack.004013C0
00408BD2 |. 50 PUSH EAX
00408BD3 |> E8 74440000 CALL <JMP.&ws2_32.htonl> ; Jump to ws2_32.htonl
00408BD8 |. 8B3D 68654100 MOV EDI,DWORD PTR DS:[416568] ; ASCII "linkage"
00408BDE |. 8D4E 12 LEA ECX,[ESI+12]
00408BE1 |. 8BD1 MOV EDX,ECX
00408BE3 |. 893A MOV DWORD PTR DS:[EDX],EDI ; 填入link
00408BE5 |. 8B3D 6C654100 MOV EDI,DWORD PTR DS:[41656C] ; ASCII "age"
00408BEB |. 6A 1E PUSH 1E ; start包长度
00408BED |. 897A 04 MOV DWORD PTR DS:[EDX+4],EDI ; 填入age,linkage为trailer部分
00408BF0 |. 56 PUSH ESI ; start包地址
00408BF1 |. 8941 08 MOV DWORD PTR DS:[ECX+8],EAX
00408BF4 |. E8 17360000 CALL 0040C210 ;发送start
在这里离线包和start包差不多,就只是type处不同,start和off包的构造比较简单没有经过任何处理