QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-
: s; O5 C" y0 R; \import socket0 R* [* D0 Q' u3 x# A9 v/ F. R$ K- A
from myutil import *" f0 ~; o7 J: ]5 {$ G' K: b
from binascii import unhexlify as unhex- u1 r2 ~, c6 x% |/ d8 ?7 \+ x
from ctypes import *+ Q' c8 E; r& ^9 }
dll = cdll.LoadLibrary('mydll.dll')
8 Y' _! e7 m% S8 E4 E  D) p: }2 ~- cprint 'begin load mydll..'
, @$ X& ]$ R' W4 P' e#key/ {/ m- i0 p0 m/ L
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'3 n% M$ y1 w' m9 i; u) F6 i2 h& `* {
#output MAC
& `) e( t6 Q. pmac='\x00'*8( N  n8 {/ o0 k8 L) ~- _
data='\x00'*8, C' P% y; {8 j- m6 e! J; r3 f
pkey=c_char_p()/ P( F: _4 A6 v8 p- {- i$ n
pdata=c_char_p()
, Q$ `7 C( ?5 p7 mpmac=c_char_p()
  H. u* N! O0 ?5 R, T2 `pkey.value=key6 L1 M& D& ?3 P# m/ J4 l/ Q
pdata.value=data, J9 Y& M1 E# k' {. B2 W
pmac.value=mac
) k% D- D6 G8 d#pack1
6 \5 ?1 _6 }0 W7 D' W2 Fclass pack:
* U7 U  l  q0 r* Y8 j/ k   pass  K  k" @8 @  o$ a
pk=pack()2 a! u$ s8 z- p/ e
pk.len='00000032'
; b! m+ }( U) S) c7 @4 n5 v: d9 F9 v, ppk.ID='0001'
# S1 ?; I3 E; E& C: |pk.slnum='00000004'
  u( t# C* v+ Fpk.poscode='123456781234', Y- v; _! P1 P$ U, e* \
pk.rand='1122334455667788'
9 Y( f2 h5 q" z, H: Kpk.psam='313233343536'* h) l2 u, G6 J' _
pk.kind='0000'1 Z1 ]6 R) z: ]" R; f
pk.ver='000001'
+ ]7 e2 [* B4 G) t% m& [pk.time='20140805135601'
$ D3 a0 }7 E/ W8 U3 Ppk.mac='06cc571e6d96e12d') d: y+ p+ ?: u9 J; u' }5 n. _3 g
# j$ S& R  u5 v# p
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)/ z$ J" t5 ?1 M0 s* |
#print_hex(data)
* c6 c* d1 ^2 d% Rpdata.value=data
" V# p  \$ ~3 Z) x) D2 q2 ~; g#cacl MAC1 w) G% N8 A; j7 _  Q
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
' F  q: X3 ^8 E9 sstro= pmac.value3 [8 \; ^- V. u( l( j
strtemp=''! [8 B1 h: e$ v( P  D2 Q! L
for c in stro:$ g- w7 A+ l4 U) `4 K
    strtemp+="{0:02x}".format(ord(c))
. B+ M5 r0 K$ ~#print strtemp" i7 ^, ?" I' ^% ?) r
pk.mac=strtemp0 @! ^0 e+ |  ]( {
#data to send
( M) h$ r' J" [/ b) ?sd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac
  }& ?$ {  r) U9 X- d* o& l6 Gprint  'send1 len is 0x%02x' %(len(sd)/2)* o4 n' u/ w  A5 @
print sd
$ L" L% q) R) ~& e/ j9 \& i( b#pack2
  A) h; ]" z7 n  G; iclass pack2:
! l5 S% ]0 J7 F, O) l, m- k   pass
* {( F  H& F9 l( b9 ]$ Dpk2=pack2()5 \6 M9 F" A& _9 w. ]4 ~
pk2.len='0000006E'
# `1 m9 l! [$ S: d- z: b- Mpk2.ID='0012'3 [" ]% v+ h& g' t' ~
pk2.slnum='00000005'8 V3 I% x+ V1 Y2 d0 O2 i2 Q
pk2.fatCode='00'% @- V) J& y. H; q7 N+ t: S# Y
pk2.cardASN='0000000000000000'
+ E: c$ L" z* P& W: Y2 N, H9 Kpk2.cardType='00'' x! M$ w+ i8 E5 m- H
pk2.userNO= '0000000000000000'0 b( Y/ t) J+ j0 E( |2 W- F
, H: Y' v  \9 v( y4 o& z
pk2.fileName1='00000000000000000000000000000015', G2 P* s7 W3 A
pk2.dataLen1='00'- B: v, t5 G6 H) N* b
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'& E- e$ I3 B" m, U- {
pk2.fileName2='00000000000000000000000000000016'/ K7 J: J9 _5 N- O  H
pk2.dataLen2='00'. X2 }. S- D. d
pk2.dataArea2='000003E800FFFF16'
. x4 n) X* m) R8 Dpk2.mac='06cc571e6d96e12d', d/ o: t: f# Q0 I6 ?4 x

  ~! ]% v/ L) T. }; z# idata2=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( E+ i" ]6 N# O% ^) i+ h7 j- y( I: l* d3 O$ J
pdata.value=data2- y2 h' H4 k8 ]2 r, ]
#cacl MAC
8 |1 @4 Z/ S- s8 }% Tdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)
, z: d3 R4 i. i; `stro= pmac.value
% a" X9 Y, z4 b& dstrtemp=''
- v1 N+ G+ p" W7 |; U: sfor c in stro:- K' ~( _5 K' V- g+ i
    strtemp+="{0:02x}".format(ord(c))
! i; Y5 A: K$ N4 f" H1 N/ j  k#print strtemp. W1 E4 c& [6 G, K
pk2.mac=strtemp
% F0 n) U  Y8 a# u#data to send: V9 d3 t+ M& t- Q/ M# }
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$ |- d# ^0 ^/ y0 k/ ]9 U+ ^  }
5 R% l8 o# S* a8 t
print  'send2 len is 0x%02x' %(len(sd2)/2)! X% y5 @: }0 E. [0 w  v
print sd2
6 }& Y3 X6 Q8 Z5 f! H2 L8 @- u* k; {& N3 n4 J: m2 z8 S. g; x' T& f

# z7 T6 o/ D+ t4 O, @) y/ i) _#PORT="192.168.60.37"
$ _2 |% I8 r" Z8 ~) E0 S7 ]#PORT="localhost"" }2 |; J  g* ~; p/ P6 P
HOST, PORT = "192.168.51.28", 5800% n( F; i4 n9 m
# Create a socket (SOCK_STREAM means a TCP socket)
$ i" }: [! H" h" V1 fsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ~' F! t* E. |. s2 etry:
( |/ D. ]1 y2 I* G    # Connect to server and send data
- G$ Y+ g* B  V& w2 u    sock.connect((HOST, int(PORT)); l* y: }* i$ d# e  R
        #data= "123456789"
+ \$ v  C5 W( l2 K. i( c8 C0 l5 s        #s = struct.pack('bbb',1,2,3)
, ^6 a" i- G9 }6 s6 S# {    sock.send(sd.decode('hex'))* O& l' L% C9 ?& ~
    print "Sent1 OK:"7 ^' V# g" t; T; i- F- n8 u
    print sd
$ d6 G" `) z* t    # Receive data from the server and shut down5 v5 M1 ]# ^4 w/ h0 U6 [, v
    received = sock.recv(1024)
  a) N" X' k0 n& I% c& [    print "Received:"
* b5 H+ o; t( A9 ^- X    print_hex(received)" d( q# l; J( @* e
    print  'received len is 0x%02x' %(len(received))5 n( P1 y; y) j6 H/ l8 c  ?
    print  'received data analysis...'
6 |3 \8 ~5 @1 t    re1=received[0:4]  Q6 X5 @  [# y4 n, u* V
    print_hex(re1)! N8 W" r8 f, V
    re1=received[4:6]! t; w: A+ O- e; P0 C
    print_hex(re1)  G2 I- s& @% U- I: h7 ]
    re1=received[6:10]
1 T- [) F& ^7 Y8 v( n    print_hex(re1)6 }5 x' ^# e+ l9 X- u
    re1=received[10:16]  e% w& p6 [4 x3 o3 t8 u5 |9 _
    print_hex(re1)
% W7 ~. |: l* W/ F
  a9 d+ ]% H# P; _, x) p% `    #pack2 send
" S5 w9 ~& n' m    sock.send(sd2.decode('hex'))8 s; C& V8 L* b- b3 q3 Q$ M- J) _
    print "Sent2 OK:"
, ?2 q& N8 N+ }    print sd2
$ W) a, \6 ]5 x8 m/ u    # Receive data from the server and shut down
4 S! r+ j9 {" ~0 k: f0 Y- ]- `! u    received1 = sock.recv(1024)' d& L/ J5 Z1 `% |
    print "Received1:"1 n, J& v4 x) j. e8 I! K
    print_hex(received1)
& w# A7 p5 X4 C6 T- l) O, \    print  'received1 len is 0x%02x' %(len(received1))/ m  ]2 _$ E1 I# R$ W& P2 t; ]
/ h: _  @' \! A  i, M* f
finally:
+ D: B- B4 W0 j    sock.close()% l8 I+ x* ]& A$ `  i
' `' ~5 ]. [7 L, I1 A6 n4 Y
s=raw_input('press any key to continue...')
  Q) P4 Z: g1 d( y7 o1 I) Q/ c: O9 k6 W* ~* U
  u6 F2 J; R) |- M
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-4-22 21:41 , Processed in 0.610749 second(s), 51 queries .

回顶部