QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-& J) U/ S) l! p2 f) p- g$ e( }1 e6 R
import socket
( }: }) C/ t( x* J- _from myutil import *5 ~5 W/ c! K# y! e& I" L* N$ b
from binascii import unhexlify as unhex! Y6 H4 \% A8 [# p& d6 U" ^
from ctypes import ** p' a% `6 V5 V. V+ q) N
dll = cdll.LoadLibrary('mydll.dll')2 B9 J' F7 b5 a- A3 n, u% j/ @6 t3 U
print 'begin load mydll..'
( s7 x$ D8 {! y: i#key8 G, @$ Q- l$ W8 k9 a2 Y* a5 x  r
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4', q7 Y* Q' L9 {% L
#output MAC
  m( B3 {. ~" N! w% Z# B* P: F+ Z6 lmac='\x00'*8! E, [( s) _. w! H* Y
data='\x00'*8' J3 ?" E5 j; X* j& O( c- k1 I3 S8 i
pkey=c_char_p()! Q2 A. H: y( {- ^  E' ~( q; J
pdata=c_char_p()
5 q3 J% }9 Y! w' n- ^2 @pmac=c_char_p()+ ]# d4 @+ {" b/ s/ n2 Y% a
pkey.value=key- Y/ O1 m) [  S" r& \
pdata.value=data) Y, Z5 l, R- Z) e. O1 y! S9 J
pmac.value=mac6 V  E/ G, H0 \/ W# ?8 {
#pack1
6 R- H- ?7 [) D& @6 l$ q& e  eclass pack:7 ~+ A+ ?2 u( D# J
   pass
4 g5 F$ ?' b/ @. }pk=pack()
; m2 K: x( M- t5 R5 V$ Npk.len='00000032'
4 y% T* F9 r5 ?* F/ C9 T7 Opk.ID='0001'
: V5 ^' b" [; P- ?( X9 _% Hpk.slnum='00000004'' }. H7 P! z* g9 w3 {
pk.poscode='123456781234'
# e; N# ^, i. I, F# Kpk.rand='1122334455667788'
) S3 N* M4 r* opk.psam='313233343536'/ }, r. {/ x: p5 i: O# a
pk.kind='0000'
/ x% w" }6 X# V$ mpk.ver='000001'
* F+ M/ S2 q3 T8 w8 s; v% Npk.time='20140805135601'
* ?6 r- v0 j  t; e. \: r' Epk.mac='06cc571e6d96e12d'
% W+ T. Z1 @' t" O- e: K: t$ \. T4 g4 G0 ~
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)' z5 l1 `+ c% f% x7 n9 E2 W' P$ s
#print_hex(data)
/ W0 }8 _! H: z6 O9 [pdata.value=data; M) A# p: l0 l" z1 ]5 \+ M
#cacl MAC
' E2 S5 i* v. Z$ _( ^7 |dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)$ \4 u5 @+ D" U, x! C, O5 E9 y
stro= pmac.value
6 P/ G& `1 q2 Fstrtemp=''
) C( E! O6 O' l( ~3 _' E, S7 ofor c in stro:+ K2 N& ?2 p% y1 l0 P  t
    strtemp+="{0:02x}".format(ord(c))
1 d# `3 t$ k0 g* P% j#print strtemp8 }( A0 T3 p$ @4 m- t" L' }5 R: Z- \
pk.mac=strtemp
* R+ A4 K' m9 j0 N: i#data to send9 M2 X( r9 W2 l1 J. u2 k, A
sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac, B1 D- x$ }' G. k
print  'send1 len is 0x%02x' %(len(sd)/2)
, }/ k) `7 P2 y6 E" h1 nprint sd
; c- `! V  Y" A6 v* B8 t$ j) s#pack2
# z1 D# |) I; P) Q4 v0 }class pack2:9 b3 q: e6 N/ E$ \. [" M/ S
   pass. A7 T3 q, y" L3 t6 N
pk2=pack2()
+ H! I3 s5 x$ A7 d$ m, p1 Jpk2.len='0000006E'
- s& c: W/ V2 s8 M* v, h! H$ Dpk2.ID='0012'
2 J0 ^) {1 I( E0 r7 B+ npk2.slnum='00000005'
; G7 G* l3 E; y" ]+ H+ Lpk2.fatCode='00'/ a  d3 r9 C8 g/ o% P
pk2.cardASN='0000000000000000'' x* {, X- R/ r5 O
pk2.cardType='00'  ~- Z6 K$ T* b2 r' j6 |
pk2.userNO= '0000000000000000'/ m( o. ^! T: e& Z

1 `4 s2 C  N; bpk2.fileName1='00000000000000000000000000000015'' ~6 c+ f( ^9 v6 E
pk2.dataLen1='00'
0 p$ ]1 N( j$ W- U. ypk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
' G; f0 `: v2 v* b# h3 W5 u3 ypk2.fileName2='00000000000000000000000000000016'; f. x' \+ h) M1 A! r
pk2.dataLen2='00'
5 v, B; L/ h/ x: ]$ [2 {% Zpk2.dataArea2='000003E800FFFF16'
6 I# q! {6 G2 M$ c7 wpk2.mac='06cc571e6d96e12d'( j7 P; M4 G0 G" v; X
/ u0 `& n6 N8 m- A3 C7 f3 ~
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)/ V; ^" \$ Q3 ]6 G$ M; o' I. v/ B, X  Y

/ `1 t0 h7 E; b0 b4 e  tpdata.value=data2, o9 M, [# E  @$ P5 E
#cacl MAC, l# T# v- T- a, F- u0 i4 j  K  ?
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac). x0 h/ ?0 D$ |8 m, n
stro= pmac.value/ w! N( R+ Y% h4 b2 j8 L- M& g2 w
strtemp=''# L9 C% [" U, s: S8 z$ {
for c in stro:  B( I5 _1 O. I& R+ b
    strtemp+="{0:02x}".format(ord(c))
+ t& R+ o. K/ h* {#print strtemp8 c2 r& o; m  E" P
pk2.mac=strtemp% F! R* Q" W# v. O6 C: F- W
#data to send! G- J9 M3 l6 e. h3 Z+ 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
0 L1 S* m2 N: m: O5 \1 C( Z( Z
print  'send2 len is 0x%02x' %(len(sd2)/2)
' D& G- M7 s; l; n8 J9 Q; Dprint sd2
# z+ g, k) ]5 ?6 f; e" W  c/ y) f
# x2 D1 j! }/ s* ]; f
( J- j! m9 ]9 k" n- Q7 W$ p#PORT="192.168.60.37"5 u- r: p  x/ m% i
#PORT="localhost"% J& a- a# n8 t. U* V& e/ J
HOST, PORT = "192.168.51.28", 5800
' c' b2 N  Q3 D9 u, C3 y# Create a socket (SOCK_STREAM means a TCP socket)
2 a, }* I( a- ~* I& h/ Zsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
) N, @- b. g: ^+ @try:# F9 L- V0 s: v4 O% F: ?- A
    # Connect to server and send data: N0 J/ _9 F7 b% G4 @  p
    sock.connect((HOST, int(PORT))" l2 c& N5 X% r
        #data= "123456789"; @$ M" E- |  c4 D
        #s = struct.pack('bbb',1,2,3)
" W5 p2 M: Y  c8 m5 ^$ W    sock.send(sd.decode('hex'))+ M8 O+ H# z6 e* b4 ?+ G
    print "Sent1 OK:"0 e) ^& h8 }6 q& S4 D( G
    print sd
& J! Q1 m! w9 ^0 I    # Receive data from the server and shut down3 G( T9 w5 j0 X  M
    received = sock.recv(1024)
3 N3 \" z' c6 R# E8 z7 N5 ^    print "Received:"$ k$ _2 e1 z4 i
    print_hex(received)
. B1 ]& p, z( o( D& r, u    print  'received len is 0x%02x' %(len(received))3 {7 |: W# F3 M3 B: n
    print  'received data analysis...'5 H; t! u* g# n$ H& B6 d
    re1=received[0:4]5 k' e, ~* `% q, ]
    print_hex(re1)
2 e3 A9 i$ A1 I+ D8 O    re1=received[4:6]+ k* v, p, {, X/ ?; }5 W
    print_hex(re1)
6 z! s4 R' _% {+ A) @1 ~    re1=received[6:10]
, y6 x: \. i3 m4 O1 I7 g    print_hex(re1)
  A& J  @' z. }4 ?% g    re1=received[10:16]) G$ p9 i9 h( d
    print_hex(re1)
( X5 a) u; G8 V: v  I( w2 |' x/ }
4 w$ o$ _" }" s6 {/ T# K0 g    #pack2 send
+ ]) z6 B" E- n. }6 K2 x8 {1 g    sock.send(sd2.decode('hex'))
/ C' H7 i, [+ T) d    print "Sent2 OK:"
: M* o* Z+ ?8 W* C; z0 T    print sd2
, z2 F$ O7 |# t1 @/ d3 y9 k: j    # Receive data from the server and shut down0 p4 ^5 J/ N5 p( v1 I5 [4 D
    received1 = sock.recv(1024)  ]/ z+ z6 a5 F" e! i# o
    print "Received1:"
* D7 H0 F4 H. {4 _9 z    print_hex(received1)
  B+ i0 m$ X7 j, _) V. V3 [    print  'received1 len is 0x%02x' %(len(received1))
, l& ?2 X, f, E* G$ x" ^% N
4 `- g; b' Z* x; Q$ r' {finally:1 c* {5 f  l! a2 l( {
    sock.close()
2 Z4 t. x$ h; T) }' @& G  J2 L- k  D/ d% u
s=raw_input('press any key to continue...')
$ g: H+ Z4 n+ p! C8 L: d9 s. k- o9 Q6 {) O
' ^; x$ Z$ G! ^  \" k
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 02:18 , Processed in 1.038808 second(s), 50 queries .

回顶部