QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-$ p* z5 Z  x6 Z3 [! O# E8 P
import socket
. }7 N; z, F% }  z, b& ]1 c9 j- Nfrom myutil import *
" T  z% e9 h- P6 J" jfrom binascii import unhexlify as unhex/ ]2 a8 A4 }! p# j/ m3 ?4 c& F8 L1 ~
from ctypes import *
" ^- v% w* ?3 X5 _dll = cdll.LoadLibrary('mydll.dll')
, s& K  E& h" vprint 'begin load mydll..'
& J4 @; m8 \# w9 c; W$ q$ P$ C#key
1 x2 S- t) k: B& k! j+ {: zkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
% q6 |3 K# W4 v6 \6 Z$ E#output MAC
1 l4 p: d) K" C, e0 Cmac='\x00'*8% C( Q! j7 v0 w7 {' H
data='\x00'*8
2 w2 D! G" i: j# A! k# Rpkey=c_char_p()
* M4 K9 l; U4 \( g" }pdata=c_char_p()
( o) W( j: m. t; U8 y$ [3 X* upmac=c_char_p()* i+ t0 {9 w7 S$ c) P
pkey.value=key
* v: _% W; }& n2 L2 D5 Z2 zpdata.value=data5 u$ B" u1 t6 |8 {8 f( N
pmac.value=mac4 Z8 w7 l/ e, B& ~7 r
#pack10 z* v8 u6 R% r: j" @5 S$ C/ Q% R
class pack:2 f+ j! `9 F9 W* B; P+ O
   pass
5 T7 H0 c7 @  wpk=pack()
, R! H( d- X0 mpk.len='00000032'% h9 s% \' c1 T
pk.ID='0001'
$ Y+ A9 Z( O4 d  f  @pk.slnum='00000004'+ q( d2 @# w# ]- w- H4 a5 A5 }. Y
pk.poscode='123456781234'
! H9 ?! Q% P, u4 Fpk.rand='1122334455667788'  }& r) h) h: N( H, i0 b- l
pk.psam='313233343536'
6 ^/ L+ V% {; A( T; {+ K/ [pk.kind='0000': J: H' ^/ e: A5 j% P0 r
pk.ver='000001'! G  S. H8 u# k1 F9 ?
pk.time='20140805135601'
( c/ L4 F, J3 r3 j( vpk.mac='06cc571e6d96e12d'
5 N4 o* _: G1 h/ ?' l9 y
$ `! E- a* h7 J; K& \data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time); J0 @& R9 S5 q! p( ?( f
#print_hex(data); h# {  v, x, s* }+ B, s2 ]
pdata.value=data4 u, ^3 c8 i1 Q4 U7 j
#cacl MAC
- b/ ^0 L4 x1 @4 Udll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)3 }/ v; S3 A1 r/ M) _
stro= pmac.value" c* y  R& q" K. g& E( V
strtemp=''2 @. M" h) E7 W& O9 g& b% ~
for c in stro:7 }. ]; @% a6 y
    strtemp+="{0:02x}".format(ord(c))2 t% Y) e6 k) G  Y* ]
#print strtemp% K5 H' f: Z: e! t" w3 @
pk.mac=strtemp/ p% l# A9 ]0 d* P" q
#data to send, R+ J; ^: O- \6 I" R7 I
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
+ T+ s% N3 H) U0 o7 k3 S# `5 K7 zprint  'send1 len is 0x%02x' %(len(sd)/2)
; d! W3 `0 j3 n8 pprint sd
6 ?; f) K* ]: s( e" `. n#pack2
( e% O. v% A" L; Y/ z* Cclass pack2:
/ ~+ ~0 x8 c& Y  a2 I   pass
+ g, E1 C) D8 Z: Hpk2=pack2()' S/ V: X! g! a$ y
pk2.len='0000006E'8 ^8 }6 x, B, a2 M
pk2.ID='0012'  @* _/ V. d" z9 z' i: x
pk2.slnum='00000005'
# {) K9 k$ ^& A9 zpk2.fatCode='00'$ s  {) V* J* F( I6 l
pk2.cardASN='0000000000000000': D" d; v; H( H$ \4 d
pk2.cardType='00'$ V# J% t7 i4 }: d0 D+ z
pk2.userNO= '0000000000000000'
% R; _6 {  M7 Z, E# I$ m/ i& k' e0 |7 r$ L, Z. C$ ], L
pk2.fileName1='00000000000000000000000000000015'
, \# k8 c3 S; S  L6 Apk2.dataLen1='00'
3 h- {$ w8 m+ _  ^8 h. Gpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
, A' i. L8 @: q* Mpk2.fileName2='00000000000000000000000000000016'
8 R6 m! N9 C, y; Q/ Npk2.dataLen2='00'
+ L) B: l+ }, p' b' X/ c. {/ qpk2.dataArea2='000003E800FFFF16'9 Z5 _0 r4 q8 o8 G) P8 w; K
pk2.mac='06cc571e6d96e12d'
0 [5 @) u0 u; p% i/ L1 g5 }0 V4 m7 Z  o0 p2 I  v& Z: \
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)0 f9 |4 L: E1 r( H
" g3 Y6 X0 l, d" h: D
pdata.value=data2
2 {8 [$ b7 x9 L5 a9 ~- e% _: b0 a#cacl MAC, A+ |7 V) G0 a! h) \6 Z
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
2 c1 y+ p+ B5 n; |- C0 z" {# Ystro= pmac.value1 p" D  u0 {3 Y7 I: Z" z3 d
strtemp=''/ f3 J1 `) }/ {) j: U6 S
for c in stro:% f, i$ F7 ?! B7 m1 \' z: l
    strtemp+="{0:02x}".format(ord(c))
& m9 d/ h5 A3 G3 Z% h$ L#print strtemp
0 V( x+ {* r: L* w& T6 Ppk2.mac=strtemp4 b$ a7 ?: E0 E2 P. h' _
#data to send
- n7 L) K3 T, L0 X9 Nsd2=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! J1 [- R+ ^4 @9 u  n" q: R

5 [& y3 F0 |; f( u/ i% dprint  'send2 len is 0x%02x' %(len(sd2)/2)+ Y+ ~$ W  E7 o& X) }: X9 R9 I
print sd2' b4 }" c+ n! T4 I
) F- D% m! I0 ~$ t' l* e0 i

% W. Y7 O$ n$ F) H#PORT="192.168.60.37"
) \8 O# j5 j4 U0 a9 L2 e& V#PORT="localhost") t1 Q* P3 _" r8 E" ~2 Y0 q) h
HOST, PORT = "192.168.51.28", 5800
. M# p: m" m" N" ~% C) w# P7 x& x# M$ f# Create a socket (SOCK_STREAM means a TCP socket)
! p, T' N8 b& ?$ g) s; i6 a5 @sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)6 r5 f( p+ }# F6 W" O: J3 x2 J6 ]1 @
try:
1 J/ a) [: K" ]    # Connect to server and send data' U2 P. J, [. ?* P3 k
    sock.connect((HOST, int(PORT))+ V2 I4 x* q+ u! f
        #data= "123456789"
: g$ w" ?3 |6 [: R4 u( J        #s = struct.pack('bbb',1,2,3)1 f" }0 r/ a' z
    sock.send(sd.decode('hex'))! ^8 p9 [/ v; _, n0 X  A
    print "Sent1 OK:"/ f8 {6 X# J4 j" Z' u
    print sd' o) w- i' V; p7 |$ q9 v
    # Receive data from the server and shut down" _0 `% ?9 b6 j  m2 A0 B
    received = sock.recv(1024)
6 e( u' c) C1 j' K  W  j    print "Received:"! R. j, i5 X3 ^- M- P
    print_hex(received)
) f; V5 I2 t8 ~/ i    print  'received len is 0x%02x' %(len(received))
% _5 F# r% M6 r    print  'received data analysis...'4 O7 y6 A4 F0 j. v6 ~8 }8 k
    re1=received[0:4]
/ d- o6 k9 K  y3 r! s. x    print_hex(re1)4 w6 ^4 T, q/ H" @* ^' J5 Z
    re1=received[4:6]
0 K' A8 _- r3 P" l    print_hex(re1)3 \) V9 M7 [6 K, x
    re1=received[6:10]! Q* c3 `  W  l! P1 N% Z  l4 I
    print_hex(re1)
+ p! W1 s# m( j, \. q% w2 R$ H    re1=received[10:16]8 y' n8 K% z  B$ d8 f# t3 Q0 C
    print_hex(re1)+ F+ l6 X- L8 ~& s# r) @
5 m- j9 }* Z9 z1 c
    #pack2 send
( J0 D# |2 S2 f7 s1 N/ I  {    sock.send(sd2.decode('hex'))  x  r% {: H1 q6 |( h( r+ F" I2 @, j
    print "Sent2 OK:"" [. m# b# F" u" I
    print sd2
9 @3 ~5 f6 g/ ]! T8 S    # Receive data from the server and shut down# Y0 ^- L! o; U: U
    received1 = sock.recv(1024)- d) [! R" D2 T0 n. Z
    print "Received1:"0 A& s& I3 d8 e" ]* D( T
    print_hex(received1)5 A9 X; J. D7 u+ D% @  u
    print  'received1 len is 0x%02x' %(len(received1))0 `+ H7 p+ l! P# d5 m  L

9 A3 M* z  {7 c" a' u( `finally:
2 @: A0 M5 C& k! F1 C    sock.close()8 I9 _9 a' N: ^: a. Z0 v

! a% e/ l; }& H) t5 Q5 Ms=raw_input('press any key to continue...')6 \4 e# F) y9 c. F7 w' f

( j' c9 Z9 u$ c( W& v: s! z$ z
  e/ X0 P- Z# o* _7 C
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 11:13 , Processed in 0.417519 second(s), 51 queries .

回顶部