QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
! P: J2 \. ^- z6 _3 }import socket0 w0 C3 B$ L! u0 I! I# u# Y
from myutil import *
) A$ e! N- Z8 Rfrom binascii import unhexlify as unhex
# a9 b: t- X1 |4 @' M) Z7 A" rfrom ctypes import *' ?6 C) l6 R6 s1 D  X, |; F& x
dll = cdll.LoadLibrary('mydll.dll')
( r  m" o2 S9 b1 e% Z1 `8 C1 g- ~$ X5 ?* iprint 'begin load mydll..'
, ?0 ?# z1 O% r+ ^2 d# q5 W#key% c3 Q$ D3 g0 k$ J
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
! @  h. O$ _) W  m' U#output MAC
1 j2 c6 @9 E  U# c1 emac='\x00'*8( [& m* V2 e" y+ K* Z  k2 x
data='\x00'*8
1 z5 z/ R' O& \; J& D9 J( fpkey=c_char_p()1 C) l' |, a9 W) F2 o6 v
pdata=c_char_p()2 I5 e/ S4 r4 n$ k" U3 n- v6 t
pmac=c_char_p()9 D5 C$ U5 n) J) d; Y0 u
pkey.value=key3 E2 P6 O, `3 X  ?3 U& |
pdata.value=data
1 ]* a' P  Y! n; @# apmac.value=mac; a9 e& u, V) \0 e) t# Y+ ~# C4 |
#pack1
# x4 e/ Q/ `, B& L9 c3 iclass pack:
! T3 b" G* |/ F   pass2 r+ A# S4 S. G5 J0 M
pk=pack()/ B  C1 L' Q, k2 J" |0 r$ U- I
pk.len='00000032'; V, h2 F) _' [! m# @7 b! _1 ~
pk.ID='0001'  u6 V' o- {$ X0 }, \
pk.slnum='00000004'3 X0 i$ c9 T$ }  B+ d2 o, h5 c
pk.poscode='123456781234'9 Q: E) m% R/ ]" l* k! n9 E) O. ^" z3 q  n
pk.rand='1122334455667788'
' [! R4 {  `* E9 k/ [pk.psam='313233343536'
0 B: E8 A: {' r' h7 I0 Gpk.kind='0000'/ z) {# V7 Z4 ]' l: G* i: p
pk.ver='000001') a' A$ l* u0 r+ i5 {
pk.time='20140805135601'5 y3 a4 v9 ~6 D/ F$ n
pk.mac='06cc571e6d96e12d'
& D: P2 ], a& T! }+ X
& e) p. s7 k# L% T$ ldata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
" r. P, ~5 X* w; T  J; ?  C#print_hex(data)
4 O! Q3 M5 F+ o! cpdata.value=data
2 ^" C" `4 C0 {/ H7 Z+ e: [#cacl MAC; G8 M9 p- L: `( z
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)& C- A; m& i. \0 a) U9 c
stro= pmac.value
5 A) }( W! k: l2 F  vstrtemp=''
, ~- L5 ?+ K5 r; sfor c in stro:
; b, e# a* P$ `6 U1 A( Z    strtemp+="{0:02x}".format(ord(c))
  r, I+ d* n8 j( n' T#print strtemp
0 u( Y: E! \3 _  t8 rpk.mac=strtemp- B" w/ [5 Q& c' }6 X4 s
#data to send/ \1 F  _0 p8 `* P
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac0 b. ^: N: T; O: c3 S
print  'send1 len is 0x%02x' %(len(sd)/2)$ P% n) f2 H, m6 x0 q! A; P
print sd
0 F0 \* G, T5 Q; y/ }/ N  C#pack27 Z* z7 E1 @5 b$ [/ s
class pack2:$ i0 E. B5 z3 ^. w6 n
   pass
$ z. e* A5 S1 G$ j8 [4 X; _" |pk2=pack2(); W+ B2 A/ x& g2 q
pk2.len='0000006E'3 U% P+ {+ h- ^. ]' U9 @2 C: K
pk2.ID='0012'
+ C9 _6 W* C: v8 ^pk2.slnum='00000005'
. l9 ]% [; B" {# B. @pk2.fatCode='00'
5 J7 z& `7 |- c  u4 P, ipk2.cardASN='0000000000000000'
) A, h3 \0 r* L8 L0 c: ?, npk2.cardType='00'
" W; v% x# l" t7 g, r: rpk2.userNO= '0000000000000000'
  r. e2 T9 v# p, V
, c, E; g) b! vpk2.fileName1='00000000000000000000000000000015'
  I6 O' L, T: L+ {pk2.dataLen1='00'
5 [  {- X4 ?5 g! apk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
5 f1 m5 n+ {# b* {( Npk2.fileName2='00000000000000000000000000000016'5 n" b: Q/ m/ X
pk2.dataLen2='00'
6 B$ t/ [( j) H/ |- n" K- E4 opk2.dataArea2='000003E800FFFF16'
9 f8 f0 t9 |  \; k5 w/ Y! u1 z# rpk2.mac='06cc571e6d96e12d'; ~+ g8 n$ ]$ x8 k3 M( P

4 }( q# ^" s* Z1 r7 e% j0 v& q3 Kdata2=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)
4 l( r  U/ Z5 ?/ E$ r
7 S2 F+ n8 X) V: ~; y% gpdata.value=data2/ h- T6 q* r" ?6 C
#cacl MAC
% @9 t/ G1 e; B) J8 k  Gdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
" h$ ]( }  P- cstro= pmac.value; M  Y! j& G( i8 z
strtemp=''
- w2 k/ K, p8 s4 U% K: ]for c in stro:
' E( C% V, c; y8 F3 H: p6 z    strtemp+="{0:02x}".format(ord(c))$ Q1 ?4 J! O. a2 R; K- `% `
#print strtemp
* q: ~  E  D; f5 G+ F2 Hpk2.mac=strtemp
* @3 r" @* V- o#data to send  k& ]7 M2 O# I; b
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# H3 i9 R' Z( q# ?1 T
2 F% S6 ^/ U6 O0 M* g  ~; V. G0 e
print  'send2 len is 0x%02x' %(len(sd2)/2)& K8 W/ Q" Q( n. V8 R' [
print sd22 M, m7 P! U" p- @6 t" d6 i
8 Q7 B# N  z+ v4 n7 p2 O- H
! r) a4 J  g! i" B
#PORT="192.168.60.37"! \- `/ z1 `* t# [5 k
#PORT="localhost"9 x5 A  o, q% i6 x7 y) `
HOST, PORT = "192.168.51.28", 5800
5 I( N8 Q! M, u( B! \# Create a socket (SOCK_STREAM means a TCP socket): q7 T1 G' v) y$ u, U! d  u
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
, n. w  a$ \$ k- A; S% Ntry:: Z+ {6 [0 c1 q
    # Connect to server and send data
% ]- G' G( a# Z: e4 K  U* _" o# P    sock.connect((HOST, int(PORT))
3 X1 j. b% J6 ~- m, m' t: [        #data= "123456789"
6 ?: M9 w% K; ^# |4 `2 ]: b* H        #s = struct.pack('bbb',1,2,3)  e: Q6 _% d/ L, C
    sock.send(sd.decode('hex'))3 x0 l& n9 n' @  Q
    print "Sent1 OK:"4 X# n, A  w) |% m7 S
    print sd
# x% ~* J0 s7 h: ^8 ^& c9 f    # Receive data from the server and shut down
) B/ S) M0 |3 n4 w% u/ q4 C    received = sock.recv(1024)
/ _3 A/ R& ?2 m: Y# S. ]% }2 m    print "Received:"
7 u! {% G4 X8 _3 H' {    print_hex(received): Y; F/ _7 C+ x; _
    print  'received len is 0x%02x' %(len(received))
  o0 N* I; H1 F; ~$ V    print  'received data analysis...'7 f# i& J4 M6 }
    re1=received[0:4]( V. \" s# N) d8 P( t8 |
    print_hex(re1)/ l) b% C3 t1 @( D
    re1=received[4:6]
- Z; S" J0 b% t& B3 b  ]    print_hex(re1)  A& V- Z7 p0 L
    re1=received[6:10]# ^: q. w) v2 x5 _& y0 `, D% t/ j
    print_hex(re1)
" {/ X' ?7 L4 f% U5 ^; o8 D* {    re1=received[10:16]* @9 c& r7 F# ?9 I9 J4 l3 i
    print_hex(re1)  H  I0 c7 V4 s; G0 v6 e, s1 V, j
4 T- k- ?3 P9 I( `. A% |3 \
    #pack2 send0 U9 O6 Z5 U5 v- V9 v
    sock.send(sd2.decode('hex'))
0 _/ l" t0 n1 j3 j% O  g    print "Sent2 OK:"
% r) T. p4 _! c9 l& l    print sd2" H. K, K& H! A) l1 ?. ~
    # Receive data from the server and shut down
$ }' e, h0 t% Z1 ^5 V/ c! H    received1 = sock.recv(1024)( E) G( b  G+ W9 F0 h2 c
    print "Received1:"
- m- N* o: _! z9 [+ V% i. T7 ~) \    print_hex(received1)
5 u! e0 S* I# r8 P. L# r    print  'received1 len is 0x%02x' %(len(received1)): E/ Y" v, v" p4 i& |* w; _

) j+ z3 }. t) `& d& lfinally:, n# @  U; G& z& v1 Y" D0 U
    sock.close()9 K/ H1 i9 }2 B+ ^2 ~3 E9 ]

5 S9 Q1 k" a! J7 _7 T" v! ^. A# _s=raw_input('press any key to continue...')0 {8 m' a4 t9 u+ H% v
3 x" E: T5 p7 L- K9 M

) T* Z0 j6 a3 P6 @; r" e
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 13:35 , Processed in 0.454709 second(s), 50 queries .

回顶部