QQ登录

只需要一步,快速开始

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

报文拼接与加解密测试

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 17:21 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
# -*- coding: gb2312 -*-7 B6 n! G+ d5 c" U. X8 m/ S
import socket! p; Q2 n" {3 K8 C9 i* l) x2 P
from myutil import *" ~- r5 `- f1 d# R' ]$ m
from binascii import unhexlify as unhex
8 X; A  C2 C% Y# E  s: L# N& ifrom ctypes import *8 a' t2 N6 n! u$ n5 |- S
dll = cdll.LoadLibrary('mydll.dll')9 o. x- U6 ^, q
print 'begin load mydll..'9 r8 X/ x, m" @, S5 b. U
#key' e! L' e7 a4 D  f$ c: a
key='\xF1\xE2\xD3\xC4\xF1\xE2\xD3\xC4'
) I( l' [) p$ \8 _0 V# E" E#output MAC
# N3 ~1 P2 `, {4 d) E+ b# imac='\x00'*84 N, a! u( H) O! Y1 d: b1 C
data='\x00'*8
# D8 F% z3 K4 |: o: X! }3 f( h$ Fpkey=c_char_p()
0 T4 s7 p3 P4 m4 r! Wpdata=c_char_p()" D1 P; \) x3 K
pmac=c_char_p()
8 Y9 Z' ~; v% z8 V8 ?pkey.value=key+ G+ C  P  `0 L2 h
pdata.value=data
# _- w+ w! W' b' G/ ]* F1 Qpmac.value=mac5 g4 L" d0 f4 F, j% z
#pack1
) H5 h. o! d9 R5 w1 D' Fclass pack:9 Q( e  C8 y( Z4 B0 R( M7 F
   pass, U2 G9 d5 v9 Q  D. b3 o
pk=pack()9 @! ~  e7 ]* g
pk.len='00000032'
2 }) [& E6 x" N% _8 Zpk.ID='0001'
( r  U5 F) K8 Tpk.slnum='00000004') @% E6 o3 y% m
pk.poscode='123456781234'* D" l  h: Q+ Y: n2 D
pk.rand='1122334455667788'
9 `" ~# g  X% h6 R% V, b/ B) g! Zpk.psam='313233343536'" E, O! @( X+ ^1 w
pk.kind='0000'0 o! r, i. [- h9 i8 B; J7 ]
pk.ver='000001': I. @4 Q* B# I2 C4 x0 y1 F
pk.time='20140805135601'
+ n, [+ m3 \; T& ^8 P/ k  dpk.mac='06cc571e6d96e12d'
0 q' C' Y4 ~; X: q  Y- x% p0 B* L& C; j
data=unhex(pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time)
  b' x6 w3 p" t9 Z7 o0 H" D#print_hex(data). X' a7 W1 K% Y% a+ b# r0 j7 k
pdata.value=data4 p8 D6 l' u1 r5 M
#cacl MAC
* ^6 S8 N1 N0 O7 Hdll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,42,pmac), S- k. p& ~" M5 s; F
stro= pmac.value6 ^7 Y/ Z" {* [6 q
strtemp=''
7 K% Y' ]0 u% q# l+ j. {" R+ |for c in stro:9 P3 Z* u1 b1 q% Z
    strtemp+="{0:02x}".format(ord(c))
, [: A2 y9 J# o5 C#print strtemp
: N# t5 o6 w5 L4 Q# Q9 `pk.mac=strtemp
$ W) Q/ E' B4 h& t#data to send
$ P" X5 G6 ~5 s& ~$ Psd=pk.len+pk.ID+pk.slnum+pk.poscode+pk.rand+pk.psam+pk.kind+pk.ver+pk.time+pk.mac7 Q7 O+ {- f- I
print  'send1 len is 0x%02x' %(len(sd)/2)
; m# M3 B; I; O" d( }2 A- @8 ^! zprint sd
% L# n5 c0 m! a2 }% U#pack2
; F3 n& K, P( i% R6 dclass pack2:- g3 V& r& T, r/ O+ X1 R9 [
   pass
& u6 [. B8 W0 M- G4 o) ^3 r6 w5 fpk2=pack2()# Y6 O3 P% R! J! ~' ~) N
pk2.len='0000006E'
4 ~! z, E$ V& o; Hpk2.ID='0012'( v& ?- L2 P9 H0 o$ l3 R
pk2.slnum='00000005'+ `: s8 K& U" t
pk2.fatCode='00'  c  p0 ^5 f3 S+ G
pk2.cardASN='0000000000000000'
0 O5 C! B" X+ g4 L5 `pk2.cardType='00'
/ G+ p! T+ ]0 \; V1 _pk2.userNO= '0000000000000000'
3 `- ^( Y, ?2 {% \9 I
+ c0 ?% t! @! o- z/ ]/ z  Q$ lpk2.fileName1='00000000000000000000000000000015'
; W, I- ~0 W: n" c, gpk2.dataLen1='00', }4 a2 M$ z% N8 G; X, n, ?% @2 t
pk2.dataArea1='00000000000000319999990800FB2014080620240806FFFFFFFFFFFFFFFFFFFF'' m9 Z( l7 o* T0 Q/ T6 Y
pk2.fileName2='00000000000000000000000000000016'4 i% a/ L# G& k2 \4 M
pk2.dataLen2='00'+ @/ e/ @% `3 N$ n! V. b
pk2.dataArea2='000003E800FFFF16', N" ^9 H8 v" b! G1 z. l- s
pk2.mac='06cc571e6d96e12d'" E' {) l6 }3 [' X, a
* H$ P) W' b, b* {+ `& W
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)
" F, M* H: J$ h+ T+ s
; s8 [2 }; l5 C+ j% Opdata.value=data24 r7 j' V. L$ i( E1 s4 w: l6 r
#cacl MAC2 h5 Q& C+ C' M5 d1 ~7 ]( W6 i
dll.CurCalc_DES_MAC64(805306481,pkey,0,pdata,102,pmac)" h7 H! o6 B2 q" U
stro= pmac.value- x+ Z$ _9 g) j8 U1 n$ ?0 }$ x" @
strtemp=''# ?6 X1 B; T8 [3 \. q
for c in stro:
& @  _. h& ~& E( r% s    strtemp+="{0:02x}".format(ord(c))! a; z) O- q! Z' z# y: E/ V, _& o
#print strtemp# G/ [( C. N% U1 |( Q7 `. e
pk2.mac=strtemp
1 L/ W2 y, B3 f: o" x5 y#data to send: Q% g2 d2 N% E' \. q; A
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
: u5 G* ~) G/ J& {5 B
5 ^9 W* i5 {& l* gprint  'send2 len is 0x%02x' %(len(sd2)/2)4 ^( @. c& p9 Q+ V3 @6 Z" @5 g
print sd2
! L$ |$ i0 B, k! }
7 C) Z: m8 C9 `' U/ o+ h+ g2 o6 I3 O& [& P+ L
#PORT="192.168.60.37"  a& l( l+ |4 ~- [
#PORT="localhost"
& N9 D  {6 m. P. |' ~HOST, PORT = "192.168.51.28", 5800( M. E6 z% K5 n  R) \
# Create a socket (SOCK_STREAM means a TCP socket)0 ^' o! j$ L8 i/ C4 f: {3 H- G1 H2 R
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)6 f% O% P2 w* k
try:
9 u, ~  \# g+ b; N$ O$ V+ O. N+ z    # Connect to server and send data
2 x% Z4 v/ e6 k& w- A    sock.connect((HOST, int(PORT))8 v( w# m) t4 }  a! n2 S9 g
        #data= "123456789"/ t! {9 _3 V" b9 b
        #s = struct.pack('bbb',1,2,3)& `$ a7 M' C" ]9 \- }# i; _& @1 V
    sock.send(sd.decode('hex'))
2 C- `% J! Q6 B. h; u, y    print "Sent1 OK:"- l2 u! p% p1 X0 z# Q- ~% |6 t9 P
    print sd% _/ N  e* M; C: X
    # Receive data from the server and shut down
. Q& V- h- u' _3 p% Q    received = sock.recv(1024)
; |/ l) s( U4 E4 M; D0 n* X    print "Received:"8 F) B9 n' Q) H( l7 i: e! w
    print_hex(received)
2 ?' {+ G8 A9 r5 T3 T    print  'received len is 0x%02x' %(len(received))
7 ]; |2 r9 ]+ v# V" t    print  'received data analysis...'+ V! b1 P8 G4 b- l9 d: Z, G- C" O8 g
    re1=received[0:4]
3 F8 Q2 s! H" B    print_hex(re1)8 H' D/ g+ M- \+ g4 d* g
    re1=received[4:6]$ v0 j6 u/ x3 ^
    print_hex(re1)
4 u  P3 U2 b0 c! Q1 o    re1=received[6:10]- z/ K# v& U0 Q9 H
    print_hex(re1)8 T1 b' Y9 J; ]" R/ r+ j( f
    re1=received[10:16]5 j% M, o6 T8 |8 m. I& Z
    print_hex(re1)
! p4 y- m, M7 M! D. r4 w$ X1 a7 |- X& q# H: y
    #pack2 send
2 p' \$ b9 }) b  C; R1 B! o) |    sock.send(sd2.decode('hex'))# u1 [: l, ]$ n+ O. l" G
    print "Sent2 OK:"
8 s8 h: \. P( ^    print sd28 G, B, ?. V! v' `
    # Receive data from the server and shut down: r& b: ~1 g4 w% _, V8 Y- g
    received1 = sock.recv(1024)/ a# k$ F3 Y6 m, g
    print "Received1:"
3 ?- y8 U0 J* [9 \7 k; H6 J+ ]: l4 A    print_hex(received1)0 t/ o! t/ e9 f3 ~& ?, W
    print  'received1 len is 0x%02x' %(len(received1))% b% \) f$ i. A* A# C( d
& F2 H" `' Q! s! m$ W- y# C
finally:
* [3 I" H) e, |9 L    sock.close()
1 |* W) V, k5 t& K( E3 }6 l( q3 I& h1 p# ^4 Z% q* D, k
s=raw_input('press any key to continue...')
1 |7 Z1 {  R- T  {3 f: w, q5 U
% U/ O3 S* N  s- I5 c8 o* Y
$ g1 Q8 i/ L: r# K# N# s
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-19 15:48 , Processed in 0.409628 second(s), 51 queries .

回顶部