QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1175

主题

4

听众

2867

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-5 {4 o. i3 q+ M" I2 a$ r
import socket1 l) l4 t+ s# U7 \+ c
from myutil import *
6 B: b/ ^9 h7 U' W3 |from binascii import unhexlify as unhex
( s3 V( U5 a$ G; ^8 W2 e4 \from ctypes import *: g- x* }& I" G; Z
dll = cdll.LoadLibrary('mydll.dll')
9 U, ^) I* S. Jprint 'begin load mydll..'
9 m) A' ]( X/ M#key
' ]- g/ r2 \& Kkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
0 O' }7 e0 x: p4 }7 \: h#output MAC5 ]' M! I, T& ~
mac='\x00'*8
$ u: n0 F( k1 s% u+ mdata='\x00'*8$ W" b9 K$ Q, |
pkey=c_char_p()8 I7 }+ b' @' j9 A. f! S
pdata=c_char_p()
& [6 N( h3 X7 X! ?pmac=c_char_p()
" L3 O* F, G+ s: fpkey.value=key
/ b  \, }9 J1 W6 k2 G+ q! m: Jpdata.value=data
2 ~5 g% \3 `9 E0 i1 ypmac.value=mac
8 f9 M, e' W3 [6 _% G' Z. R#pack1
4 J  }# [7 }: i. ?; Y  Vclass pack:; C/ F) y, i. `4 f* o# ]3 {
   pass
, ^1 g' |% N  `3 T+ Dpk=pack()
( h( D' o( o1 h  xpk.len='00000032'6 u. i" @6 A6 t9 Y% u& N
pk.ID='0001'
9 \0 {( [  R" q8 hpk.slnum='00000004'% y4 q7 r& u+ x9 d$ A) j
pk.poscode='123456781234': ~8 l5 w0 v( Y1 s" w2 ^
pk.rand='1122334455667788'
3 x/ ~6 G1 g8 d1 p9 I5 @8 Spk.psam='313233343536'
1 q, ]! g7 e! V( Zpk.kind='0000'
! }! \. Z7 V9 V& s1 D# gpk.ver='000001'& w' [3 A/ e" P
pk.time='20140805135601'
) J# Y, @. y' Kpk.mac='06cc571e6d96e12d') a( L4 o4 L3 a$ g. m. L

1 ~4 Q2 p1 a5 ]data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
- G' z4 `1 R' \' f$ o4 w  ]) H#print_hex(data)' X4 d; f3 `" x
pdata.value=data
9 m) z  z9 p. d5 r6 u, ], g/ N7 r#cacl MAC- \- v7 s$ H- K* D
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
: r) P4 K( C6 M  ~stro= pmac.value7 I$ A2 L5 Q+ g
strtemp=''
4 Z. R. |: O) {0 o9 ffor c in stro:+ I( m8 N+ R1 O5 ?
    strtemp+="{0:02x}".format(ord(c)); P' E  X  O3 \& b/ b+ x8 {
#print strtemp: c5 O' b% n  W0 Z0 X
pk.mac=strtemp) u) ]; s  R7 A0 Q: I9 \- s
#data to send  f. A- \$ Z+ M" `
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac2 }0 n0 t; P9 y6 _% O/ B
print  'send1 len is 0x%02x' %(len(sd)/2)
5 q3 W0 c: Z& }+ Xprint sd
% W4 @5 L6 k, L" }8 c' I& I  ?* M#pack2# q+ {. \8 B3 @$ `9 P( r
class pack2:
; p8 L) U. ?+ p   pass5 m9 U: V4 N+ ]
pk2=pack2()$ f% X. N+ Y& F) I. D
pk2.len='0000006E'" d9 v- X9 w' M1 ~0 f: k
pk2.ID='0012'
; U! F/ ^7 O9 S6 x( epk2.slnum='00000005'/ I# T9 s1 m8 }5 ~$ O+ c
pk2.fatCode='00', o8 N3 I1 o% g6 `. y) Z
pk2.cardASN='0000000000000000'
' |: G' m3 c% e8 X- ipk2.cardType='00'& ^- f/ K/ M; ~/ D. Y
pk2.userNO= '0000000000000000'# ^# |# A+ B' k4 @  u
( o3 f  D2 u0 r* A8 _' }
pk2.fileName1='00000000000000000000000000000015'( ~5 e9 h4 N) p- b4 ]9 U: l4 o
pk2.dataLen1='00'
# Q6 A" Q; G2 }2 Xpk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
  G8 T. X& C4 l" c8 P; d. W7 y! ypk2.fileName2='00000000000000000000000000000016'$ ^4 W6 i+ j- Y  q  p
pk2.dataLen2='00'4 R! A& u4 p% v3 ~: X, R
pk2.dataArea2='000003E800FFFF16'# E* T4 a* W* R/ x# l
pk2.mac='06cc571e6d96e12d'6 M0 @; [# h; J/ N6 N2 `
/ P! x' v. s1 C1 v- r* {
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), k: N% E% c/ N) A

8 h! m1 M3 i4 |  R6 q7 x$ _# n& Cpdata.value=data2
+ l2 E0 F: u) ~9 ^0 ^0 D2 K  w#cacl MAC3 F- z# ?  ~* _; Y" }+ t) g4 j
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)0 j3 R8 u- ?. Y
stro= pmac.value: Z# g" c8 Q4 T& ~
strtemp=''/ g8 y' w, H* ]+ G
for c in stro:
  l$ s/ e' c- K- f/ w    strtemp+="{0:02x}".format(ord(c))
; X7 @6 Z/ J9 F' Q. Z9 B#print strtemp. R, ]9 ]! `- B6 |0 c! {4 B- W8 [
pk2.mac=strtemp* d6 N3 Z$ T. E5 n- c, D
#data to send1 s; U/ Y8 e) @/ r* E
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
/ u# p, m- l3 B
- F5 l8 Q9 G5 J4 V( B; A9 ]print  'send2 len is 0x%02x' %(len(sd2)/2)
- h) c1 ?& x1 [* L4 aprint sd2, d8 X% {6 B: o7 T/ z

% P8 N; F: V) I5 X6 h
1 u/ `  q. H, X, v+ ]#PORT="192.168.60.37"
% n) D9 X- \- `, E3 p#PORT="localhost"0 B! L* }9 g# s) [' p/ t( j
HOST, PORT = "192.168.51.28", 58005 e$ s( \; R; X+ L6 O, S
# Create a socket (SOCK_STREAM means a TCP socket)
$ w7 u8 K7 m5 u% ysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)3 V7 _$ o5 G9 Z& C/ x$ j
try:) [; o$ ]: Y8 ^/ t. v5 t# {) ^! i; m, c
    # Connect to server and send data, ?4 E8 G2 u! G7 R0 b% \4 P7 K
    sock.connect((HOST, int(PORT))
, }( i  e% i, E        #data= "123456789"
0 U+ u" V9 }; E8 T        #s = struct.pack('bbb',1,2,3)% n  p- B  \% O
    sock.send(sd.decode('hex'))* O, R, E3 ^- ^" u6 I1 E+ ]
    print "Sent1 OK:". g) }  k, U. z. a4 z7 T! r' a1 W
    print sd
0 j4 Q; s9 W( L. l& B    # Receive data from the server and shut down) c" E6 O- j8 _0 Z
    received = sock.recv(1024)
, F" q! s0 R& K+ }. O: X( M    print "Received:"9 L; r3 J6 D( b
    print_hex(received)
& Q1 X- y9 v' d. T7 q  u5 B  U    print  'received len is 0x%02x' %(len(received))4 {, H9 D' s/ t, }: _, h; }% m9 w
    print  'received data analysis...'
" r/ L! v. n% t5 b; r* o    re1=received[0:4]
: D) |3 n5 Z3 h# W# c    print_hex(re1)' F$ `: i% r# k: S' Y6 u
    re1=received[4:6]
/ N* B0 l2 k2 \: ^* y    print_hex(re1)
% L& V& Z8 H3 |' P    re1=received[6:10]
- U% v/ T) G7 d% k! \    print_hex(re1)9 @2 V, m: J% |
    re1=received[10:16]
4 @( \( O1 l/ K9 W  x+ u1 ]    print_hex(re1)
9 O5 C: C2 J& t8 c. L* d7 R' n$ Y' R$ w) J2 W
    #pack2 send
" }5 F# w8 a- `. q5 B+ h    sock.send(sd2.decode('hex'))3 }1 l1 o2 f* T! o, E1 @" v3 }* o
    print "Sent2 OK:"
  \9 P9 Y) T) M6 t7 s    print sd2
" }5 A: g. Q& B3 F    # Receive data from the server and shut down
* K! N' B5 N* f% u    received1 = sock.recv(1024)
5 w4 ~6 o* e  X1 [' o. v    print "Received1:"
; J7 w: V' D7 H$ g2 U: F    print_hex(received1)
5 g% I. r: r" b" o    print  'received1 len is 0x%02x' %(len(received1))5 ^# J! t' v6 ~' D# C. G6 F2 a
' l& f' [4 w1 r
finally:+ v9 n6 M/ T; N" a
    sock.close()
) P8 w# g4 W5 O" U9 p' y
+ x9 C8 G. O& q, n+ D# V3 L9 \s=raw_input('press any key to continue...')
* C# d  h4 w3 d  W! O, V7 z
, q8 i- M$ L6 l+ x4 P( C' X, k# q3 u: T& w! ~
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, 2025-8-20 07:08 , Processed in 0.555220 second(s), 50 queries .

回顶部