QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1175

主题

4

听众

2872

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-( ]8 u  a( {8 ?/ q
import socket
  i1 |3 [6 Q7 c# v7 ~# t' \4 I4 _from myutil import *
7 `5 R7 T  ]9 r. |from binascii import unhexlify as unhex9 b, p5 S' Y& O* d8 a$ D
from ctypes import *
% b; p, M6 J: ]6 s( Wdll = cdll.LoadLibrary('mydll.dll'): }) s) Q% h9 x7 e9 I' ]" y
print 'begin load mydll..'
# p/ n- |* `. w) ?; a) ^#key0 L( q6 u$ K8 I; \$ t
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4': U2 Z% u/ e7 G+ J6 T! A& h
#output MAC
* m; y( Q# B+ p4 Imac='\x00'*8+ j2 B) z) U7 [5 r" `- K
data='\x00'*8; k$ c) B: M3 Y6 k- ^
pkey=c_char_p()
. j4 D* {9 I% mpdata=c_char_p()0 [& x2 k+ ]' N4 _$ j; q5 ~
pmac=c_char_p()
! N0 C- c! x) M' Cpkey.value=key) K# j0 P; l* M% y  I6 p- T
pdata.value=data- f+ H4 m9 Z; a1 ^) b% m) @; _
pmac.value=mac9 q; w5 v+ ?  r
#pack1
# v# o( @& d" B( jclass pack:
  z+ S% l# w" J3 z4 F   pass
, K- W0 f2 x8 ?4 A+ ^pk=pack()
+ \6 O6 m: J& R+ Q' B! U* qpk.len='00000032'
7 ]; C2 ^, m' j) L: h2 D) Cpk.ID='0001'! h: e' r0 P2 j+ \+ L4 t0 {6 S) e6 ]
pk.slnum='00000004'3 |3 ?9 J7 W0 L: N
pk.poscode='123456781234'
8 X8 M( k" E1 g4 {% Ipk.rand='1122334455667788'
3 Q; R; a/ l, J3 Z# q% d  F9 Dpk.psam='313233343536'
0 }6 D6 P/ v+ ^pk.kind='0000'
6 s2 Y7 V& E6 v+ n. |6 ^pk.ver='000001'
$ w9 p  S2 p7 opk.time='20140805135601'1 W2 q8 I$ Y, @% j# j% X
pk.mac='06cc571e6d96e12d'8 L4 p, q) r. ~6 ^* [
3 s- X9 t3 U& k' q
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)' s2 a' P' e7 ^" `* {
#print_hex(data)$ n  t# D; o7 h9 j  y; q* O: ^2 B
pdata.value=data
) F' V; k" c7 q8 g9 `#cacl MAC
* a  a! e+ k, L) Edll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac)
, \7 n! x. _% `6 N9 B+ i5 Estro= pmac.value
0 @% u) b) a: {4 Mstrtemp=''3 e2 }3 {+ k2 I* z+ H
for c in stro:
3 l! B; n+ d2 r7 Z" l& J3 `: h# P    strtemp+="{0:02x}".format(ord(c))
0 l+ U' `) p5 n; K2 y#print strtemp
* |  Y! q% M8 [/ {) upk.mac=strtemp
9 r2 h: {6 Q( a#data to send
* D" R: k+ j0 l1 M; H$ \. Lsd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac7 C3 A; d) ~, P* x8 S, q- @
print  'send1 len is 0x%02x' %(len(sd)/2)
6 U6 M. _, y# j! x0 v! rprint sd
5 t: Q4 A' T0 |3 U& n4 B+ E2 v7 J#pack27 A: R+ x) C) K9 P& k
class pack2:
( ]# o/ p* c% B  [2 Y   pass) c: {5 {% M) ?. {# _; o/ D
pk2=pack2(), S3 J" t* R7 {- C( A; m
pk2.len='0000006E', _7 ]& h+ Y2 U& r% h( m  o6 ^
pk2.ID='0012'
8 R, K, F3 r# I' }6 |6 _/ y' npk2.slnum='00000005'; p  ]3 C9 o8 B" ^+ K, c% B
pk2.fatCode='00'
6 @- m1 O; a3 b. s; ppk2.cardASN='0000000000000000'
( `7 _! ]' I( w9 S( Npk2.cardType='00'+ ~1 `  R5 B& ]! {% I8 J5 \! ?
pk2.userNO= '0000000000000000'
+ n% L/ }: j) K: ?
2 k) ?7 N0 D1 Xpk2.fileName1='00000000000000000000000000000015'; [7 J5 w( F! G) ^3 s
pk2.dataLen1='00'( X% P, s2 T  Z, B. s2 r
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'
7 v9 J: ]9 @/ r5 `+ o9 Y2 upk2.fileName2='00000000000000000000000000000016'
5 M3 G1 z7 I6 |2 g5 {) l3 N+ epk2.dataLen2='00', e8 B9 j( U- `& Z5 p( k/ G
pk2.dataArea2='000003E800FFFF16'/ e8 r$ k3 {' b4 U: u4 U
pk2.mac='06cc571e6d96e12d') R3 V2 V' Y# o# X4 }, {( u

- L  `5 ^. n' ?* t* N6 U3 }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). Z, P/ |  W3 I; z  C

3 ~9 z" X, t; J$ Q6 gpdata.value=data2  H2 z/ G! W8 l1 g/ }; A: f$ c- \
#cacl MAC; x9 R' a  S) u
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)' u& r7 ]1 e% T
stro= pmac.value% V+ t1 t5 ?: {! H' \% P) D$ {3 g
strtemp=''
7 \( e" Z4 z  tfor c in stro:  Q. S" M& k. g$ |
    strtemp+="{0:02x}".format(ord(c))
; C+ N  L% ]: z#print strtemp
0 l) i6 c9 L5 Z- ?* E# b  A  {pk2.mac=strtemp+ Y6 E) v7 h$ s/ k" \& V; L/ @
#data to send1 H7 Q( y" s4 Y
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; T) l! P, u" w$ f/ [8 Q4 R5 i8 y6 V1 v9 x- `
print  'send2 len is 0x%02x' %(len(sd2)/2)) }) S. }. x2 }" }! ]
print sd2
* Y0 s% O( e2 }. w- S& P
; t4 v* P/ D% }' j2 l2 Y) k
  V) {- j% Y1 L/ k( v#PORT="192.168.60.37"' @* R7 l) g6 I4 @/ \5 [$ f
#PORT="localhost"
7 [  T( ~6 t$ O2 P0 eHOST, PORT = "192.168.51.28", 58000 C) l$ G2 [8 ]; T" J9 o- f2 j
# Create a socket (SOCK_STREAM means a TCP socket)
* c4 D1 u$ e7 q5 g( Z; \6 Ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM). f- q5 }0 d- N8 y" T
try:0 [* W' b) I* w
    # Connect to server and send data
0 E3 `, r* i9 [9 P; P    sock.connect((HOST, int(PORT))) \$ ~8 \$ J7 j- s
        #data= "123456789"
/ S6 N8 x5 S* l; S2 t- \* Z/ P        #s = struct.pack('bbb',1,2,3)
9 ?: H7 U8 m8 T    sock.send(sd.decode('hex'))
- O! Z) x* k' d- f( ^    print "Sent1 OK:"3 c) V- E4 ~6 U. D: h
    print sd7 R4 F; y. p3 h" `$ X
    # Receive data from the server and shut down4 g- `4 Q/ f9 O+ o- E/ O
    received = sock.recv(1024)
2 m# E" N7 \0 u2 l7 Q9 G8 E% Y+ I    print "Received:"
( g+ z  a- v% _) ~- j) y+ e6 @$ }    print_hex(received)9 Z/ g- Q/ \0 s$ A( i
    print  'received len is 0x%02x' %(len(received))0 M. g/ k, C2 ^! ]  v
    print  'received data analysis...'
5 A) P; P1 W6 [% |+ n/ W6 N    re1=received[0:4]8 T+ u$ Y" Y) m- X5 z
    print_hex(re1)% c' Y4 b+ A6 l( ]7 F
    re1=received[4:6]; N. o; j3 j: _1 B$ H
    print_hex(re1)# A! u! }  N* n" b$ ^/ r
    re1=received[6:10]3 H. i& N1 l9 B
    print_hex(re1)5 q9 |! z. z% g0 D5 G$ H* u
    re1=received[10:16]- _: m+ {$ o4 @6 H8 B
    print_hex(re1)
: h" N) W6 i/ w% Q! w
) [# O6 q$ u7 M; P& W    #pack2 send  f! e; Q: d2 W3 X
    sock.send(sd2.decode('hex'))
: \! O/ X, ]* [9 g& E3 W    print "Sent2 OK:", a# U2 [+ r% R2 E0 B2 D3 k
    print sd2
! \) z. i6 P0 S8 E. ]+ Y    # Receive data from the server and shut down' m4 g2 J( F5 J# f- l- e% D
    received1 = sock.recv(1024)
* U7 {% w- ?: \    print "Received1:". W! t9 [# j' P: O' Z  Y
    print_hex(received1)
! W3 y% U2 n8 r0 d9 b    print  'received1 len is 0x%02x' %(len(received1))
0 x/ t2 C! ]$ B% ]* K& m  ^
/ g" H, J- @& Y! s) L8 ifinally:9 }# [3 e0 |- c; F- E
    sock.close(). g  H/ l5 V2 X. h
* j5 [/ h; L3 c# u8 [) b
s=raw_input('press any key to continue...')
0 o9 g7 S  ?2 ~: m) c8 W' a
9 a0 Q0 G; J0 I+ V' W
, F8 [9 ^; ?- K; V5 \/ [
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-21 04:57 , Processed in 0.500467 second(s), 50 queries .

回顶部