QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2634|回复: 0
打印 上一主题 下一主题

报文拼接与加解密测试

[复制链接]
字体大小: 正常 放大

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-* j* \6 e  `  I5 {- j& l
import socket* \% m1 r/ l. V& X
from myutil import *
( `- E* F3 G2 Q' w4 b! Xfrom binascii import unhexlify as unhex
+ \0 R8 P  [" t2 d- Ofrom ctypes import *
8 E9 T; t, D; M* k! Tdll = cdll.LoadLibrary('mydll.dll')
0 v( o7 C/ e! p+ p- C9 |print 'begin load mydll..'2 G0 P, b; n7 j3 }3 F, R% S! y
#key9 `( w& H" J% }7 j/ w
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'9 U+ l6 V% l# K2 U. o2 t: \! c* L
#output MAC
$ Q+ a8 p4 q/ _( l; mmac='\x00'*8/ G* P" a0 b9 [6 I6 A0 f& P
data='\x00'*8
3 o. O+ K# ~' I# _' tpkey=c_char_p()
/ f7 Y5 K8 Y; j9 w+ ?9 opdata=c_char_p()
1 |8 D8 T% r$ U5 wpmac=c_char_p()
5 N" g+ w! ^; d  F; S; k4 I5 w& P$ }pkey.value=key
6 @: e5 L# X+ |) z) updata.value=data6 x% J* {( ?8 f, n/ r0 P
pmac.value=mac  z3 Q8 ^1 {8 W! l6 }0 \% E$ p
#pack11 R  w) R3 ^- l
class pack:
' H9 J" r* U% p+ g( O$ p   pass
& E4 v# ]$ ?+ H' ^4 C- E+ Dpk=pack()
1 p: W/ J, y6 `9 ^pk.len='00000032'
2 e8 s* U# a9 jpk.ID='0001'
7 R. Y% N% J$ Y* Y7 v7 Y6 l+ rpk.slnum='00000004'- t( R% `5 P. A9 Z( N! }0 s
pk.poscode='123456781234'7 X2 m, j( w  J0 {! q: P
pk.rand='1122334455667788'
. j" ?& u1 g/ fpk.psam='313233343536'
4 |9 p$ A7 l5 O+ g, \pk.kind='0000'
1 d: A; S3 {% n4 Rpk.ver='000001'( Z1 u) D' ^/ e' v. z8 I) W/ q
pk.time='20140805135601'/ U$ E, X; `* {' O6 G' f8 z
pk.mac='06cc571e6d96e12d'
) M0 f  ]2 ~# W. m9 E
3 C7 r# m# G% ^2 c( Y9 xdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)' R$ @! \4 z4 p8 [0 n$ o* V2 |4 |$ R
#print_hex(data)
8 E+ f6 Y: L, m% @pdata.value=data
. [3 W  s3 E8 N, h) }; p. D#cacl MAC
. A3 ~5 W6 \/ u# Ndll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
4 a& m- |' R* K4 D6 ]8 z' m' dstro= pmac.value; l3 j6 j1 I/ p$ x$ }
strtemp=''
/ V7 u) U. a! R, ?# qfor c in stro:$ M* N& {# |. I0 K2 t6 f
    strtemp+="{0:02x}".format(ord(c))
1 T8 q" B' A, x6 T$ G* {$ q+ a#print strtemp
, g( ^9 N/ S8 |( lpk.mac=strtemp
  ?9 ^  F. T1 H#data to send
; D- l# s9 }2 d3 q6 Vsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
9 i! }9 D* Z; k( R: ^; z  W" Rprint  'send1 len is 0x%02x' %(len(sd)/2); G- s+ ^. `" g$ Z6 J
print sd, b  R' S! h, c6 D8 d
#pack2- t/ n3 u- ~) w, E
class pack2:
# y# Y3 S( N# s1 x, K3 k( v   pass, o! f7 }8 |. k3 l3 S
pk2=pack2(). W8 ^) h: J3 o# \# Z2 m
pk2.len='0000006E'( C: S$ `% [/ W  H/ h
pk2.ID='0012'
1 D' w! g. F' i0 kpk2.slnum='00000005'6 l% P- k! p+ K6 ?" n) q: F1 k
pk2.fatCode='00'
5 O* x: Q: ~& J4 P0 h2 W7 apk2.cardASN='0000000000000000'  G8 ]. I7 U; S8 r' B1 _
pk2.cardType='00'5 {7 z" D- k5 ?. [( @0 j# m
pk2.userNO= '0000000000000000'
$ y# G& J8 X# j+ D3 G' q
4 L  M  D% D$ j& ^' X6 u& P( _8 Tpk2.fileName1='00000000000000000000000000000015'
4 d9 X$ I) Z* fpk2.dataLen1='00'
% N3 ^- O  s/ e3 X+ Ipk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'  g# J- s/ D! C' I
pk2.fileName2='00000000000000000000000000000016'1 J4 V4 }! g0 \" j: L0 {
pk2.dataLen2='00'
9 E1 T6 f6 N$ m$ t; s$ b1 @pk2.dataArea2='000003E800FFFF16'+ E' t2 T0 F) D; \4 A2 Q( C
pk2.mac='06cc571e6d96e12d'
4 H( ^( _: f8 s5 z$ b2 ^# W& F8 a! X6 @; A( k! I. d: z  N
data2=unhex(pk2.len+pk2.ID+pk2.slnum+pk2.fatCode+pk2.cardASN+pk2.cardType+pk2.userNO+pk2.fileName1+pk2.dataLen1+pk2.dataArea1+pk2.fileName2+pk2.dataLen2+pk2.dataArea2)3 `8 u4 R# N; X$ j) p

% B( \: G  j0 |9 ]9 p$ e! \4 dpdata.value=data2( Y; q1 c0 ?& W+ D
#cacl MAC
$ f8 e  k! X' W$ z, Ydll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
% X; t- l' ?+ s  o$ A0 w2 b/ W+ lstro= pmac.value9 C6 T0 V; ]2 h) h- b3 \; o8 f
strtemp=''* ]0 [. h0 i7 [# @4 V, k7 u. P
for c in stro:7 Z4 @0 n9 {( F& x. O2 z
    strtemp+="{0:02x}".format(ord(c))' ]4 \4 I% U0 [2 o
#print strtemp
3 m1 d; y5 `3 I. b9 v; Zpk2.mac=strtemp
+ T4 P; Z; X6 _- }- q$ h% g#data to send
& r  Y* |( v2 N3 q5 K' k+ \sd2=pk2.len+pk2.ID+pk2.slnum+pk2.fatCode+pk2.cardASN+pk2.cardType+pk2.userNO+pk2.fileName1+pk2.dataLen1+pk2.dataArea1+pk2.fileName2+pk2.dataLen2+pk2.dataArea2+pk2.mac
5 T! e2 i# v7 b7 ], W* l. ^: |& P! N9 {$ H" b7 V# `7 m! J6 T) {
print  'send2 len is 0x%02x' %(len(sd2)/2)
6 O) I: K  n% V! t- `print sd21 ?5 p- z/ `2 H& T- |' [% [/ l

6 U. J* J, M( N' ]+ h. d
( j+ H% ~, y* m. y#PORT="192.168.60.37"2 p$ g( E( C# S; f. L6 [
#PORT="localhost"
  b: S+ Q3 b8 [" J# nHOST, PORT = "192.168.51.28", 5800
7 R1 h7 R+ D3 }1 B. k# Create a socket (SOCK_STREAM means a TCP socket)" E/ y  Z: x- Z4 ]+ j" d* R5 @
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
9 D( f$ Z# t5 O4 D2 Gtry:) H: f7 A. l  u: L9 ^
    # Connect to server and send data
$ m+ a" z7 O7 K  K    sock.connect((HOST, int(PORT))
  i( Y. `% h' D: q2 U        #data= "123456789"
( t1 Z3 O9 C" |  z' E- X2 r* T        #s = struct.pack('bbb',1,2,3)
6 O' p. i3 N% e9 C    sock.send(sd.decode('hex'))
0 c7 [4 m% D' r, u4 r( i1 t    print "Sent1 OK:"9 p0 f/ [% @# z2 m1 d
    print sd' G3 t; a& {& G" |- C
    # Receive data from the server and shut down
$ Q6 {( C" ]! R4 W9 s, }: b/ d5 C    received = sock.recv(1024)
' ~# L: r7 j2 v: [7 t5 K/ T+ u    print "Received:"" r# y* o1 N6 [, E; P/ ?" R6 o  `( P
    print_hex(received)
9 b% g( b3 Z- ^0 p2 b    print  'received len is 0x%02x' %(len(received))) V1 U0 v8 C* C6 q' p
    print  'received data analysis...'8 |; N" Z' E( K  X! ?4 @
    re1=received[0:4]
; e, E) J. }) G2 R    print_hex(re1)* a% c) v+ D+ H2 V# c4 g" Q
    re1=received[4:6]# Q( X/ A. j) }5 b- I) S6 I& j: }
    print_hex(re1)8 U  P) k; }2 n# D( s8 T
    re1=received[6:10]
( a! o& l! x* p2 [6 w0 d2 g( r    print_hex(re1)
# a9 r# c+ G8 h    re1=received[10:16]  }; b! M: k: `' T) q( d
    print_hex(re1)
$ v& g' g4 y' R/ V3 U( ~7 F$ {1 {
    #pack2 send& s. b1 }' \4 F8 }5 s7 b# O
    sock.send(sd2.decode('hex'))/ Y5 d% L5 v) U% t( k; V0 R
    print "Sent2 OK:"( `9 R- H: Y, Z4 n! j9 D" g# G
    print sd2) v8 H1 y1 n! a
    # Receive data from the server and shut down; _4 `! h2 o5 h* H" z& e" J
    received1 = sock.recv(1024)
1 j, r, ], A- `$ h& Z  v& m: h# z    print "Received1:"
7 S/ M3 g. A- \6 |. i! r    print_hex(received1)
0 ~2 l2 e/ {3 T" W; l2 {7 e    print  'received1 len is 0x%02x' %(len(received1))
6 A5 u' Y" B7 `, ]  J( m) x7 H/ {. N% J5 N! k7 J! |
finally:: O1 _) X# _8 ~9 v/ X* @" r. ?
    sock.close()
0 k: G: }9 ~6 S: \3 A5 E0 Z* F9 i" |, O) p8 n8 d, L. G. \
s=raw_input('press any key to continue...')
0 K) }* E' y2 i7 `  z' Y8 g5 S. p

; @" s* A6 n( a) P/ _' A
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-20 05:43 , Processed in 0.393104 second(s), 50 queries .

回顶部