QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-" x+ A/ S% n; j3 X$ u! \7 D* ]" x1 S
import socket
' j/ k8 a8 e; `; l; l/ Z& z) ^9 b0 Lfrom myutil import *+ O$ {1 d( y& e& T
from binascii import unhexlify as unhex
% {$ |; i$ X3 W+ o3 h5 kfrom ctypes import *0 g) Y  B2 C7 x+ c, e' I
dll = cdll.LoadLibrary('mydll.dll')- Y6 `' J. k8 [0 e
print 'begin load mydll..'1 b$ l, s7 S% e/ j% S8 Q2 ]
#key
& L4 u9 g' l+ z& J. m8 c5 wkey='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'* v( h- l7 V2 V
#output MAC0 E- ?4 Y. I4 M8 j# j' U1 S  n
mac='\x00'*8
- ~& s7 {! h" ~! s* R( D- adata='\x00'*8
; r( S& s* K2 j# J" V4 Opkey=c_char_p()/ ]8 q* W6 U! z; ?8 M$ `; K
pdata=c_char_p()
. x7 Z# X4 w0 \& zpmac=c_char_p()
8 I9 U6 t% i/ ]( r' }4 t; u- F! a( kpkey.value=key' Y+ Q- _- W4 t9 ~# l
pdata.value=data( g( O% h, z  A/ p2 R
pmac.value=mac5 F6 X, X  Y/ q1 a. J8 v
#pack1! n$ Q+ `  `( Y. v/ C8 u9 S
class pack:
& d  r/ b2 j, p0 i   pass
- S# J4 M; z9 Q7 j% x% c$ x, \pk=pack()
1 x8 @5 R- ], t, q% x. L% Y- Fpk.len='00000032'  N* p  L8 I  X0 c+ M  }9 t
pk.ID='0001'/ d* N# Y  P. h7 v& q% I' |. c
pk.slnum='00000004'& e1 N8 r! g5 w- a! D& A. z
pk.poscode='123456781234'7 G$ c1 r, r7 a, z1 f! Q
pk.rand='1122334455667788'
6 {! m+ n. [0 R8 Opk.psam='313233343536'7 W! |9 l2 N3 o1 r0 s
pk.kind='0000'; i: ~- Q# i0 ?) v8 h
pk.ver='000001'. Z' F3 S" g& v" }$ Y9 {
pk.time='20140805135601'
5 y. r+ L6 a, x* J* d( Q% R2 ppk.mac='06cc571e6d96e12d'+ x# R* v: `+ ]

4 ^& `1 N1 \% W% |& @4 a% Edata=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)) j# }: K9 O% u2 p; X1 _: |& f
#print_hex(data)
0 m. S8 n5 d6 q+ @! z0 Epdata.value=data, `) f: X  [! q% m( C  |, x' Y
#cacl MAC' Q) ^& M9 N, ~4 a  X* q
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)% I' A$ q. ~7 O/ `; X% P$ E0 }* _
stro= pmac.value" |' Y9 S) [& D. b& ?# N  e  F
strtemp='': M& q- d3 W1 ?" t" q# f
for c in stro:
0 R6 ]& u9 z7 ]3 F6 a/ J  Y( K    strtemp+="{0:02x}".format(ord(c))$ J0 i6 h7 C) m$ K* c
#print strtemp' g; ?/ B! ]* p; E8 M0 i% I& v
pk.mac=strtemp
0 l# m+ t* o* s, s4 }' A#data to send
7 n! }* V$ H7 b1 j; {' Qsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
8 y- z  Q; ^5 B8 c1 ?& Oprint  'send1 len is 0x%02x' %(len(sd)/2)
! T. U% E- v1 uprint sd! c! Z6 B! E* x$ I" j
#pack2$ o+ p2 U' D6 A3 ?
class pack2:
; d, V% t3 I. z3 w; }/ e; {   pass
* ?; g5 w; m4 Y9 Y7 g- `' lpk2=pack2()
2 S3 q/ E2 T4 F9 [" [pk2.len='0000006E'* F7 U/ R" k5 \7 L
pk2.ID='0012'# w2 I9 w. k4 ?% k2 |
pk2.slnum='00000005'3 a$ z" Y0 S$ ]
pk2.fatCode='00'
+ h2 Q9 P8 g  e5 Gpk2.cardASN='0000000000000000'
* s+ I9 I1 }+ ]& w8 Zpk2.cardType='00'7 e: i9 d' A5 n1 j
pk2.userNO= '0000000000000000'0 E$ [  c% O+ J9 {# G

# G$ q8 y' n" l7 n; P4 opk2.fileName1='00000000000000000000000000000015'9 r9 {( o1 K, a9 r, V  B7 n
pk2.dataLen1='00'
) K. Z$ O# T6 L7 _" [pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
, i+ z3 J2 [& D% S0 npk2.fileName2='00000000000000000000000000000016'
( `; q  E' O0 I! opk2.dataLen2='00'
! V5 j9 ^8 A+ u- f4 v1 fpk2.dataArea2='000003E800FFFF16'
8 W$ i- Z+ ]* A: lpk2.mac='06cc571e6d96e12d'
* p& w& v2 k2 v! S3 l
# _- ^% z1 ~2 S1 t" ldata2=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)% |: G+ r4 u' I- y% x" b
  |9 u# C+ s, E7 A2 A
pdata.value=data2
4 @1 r. j( s- ~( b" M#cacl MAC
3 T7 @9 L" z" ]. Ydll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)4 [  R* h/ F; \" p. ?/ o+ z
stro= pmac.value0 M6 l3 a3 b: }1 p  M
strtemp=''
7 Q6 K) y1 ~3 B5 q1 U/ l1 |for c in stro:% j. K" l3 w7 B: ?0 ^* j
    strtemp+="{0:02x}".format(ord(c))* y6 ?$ [# W  ]8 \
#print strtemp# b0 a. P6 u0 x
pk2.mac=strtemp: g1 l# x) T3 B/ Q
#data to send4 S. T& c4 r2 R- w2 ]( p& l
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
& I- o  P$ U: a8 M( H8 k2 V
+ a- J. z- E3 q9 j2 tprint  'send2 len is 0x%02x' %(len(sd2)/2)0 |& e' I! n3 J+ Y/ n0 Z( ^: E  ]
print sd2
1 _) ?& g- G+ F
! R; u" H* F! d3 n. u1 E1 i
, r) f3 f" _) O1 D% H#PORT="192.168.60.37"
3 f+ R  M( d1 j* g#PORT="localhost"
( W4 l; G% b: R/ @& gHOST, PORT = "192.168.51.28", 5800( z5 [! F: f8 a& @0 @8 W
# Create a socket (SOCK_STREAM means a TCP socket)
3 @8 q& e; F# y7 A3 S" v1 G4 hsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# a& M5 {2 h1 S) z9 w# f6 b
try:+ \0 R5 E! ~7 U6 R$ H/ h1 k
    # Connect to server and send data
. v4 J8 ?8 g, ?- s    sock.connect((HOST, int(PORT))
9 c. U( `- O# s        #data= "123456789"( W% L: c& |( @. C) X( Y9 Z; R
        #s = struct.pack('bbb',1,2,3)
  {& Y5 w. D% i8 n7 h    sock.send(sd.decode('hex'))+ V0 O' D0 K6 H3 g
    print "Sent1 OK:"7 s; Q" G' ?9 ~/ d/ `4 A
    print sd
# ]4 L0 s6 A# Z9 }    # Receive data from the server and shut down
/ `. p/ ?8 z" H7 n* c# a# i    received = sock.recv(1024)$ r$ ^, r7 C4 o& \/ A
    print "Received:"$ @3 e8 T. ?  m. b
    print_hex(received). j+ b+ l# Y7 N& e; C& f& Q
    print  'received len is 0x%02x' %(len(received))$ h. W3 z0 r, k5 S1 c
    print  'received data analysis...'6 e6 G1 M, W0 o3 v" s7 ]
    re1=received[0:4]) A! Q& w$ C; H' j1 G1 Q# P+ M
    print_hex(re1)4 p$ F: L' Q: f# n6 K  A9 O
    re1=received[4:6]
, O4 T. |' L$ [' E    print_hex(re1)
& v* @2 {; F1 t1 ~& i1 `    re1=received[6:10]
  n8 D: o1 [9 M  r. T/ W    print_hex(re1)
" D0 a' T# s/ m( S0 v) X    re1=received[10:16]4 z" g* ?" E- h/ o4 t
    print_hex(re1)
! ^* C" ]$ j9 j. ^% y9 V# u7 v
: h! K) p: m8 ~3 _    #pack2 send" \1 X3 o" ]. i4 O: h8 j- ]
    sock.send(sd2.decode('hex'))5 L& s2 k. i! L6 {; m3 G
    print "Sent2 OK:"9 @* B& X: B5 J5 \$ T6 l
    print sd2
" h  c& @+ |3 R0 H! d. b8 \% e! t    # Receive data from the server and shut down
8 C5 ~$ g6 c% ~$ F/ u6 s3 }. N+ _    received1 = sock.recv(1024)
9 P. i4 V+ E: i9 h2 Z0 V    print "Received1:"  {# M/ y) @' W
    print_hex(received1)! A8 y' l! s6 ?0 q* o8 C+ Q1 J
    print  'received1 len is 0x%02x' %(len(received1))6 c4 l0 Y" j) ?4 O$ E" o9 @0 O" P
. Q" H. l4 K  r. B5 U; @' b+ ~
finally:, h" M, f7 g- P6 \2 Y
    sock.close()
; N% }7 M0 C8 g$ U" a& U3 O& A. t, r6 ~5 n- o0 J$ L4 H( J0 p
s=raw_input('press any key to continue...')
1 M5 o6 G5 E8 W
3 }0 c7 X. k2 T8 A) _. |( z3 `6 u% Q: X/ d( }
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-2 07:26 , Processed in 0.305120 second(s), 51 queries .

回顶部