QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-- K$ r+ @- Q/ r, k, F
import socket
/ S; `' F7 w& r' ~from myutil import *
; {+ P  C' C& H! @. Tfrom binascii import unhexlify as unhex
  E) |2 ~' t# R7 e" Wfrom ctypes import *
) H7 ]/ T; l; d8 sdll = cdll.LoadLibrary('mydll.dll')" g9 P; S: |5 Z
print 'begin load mydll..'
* {+ _" [0 F9 ?#key
" u% }9 G6 ~0 Bkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
/ p9 J1 G! [( t- H( }8 c#output MAC
0 l# P* ]2 N) Vmac='\x00'*8- `5 o" E6 H% f
data='\x00'*8& m8 d5 W' G4 p
pkey=c_char_p()
, O/ u, x& c# ?pdata=c_char_p(), a. ^0 U6 N6 }. c1 ?1 E$ @! r$ o
pmac=c_char_p()+ b, P) b: d* a# X
pkey.value=key
0 J1 l+ `9 \& L+ [7 K/ k9 r* Cpdata.value=data1 o) K8 z1 }# a
pmac.value=mac& t7 |7 J2 L5 z/ P' r
#pack1" d% l: H& H6 J  ~/ d4 R- ]- k6 c
class pack:
( G6 B7 _' l. R& z   pass9 r$ z* e2 r, O- Q, X  r
pk=pack()7 N$ m7 `( g- C8 v. ~% p
pk.len='00000032'
% e, T7 a" r5 H) Q, _' Apk.ID='0001'
# d( I+ ]$ F, u3 S1 g$ K; o1 spk.slnum='00000004'. ~- E) F3 D* X2 W
pk.poscode='123456781234'* s* a" I9 S& R- Z. S. ]* y
pk.rand='1122334455667788'
: s0 ^: ^; R$ zpk.psam='313233343536'
7 b4 b  t" w! b) t: V. Q, Fpk.kind='0000'
$ B2 Q3 h$ |6 p- j/ ]pk.ver='000001'8 i, d3 z% s. j' d" ^& M
pk.time='20140805135601'/ }7 p: x0 b8 F: I
pk.mac='06cc571e6d96e12d'
5 q- N$ {+ b) e- A' S, p' T1 |% a
2 k# a( w' ]$ z) B9 r2 g9 ydata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
# f9 p/ S4 n4 h  e/ ?8 J#print_hex(data)2 Z  k1 Q5 c6 h9 S% e' z( ~* M
pdata.value=data5 ^6 o9 E* T; \9 Y2 X) m+ D# B
#cacl MAC5 Q/ U/ \7 Z3 }3 p6 M* \
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
, |4 @  F2 M& Z) v  |+ Sstro= pmac.value
5 a- d6 ?, T1 W% u; e+ ~strtemp=''$ b: c( T  n! G/ w# k
for c in stro:
2 h, t& h# t% U1 O( y$ t3 N7 v    strtemp+="{0:02x}".format(ord(c))/ i- p( K( E$ O, ~" w
#print strtemp
0 Z: `3 E) V; T& h# ^9 N4 tpk.mac=strtemp
, m5 d$ b# t% _  x( @5 q; |* ?#data to send- [+ y2 E2 d! d( `# G& C. [
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
/ u- f2 B$ I9 i& K& q: Dprint  'send1 len is 0x%02x' %(len(sd)/2)
% M1 Z" w( v8 n% P2 D% hprint sd
+ ?7 K( d3 v) P# a7 J. P# z#pack26 I, X6 [- ]( O8 l8 ?0 K1 z
class pack2:
4 m& m' B) k5 ~+ Y   pass- a% `8 f! t( P  R/ U3 e/ g
pk2=pack2()
1 o# a$ h1 X* C3 B2 a) ipk2.len='0000006E'/ ?2 F5 S0 \/ V1 M6 O
pk2.ID='0012'/ f; A6 e1 v2 M# V6 N2 n' }* f
pk2.slnum='00000005'3 H( ]4 m8 J; R3 l3 `/ p) c
pk2.fatCode='00'* |8 |" w( @5 ]' v( a
pk2.cardASN='0000000000000000'2 ^: a; M, F- S) r0 \
pk2.cardType='00'
% X. t( R0 \" y$ s4 I5 r3 ~pk2.userNO= '0000000000000000'
& I) ?) s/ n. b+ a2 j" G8 u# N" |
pk2.fileName1='00000000000000000000000000000015'
9 A6 h  N; b5 f: B' lpk2.dataLen1='00'# V- p0 }$ y% A* t
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
& j2 A% j0 Q- K9 qpk2.fileName2='00000000000000000000000000000016'8 w5 h+ b- _( L2 n6 Q. {
pk2.dataLen2='00'
! a1 U/ M  J; G% I4 [/ K- Mpk2.dataArea2='000003E800FFFF16'
) Y! r4 l0 X- b# M5 x" t* Tpk2.mac='06cc571e6d96e12d', f) Z/ e' `# Q

+ p  P7 \/ v; L( Bdata2=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)* X, T- C5 f9 L
7 p9 D7 I8 S% ?1 u
pdata.value=data2
9 Y: h  q, B9 m4 f#cacl MAC5 S) _9 L/ n: k  A: B
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)8 @0 l! C+ g" H: s' r
stro= pmac.value1 u9 q- H! ]8 g. `, q" o( [7 G: T
strtemp=''7 }$ ]; Y$ M( ^
for c in stro:# R7 D, R2 w7 n$ A9 U$ w3 W! U! Q
    strtemp+="{0:02x}".format(ord(c)); [9 c$ P3 e2 G. P* D8 g
#print strtemp
0 O9 j# I: X$ Cpk2.mac=strtemp
5 f6 ]4 T7 y& O. [0 P+ x#data to send9 B" Y* F9 H) ^& I& m
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
& w5 N6 g0 Q+ u4 y7 S! |: ?% k% J/ w5 ~1 q; D& c
print  'send2 len is 0x%02x' %(len(sd2)/2). c! J$ {2 K- L! ]9 Q( w/ D7 Q) Y
print sd2
5 B  e$ o+ ?! [: v" B
' @( b* n/ S- D' }2 D" c6 Z  m$ M) s  o, Q  S
#PORT="192.168.60.37"
& f( S( m) X2 e#PORT="localhost"  |$ F" b9 g  k) o: L
HOST, PORT = "192.168.51.28", 5800: ^" j4 [* [6 G# K7 z
# Create a socket (SOCK_STREAM means a TCP socket)  J+ k7 R: m8 [" Q
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)) k7 d5 \4 ^- C) [7 E4 u6 F4 |
try:
8 g1 P6 ]: A7 Y7 J    # Connect to server and send data
$ q2 o6 h- W& x) T" s" _% C6 w. L    sock.connect((HOST, int(PORT))/ ~* F( T  U, y  {0 r" P
        #data= "123456789"; e: S8 j! W3 f6 P3 ^4 d/ o
        #s = struct.pack('bbb',1,2,3)
7 W/ \+ `5 N1 m0 F; b    sock.send(sd.decode('hex'))
) M+ _- r) [% U6 O3 @$ J    print "Sent1 OK:"
/ s; @: `' C8 ^: N: t' C    print sd1 e+ L* h$ [: P# z
    # Receive data from the server and shut down
  _8 _* `& _- o4 }    received = sock.recv(1024)# q( B/ ^- E) ]( p
    print "Received:"1 ]& {+ R& l+ W8 Q" N: p( l
    print_hex(received): y2 J4 O9 s- X( C0 {
    print  'received len is 0x%02x' %(len(received))- L7 ~. h7 S2 r3 z3 E* D1 B7 J9 m
    print  'received data analysis...'
! w5 f9 k; L8 n! |" H" d" o7 t    re1=received[0:4]  p, _. b, Z5 ^7 w
    print_hex(re1)! M8 [; \9 e% G# b+ g2 E" r
    re1=received[4:6]
) \. _/ m/ I  }% T' n2 o0 P    print_hex(re1)
: e2 _7 R6 e( i- ~! i8 G! L    re1=received[6:10]
7 p! S' C: B2 w' J2 c$ U% |    print_hex(re1)
, s- d* M+ B8 \5 _3 y' O  p    re1=received[10:16]
; u" Q2 a/ N+ b8 L7 ?6 E    print_hex(re1)
8 Q+ L% e, `2 ]
$ S. A" _' Q/ s: P    #pack2 send
- d5 r% k! o$ U, Z1 e( H    sock.send(sd2.decode('hex'))( S/ k0 r' v* U7 c  o0 H3 e% d
    print "Sent2 OK:"
  P( b: i, M2 x. _    print sd2
9 F4 k! @+ x6 _    # Receive data from the server and shut down, @! h' `) C) ?4 ?* a
    received1 = sock.recv(1024): P2 v) G3 @9 d6 f1 ?
    print "Received1:"( i" N: q4 Y3 z
    print_hex(received1)
* Z5 ?$ l# ^' ]- \3 A7 B    print  'received1 len is 0x%02x' %(len(received1)): |4 ]$ Z5 k) s+ F, p. x2 m
. b/ U  m( t6 t% G" h# t9 C; A
finally:  R  d, l( K2 e
    sock.close(), y0 q) P1 r8 E) e  ^8 ?3 M

# o! |- H" d# Y  `. cs=raw_input('press any key to continue...')2 t" g& c/ N+ @" V
9 l. j' B4 ?4 `0 v1 S

+ X0 M' b  p* x0 }2 J
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-7-18 03:55 , Processed in 0.383959 second(s), 50 queries .

回顶部