QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
) q+ s! l9 v0 p' j4 wimport socket
* t, |& P3 Y/ Rfrom myutil import *8 M  D/ A0 `2 W. k" r
from binascii import unhexlify as unhex
  j. l: y0 a  C, d) x" wfrom ctypes import *
& @6 |. X7 e1 v  l7 F( b7 S4 Zdll = cdll.LoadLibrary('mydll.dll')
0 ~- V6 O1 w! e' y, Sprint 'begin load mydll..'6 G& N  \* i4 U$ {% ~9 t& g
#key
9 Y1 V8 W+ f$ m% ^7 w% xkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'+ j3 D2 M$ t" C. Z, B+ G# y
#output MAC$ v' z, }+ G/ [) s- F* a
mac='\x00'*88 B  O( L+ Z! Y, h" P$ P( M1 N& k
data='\x00'*8
0 s* M/ C, a0 ~" E: N2 u$ u' h' r9 Ppkey=c_char_p()0 ~/ n. H. S4 R/ W  f4 A- v0 t
pdata=c_char_p()
. b& G  ], N9 d) `0 Rpmac=c_char_p()* _8 n9 V" ^; Z, t, j
pkey.value=key" w4 f' Q( V2 n
pdata.value=data
4 A: O% w) V/ l0 U* O) o! spmac.value=mac( W3 T" C" H& f0 F) b/ @, [' d
#pack1
3 z6 G9 B$ o( J4 N: d! gclass pack:
5 k9 V- [( p& D' V+ W0 v2 x   pass
  k3 \4 _* d) L% O' ?pk=pack()4 X2 e+ d3 H( V4 @2 [5 p' I
pk.len='00000032'
6 M( y+ g. v% u+ J' I6 Tpk.ID='0001'! P/ X7 S: J7 b  b
pk.slnum='00000004'7 H# R* l& o3 n( r$ x% [( h
pk.poscode='123456781234'% t0 T9 d. d! y1 m2 s  J" o
pk.rand='1122334455667788'1 s' x% X8 }8 l* r
pk.psam='313233343536'
' l2 y% A$ C' f& C4 {pk.kind='0000'
& y8 ^3 Q6 |/ h' x% ]pk.ver='000001', C4 a' M: N5 C3 j) ]
pk.time='20140805135601'
. d( C6 {) B8 |. E8 qpk.mac='06cc571e6d96e12d'+ V* f$ w7 o: O" l1 ^* P% _

5 b0 ]) A4 _3 S: Rdata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
9 d# W0 k+ x, Q' a1 e+ X% |#print_hex(data)/ ?5 V; k: @* S2 \" p7 o* G
pdata.value=data8 R5 J- t7 ]% r6 S
#cacl MAC2 c7 G4 |) O3 H% Q& C
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
2 k7 D0 k/ ?( |2 f9 z' W$ Rstro= pmac.value( D6 d* P/ P* ^. ]1 w3 d, H
strtemp=''
% I6 ?/ p+ c4 O! N( i6 xfor c in stro:
7 m. ?0 D, t' \    strtemp+="{0:02x}".format(ord(c))
: _. V6 L$ J  @#print strtemp% Z. s: @9 E  q8 L  J! s2 i8 }
pk.mac=strtemp
; M" D, w. d9 }$ l( x#data to send
/ r- w  `. I* nsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac0 M0 z/ r0 B* R
print  'send1 len is 0x%02x' %(len(sd)/2)
6 q! l* D. `, \/ v' vprint sd  G+ B3 I' _. P7 x; f
#pack2
1 p0 O& o' j* e& m% N9 G) zclass pack2:6 ]9 N' G. {) _. j; ?
   pass) ?* J, x* X  m
pk2=pack2()! o' S4 A4 n2 s! m. I) c
pk2.len='0000006E'
+ A) B: F" y6 G, m  \pk2.ID='0012'6 G7 S8 R# K( b
pk2.slnum='00000005'% k% D7 Z( ^9 m& K; B. K0 ?
pk2.fatCode='00'
+ f% ?, \1 m4 \& Opk2.cardASN='0000000000000000'
. F! P' k. c, @* n: T2 Spk2.cardType='00'4 d% H( s8 k. L+ }! r& J( U
pk2.userNO= '0000000000000000'
" m5 X* w: D# X) H5 j% }0 p) D; h
pk2.fileName1='00000000000000000000000000000015'& N( i! h: t- r& m+ O0 O+ G) v; [
pk2.dataLen1='00'
" `& b' Z8 Y. e/ N9 D" I1 t# C- Spk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
: Q8 Q0 ~+ }7 S  h# m: zpk2.fileName2='00000000000000000000000000000016'
, {7 t7 W3 {' w! i. Y' zpk2.dataLen2='00'
0 [' [  G: G4 y# V; gpk2.dataArea2='000003E800FFFF16'  W7 f9 ]! r8 S. W* e
pk2.mac='06cc571e6d96e12d'
" _: o3 _4 I. U0 Z$ P0 A/ o$ {6 I
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)
5 I6 Y' S3 n0 ?! x; r
& G2 Y: ]* O. g' R' s. r% Y0 N% ipdata.value=data2/ j# J% Q- r0 |$ r
#cacl MAC
/ s/ ~0 e- g; p! I/ x' ?dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac): \- s  {% v/ k) Q+ b8 f
stro= pmac.value% g. W+ t! q- [) k" J7 M! Y
strtemp=''
$ h. [3 y- [: J! U0 z, h% H' ofor c in stro:6 D, z. K0 b. e
    strtemp+="{0:02x}".format(ord(c))) n0 M' F' I9 L3 ?, u4 E' O
#print strtemp# R0 @6 y8 F) _& g
pk2.mac=strtemp. V$ V# Q9 B# N+ l/ U
#data to send
; e( p/ i( @: @2 `  P) f7 lsd2=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: O# Z& ?2 v, d2 O4 V6 g
' B; C6 M8 L3 B5 q3 A
print  'send2 len is 0x%02x' %(len(sd2)/2)
3 z3 h" c. l2 L! n$ iprint sd2# ~+ y* U; f' t" z

' c5 D% y6 ]' a' e2 K. p- T% J
$ \( b% U9 y0 q2 e! Q& f' |$ K#PORT="192.168.60.37"
" O: ?# N6 s" ]#PORT="localhost"9 k' X' J3 D! b% J
HOST, PORT = "192.168.51.28", 5800
" C; Z, {1 S* R9 B# Create a socket (SOCK_STREAM means a TCP socket)1 O- r$ x, j, @) x' E' C  R2 i  [
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)% S- G6 j& j8 k" o. D$ \  u
try:% ?; V1 Z$ u, a# s$ q, X+ z
    # Connect to server and send data
3 m# m# }5 X. V+ m    sock.connect((HOST, int(PORT))
2 L4 d* T: E' D" H, |! m3 w        #data= "123456789"! \, s6 v& q9 B+ W2 `/ h$ q
        #s = struct.pack('bbb',1,2,3)
9 [" n/ |0 F1 g/ J  G; O* ]9 ^1 U    sock.send(sd.decode('hex'))
# F8 M& ^' U3 C% F( S: P    print "Sent1 OK:"5 o& a$ A$ S) j2 X
    print sd
! c/ q" V& d6 G! t% A" I7 ]* r! Y4 @    # Receive data from the server and shut down
9 x" P: L) q' a* e" h    received = sock.recv(1024)
, I+ B5 }7 N6 n# P    print "Received:"- w0 s9 q8 {" k. O9 }0 T
    print_hex(received)/ b/ r" r- k! p, @; i, P( H$ p& k
    print  'received len is 0x%02x' %(len(received))* g7 y4 c: P4 P' h9 S9 V: I
    print  'received data analysis...', f/ C4 k1 Y$ P7 ~  y3 j
    re1=received[0:4]
5 e0 S# Y: o( C" w1 j+ V    print_hex(re1)
. X) h1 X  x3 c  q    re1=received[4:6]
- q' @8 [4 E! v0 B+ }    print_hex(re1)
# f0 T: Z% P8 H, _4 ~    re1=received[6:10]' ^. L% g' e8 [2 m
    print_hex(re1)
% b( }' |1 b3 E% [% u/ Z    re1=received[10:16]
+ g, S/ T3 a( |* k- m4 G2 z9 y+ F    print_hex(re1)
/ v* o* M& j  x% U8 A& O) z! m
! h1 [- V# h/ W$ M3 A. H* }$ K    #pack2 send  C5 i6 K  C/ [3 @  [- O7 W  v
    sock.send(sd2.decode('hex'))
5 s* G: V* c5 W    print "Sent2 OK:"
6 r! p  m1 ?+ j+ g' V$ m9 W' W    print sd20 _. p& i; w% n
    # Receive data from the server and shut down
) e/ ]: P, D1 |! m" o    received1 = sock.recv(1024)
/ o$ X8 ~) ?' U# w" E1 P  A    print "Received1:"
- `- O0 O9 L/ I# G) Z0 Q8 {. V    print_hex(received1)7 h+ I3 Q0 K: @/ n
    print  'received1 len is 0x%02x' %(len(received1))' _/ ]( r  {0 a2 ]: K/ ?' Y' X
$ X4 x/ G2 ~& E6 N, }2 Y/ z) R1 e) e
finally:3 `8 C4 h( o( M+ k8 y& U4 b: u
    sock.close()
& R, m" p, M+ b5 h# ~$ B; U# Q$ x! r% T* Z+ a$ p1 K
s=raw_input('press any key to continue...')0 _$ c- ?/ x$ x' W
& {2 U; g; }4 ~9 Z
% ?# m  `# j. Q0 w. R+ k: y
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-9-1 09:33 , Processed in 0.385955 second(s), 50 queries .

回顶部