QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
7 F9 z" \( Z6 f/ B* C1 Himport socket
$ g: ?2 J! N- O* k2 A  lfrom myutil import *
0 y7 ]2 {: F' Y) @9 ]; Qfrom binascii import unhexlify as unhex( ^- a2 S- S" M& Z. O! J- h
from ctypes import *
9 @6 W  V9 ?4 S& e! cdll = cdll.LoadLibrary('mydll.dll')
# @+ Q. ?9 s# k8 G6 m+ T% c9 Uprint 'begin load mydll..'
/ j; S& K0 P& D1 h  b#key
6 g. ]% s0 M7 c7 t( @key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
  C, S) y* [6 @/ g2 C* E% x0 [#output MAC2 {" O( g* o# Q1 V% P: c! d& @2 b
mac='\x00'*82 W2 d( }# j3 m- x) m5 H; `
data='\x00'*8
/ W7 R* ?3 P5 N, G( Zpkey=c_char_p()
$ ^* M/ L7 l* p( D# ?9 x/ @pdata=c_char_p()$ l! i* Z3 W/ G2 d  q
pmac=c_char_p()" S6 N' B3 G) o; O1 E6 N
pkey.value=key% T2 g- u: r+ ^9 d8 {7 N8 x" V; X
pdata.value=data. v4 r9 M3 B. t: `. V1 s- Z* W
pmac.value=mac% C( Q. ?: S- C  h: J
#pack1
) r3 w8 K- m7 J' W/ Tclass pack:8 s6 z1 a& O# m# @
   pass+ j! ~  D! k/ Q6 X
pk=pack()/ t9 {% G  \/ s9 Z/ h. G  O
pk.len='00000032'
( q8 t: n7 u$ [( w( h/ }pk.ID='0001'  }: H  h! g( ^9 n4 m3 x
pk.slnum='00000004'9 e+ L" {" p6 D% g
pk.poscode='123456781234'
& T+ ]; v( S. c: G. z# G3 |pk.rand='1122334455667788'& C  d1 ?$ f- Q; C% w
pk.psam='313233343536'
" C. ^$ a) a5 K* w: `$ C/ Vpk.kind='0000'1 H$ d% N9 i6 A: \+ V/ D
pk.ver='000001'
, ]* P  C) l3 R. \! z8 Dpk.time='20140805135601'! S) p% g, P. t7 M" O  j" u
pk.mac='06cc571e6d96e12d'
( z4 W( Q1 _7 w
# u7 o+ `5 e* g! C! y2 i9 l4 W. {9 zdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
" l7 H8 Q$ d9 i#print_hex(data)/ x" `3 V, c2 E0 ^
pdata.value=data7 T, A- h  F( J: ?
#cacl MAC1 Q- i0 c/ {& A, x0 t% ?( i0 t
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)  U; k4 y" O2 |
stro= pmac.value
; J0 w( s% z- V  Hstrtemp=''( _% l; L! g, Q& |; X0 \
for c in stro:
9 ^8 o. t; h" w0 l    strtemp+="{0:02x}".format(ord(c))
& q" u' _- H! ~- ?' o! v8 J* S#print strtemp- K# r; R7 h) N# p  J7 \
pk.mac=strtemp* w6 x9 A; ?5 ~) U* I5 n. I( J
#data to send
1 Y% S1 o$ e( W/ M, `8 [sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
. }+ V  H& u* G$ a+ M/ _' \. kprint  'send1 len is 0x%02x' %(len(sd)/2)
6 b2 L. P: U$ z8 F7 d- q. j$ e$ wprint sd
: J, s" [& H3 d8 f+ `7 G#pack2
7 r4 D  g8 i+ `8 Jclass pack2:7 L% S* v  B( q/ p
   pass1 P) [+ Q1 Y% w9 t: V& e: g& O2 P, U0 }
pk2=pack2()
! Q  f5 G/ @: M3 j* [% ypk2.len='0000006E'
' E1 t7 o; x. C+ W6 \+ M$ kpk2.ID='0012'
) p7 V! n$ ]3 l5 v8 F! B3 m% Spk2.slnum='00000005'
/ d, [$ G! I6 U: c. y* n' ~pk2.fatCode='00'( v4 K1 I1 q5 @+ \, @2 H
pk2.cardASN='0000000000000000'
, C. D1 n, w1 F; j* |3 @; C5 Jpk2.cardType='00'
* P% J- |' g" q9 s6 ppk2.userNO= '0000000000000000'* H, o+ y/ O* V9 C2 h4 N/ O; M
( M8 y5 H  [2 V8 y
pk2.fileName1='00000000000000000000000000000015'
  c5 u5 w0 K1 Kpk2.dataLen1='00'
, g2 X  `7 p3 d9 ?0 \% G6 {! ^pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
3 U; d2 L& z' P& S: `) `pk2.fileName2='00000000000000000000000000000016'
! e- l8 z; m1 k  e& V. hpk2.dataLen2='00'
8 l7 V" C" w# t7 Z6 M; r% ?+ ?1 Q# Y. Ppk2.dataArea2='000003E800FFFF16'$ @0 H+ y. a; s% ]/ j
pk2.mac='06cc571e6d96e12d'
3 f" N. E5 K& W: Y: P6 {. Y' H0 a1 n/ l" X1 `# `- Y
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)7 ~  O2 Q5 O2 R; I
9 \& t, e% X9 k! t' d; }! g' b
pdata.value=data2
, }0 k0 [" ^8 o; f6 o#cacl MAC7 d9 T: G5 v0 K' B! ?& ^
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)3 {: H0 F6 v+ |9 e
stro= pmac.value
1 J, y0 D4 U% Mstrtemp=''/ J; H- r& R7 f$ [9 l
for c in stro:
! I  y$ S0 N+ }/ _: S% ^8 I2 Y    strtemp+="{0:02x}".format(ord(c))5 s+ P. h" X% l) `
#print strtemp
% c9 _0 y8 v8 ^$ O1 S9 G7 `8 ?pk2.mac=strtemp
6 _" f" |( M( f, `#data to send5 e; X7 z. E" h  M5 h; P
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. @" N+ {  w9 b' r

9 X3 d8 t# w, g' @8 Y) Pprint  'send2 len is 0x%02x' %(len(sd2)/2)9 L3 l9 p" |0 i7 z
print sd29 z: f9 B/ {9 ?, x2 F5 r" q
  W. f! p7 u- l, W
. g. Z( b2 u. d* |6 S' i- B
#PORT="192.168.60.37"
& |  J/ r6 h& a3 D#PORT="localhost"
) i# P3 W* h1 ~HOST, PORT = "192.168.51.28", 5800
; i8 a# \6 t) O/ A# R# Create a socket (SOCK_STREAM means a TCP socket)
, |- d1 R3 m2 N& Z/ _5 `) csock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
& [! Y! G8 e6 g2 btry:# o; h/ R5 S& W) B! `. Z
    # Connect to server and send data# P# ^3 X6 v2 ^* M
    sock.connect((HOST, int(PORT))4 K% G6 B  L3 |  D' v: H; y
        #data= "123456789"5 O& W! z: E* @) i# V# x
        #s = struct.pack('bbb',1,2,3)8 y; O* x1 a" @5 h
    sock.send(sd.decode('hex'))
; K8 L" C2 n. ^, _    print "Sent1 OK:"
$ j' w& C6 @$ D% |    print sd( [7 h8 `+ R: z9 o& u7 b
    # Receive data from the server and shut down& q" G  u5 z! S* u) O; L* `+ A' ~: E
    received = sock.recv(1024)
$ y0 [. d; X$ @. w, P4 _6 D    print "Received:"
' ^2 G  D1 |  R( {8 D    print_hex(received)3 E- q" c  n# k, x( r
    print  'received len is 0x%02x' %(len(received))0 b' f  P8 Y/ Q1 q) `7 j+ |
    print  'received data analysis...'
2 r8 ~# n# |0 p    re1=received[0:4]8 F5 S2 k4 [2 z' z# y' d
    print_hex(re1)  y. z; v5 E; ]  S8 E
    re1=received[4:6]2 p) p  v" b4 v' O; ]: I% N3 y) y
    print_hex(re1)
4 r+ I; a1 \3 D2 D2 C$ ~7 m    re1=received[6:10]
8 m5 z# t4 w, q' o% D( K; T( a7 T    print_hex(re1)
' c. I' T' _+ d7 F1 t    re1=received[10:16]" V0 x+ {& C! i2 p: `6 k7 E
    print_hex(re1)% U/ |5 b% \, s/ p3 K
& ?+ L/ V7 g/ y# k5 \- Y4 r
    #pack2 send
. d/ H& _+ w* I7 d; u) q* ]% w    sock.send(sd2.decode('hex'))
. }6 |+ f0 x7 n# ]    print "Sent2 OK:"' i+ o( b# R& _3 ~
    print sd2, j) Y9 ]) F6 k% f6 L* U; W, k+ }% j
    # Receive data from the server and shut down
6 b6 W/ ^  P1 V7 b! n    received1 = sock.recv(1024)% D4 g. Y! q. e9 n8 u3 a2 S
    print "Received1:"; _1 T/ d$ Q, l; B4 F" H- d; e
    print_hex(received1)
% ]& A& F0 m- K. l$ k+ _    print  'received1 len is 0x%02x' %(len(received1))2 o9 r% O" Y; w* o$ w$ _  p
' t9 w+ s& t9 |! O# _9 d, @. U
finally:( n% N" W6 F! b  m; P, K
    sock.close()+ O1 g7 C! ?, b4 @
& j  h9 g. \% S4 F* g" a
s=raw_input('press any key to continue...')- u3 I* U6 D% K- g  c2 \. l3 h) l

4 G5 j: U; \2 w- j' z6 K7 a8 o
& a% F& `( 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-7-18 10:03 , Processed in 0.421362 second(s), 51 queries .

回顶部