457 lines
16 KiB
NASM
457 lines
16 KiB
NASM
.section .ikea
|
|
FLEN: db 65
|
|
paX: db 23
|
|
BLKSZ: db 12
|
|
b00ts: db 47
|
|
c5d: db 225,204,82,249,67,214,139,164,154,116,172,47,62,84,45,3,47,104,35,84,93,44,34,6,25,163,30,206,78,117,5,225,233,23,152,55,146,238,226,49,74,173,199,34,15,78,84,81,161,96,220,110,128,201,46,27,123,41,191,6,123,58,89,119,69
|
|
kallax: db 3,0,0,2,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,1,0,0
|
|
billy: db 166,241,180,132,190,47,251,88,10,46,127,195,92,216,151,226,103,173,3,218,0,14,199,119,228,111,214,104,131,252,134,152,225,52,39,60,56,179,4,144,24,203,233,156,167,91,146,254,73,27,187,123,113,40,83,41,1,81,22,202,201,176,100,158,87,50,128,182,84,209,55,240,20,62,51,184,75,220,175,192,12,172,5,204,61,186,30,154,255,101,213,208,67,145,23,36,170,141,108,212,181,193,82,37,74,211,109,155,168,221,138,207,121,130,198,9,188,164,124,249,217,157,110,139,210,229,8,116,93,6,178,29,70,2,129,53,183,197,99,95,38,244,65,125,85,49,194,94,11,219,148,215,115,223,26,140,44,245,19,15,248,86,7,205,253,171,160,169,246,105,191,54,243,239,238,79,13,242,143,72,68,25,227,97,34,31,161,196,32,147,126,78,71,57,159,137,114,42,230,250,117,106,59,17,133,98,16,177,136,90,232,174,80,206,185,234,107,76,35,162,237,58,200,163,89,77,222,142,102,21,189,122,48,224,165,69,64,247,149,66,18,236,153,135,96,33,28,235,231,150,120,118,112,63,45,43,177,88,7,134,38,179,127,126,41,20,25,233,37,141,82,124,215,206,128,237,239,19,227,180,83,248,249,165,57,228,232,161,94,6,192,142,64,200,77,42,132,4,221,153,65,48,238,135,89,27,70,122,13,210,16,155,160,119,17,240,242,188,251,51,107,22,208,162,197,230,39,229,146,157,168,76,67,105,49,213,96,241,109,104,87,125,68,44,66,140,26,136,143,203,245,211,183,10,193,43,100,172,171,28,85,98,226,151,73,236,91,40,198,110,219,114,117,111,23,60,101,244,62,0,47,186,175,174,191,167,52,148,189,173,61,194,250,231,130,54,50,187,93,185,9,218,255,214,149,106,32,145,71,31,209,202,29,154,118,190,201,56,12,204,84,5,115,246,58,14,166,103,235,170,147,247,53,196,2,99,3,92,199,150,97,46,30,131,35,176,81,78,222,133,59,18,178,253,79,182,123,75,217,163,137,113,223,95,21,252,63,195,158,121,36,34,205,184,224,129,102,11,8,243,225,159,254,33,181,112,90,74,216,138,120,80,24,1,220,156,139,72,55,207,164,86,69,234,169,144,108,15,212,152,116,45,58,14,250,180,0,171,247,215,46,166,50,118,73,231,33,7,223,79,242,113,61,88,177,2,147,202,18,15,167,152,101,27,183,220,158,30,224,128,153,198,187,6,178,22,34,232,210,5,191,219,110,226,244,9,117,45,248,245,8,71,161,124,205,105,69,92,241,132,246,81,51,142,20,37,172,208,160,75,62,53,42,13,236,193,80,144,181,151,155,235,170,141,59,189,41,148,87,233,197,109,123,253,206,19,86,126,188,254,195,182,133,100,130,55,116,201,4,112,131,225,96,125,114,60,176,194,149,21,211,156,200,134,216,240,111,28,243,140,68,255,237,3,102,10,64,207,238,12,67,32,29,99,239,162,164,174,120,115,90,190,230,184,89,228,78,221,36,107,52,157,95,17,108,74,234,145,185,54,154,229,76,251,94,23,218,137,204,26,136,70,222,186,165,91,39,179,173,163,85,66,24,168,150,72,47,199,139,119,217,169,122,82,40,214,213,175,252,56,209,146,63,57,11,138,127,104,31,1,159,97,83,249,196,106,48,43,227,143,98,16,212,135,121,84,44,35,203,129,93,38,25,192,103,77,65,49,255,148,204,174,252,10,233,164,253,76,113,9,187,33,51,20,87,196,59,193,27,221,116,40,107,37,69,38,172,129,56,72,194,119,142,203,168,224,120,133,156,247,195,166,143,70,241,126,118,90,191,186,235,234,104,100,210,34,207,152,246,208,229,109,64,57,190,160,44,140,132,139,28,62,79,92,182,167,19,202,238,60,111,228,213,163,189,237,14,135,13,58,15,150,81,48,42,226,93,211,236,21,157,217,250,231,24,185,68,7,198,225,138,219,192,249,171,105,242,26,106,77,197,95,200,245,180,201,179,43,88,244,136,147,6,121,39,153,223,36,146,232,144,89,161,251,218,178,181,215,12,78,22,230,176,159,169,99,80,17,206,35,114,66,212,173,85,53,52,222,127,31,125,103,82,243,71,8,155,83,29,0,108,254,18,154,84,177,115,94,214,101,46,188,102,73,1,170,97,5,151,134,98,45,4,131,91,65,54,32,16,205,141,49,220,158,137,124,112,23,2,209,130,67,199,122,227,41,11,184,96,47,183,149,239,110,25,175,145,123,50,30,240,165,74,55,3,216,128,117,63,248,162,86,75,61,144,192,167,72,80,203,160,78,18,82,208,212,222,235,228,84,161,12,5,73,132,239,89,252,56,21,233,102,187,231,36,2,74,246,39,85,1,130,110,0,97,226,240,156,254,151,47,31,205,137,150,224,64,79,206,123,75,159,202,111,214,183,193,220,67,140,55,3,182,93,136,200,135,127,117,145,17,8,204,34,38,115,100,255,114,26,43,249,68,46,25,186,44,19,91,210,42,32,185,81,7,52,165,90,71,178,147,27,195,98,124,134,216,163,177,45,103,62,170,173,108,139,146,232,10,229,121,131,16,191,94,237,190,181,245,171,230,57,172,247,122,107,154,168,169,213,217,209,238,241,201,194,225,95,158,20,133,86,40,128,125,179,50,157,242,142,243,129,174,218,223,116,54,37,175,118,99,24,13,104,23,164,120,184,119,66,180,87,77,253,244,251,101,88,83,215,29,248,152,59,198,166,92,69,48,4,143,138,76,30,176,250,65,49,211,199,221,109,227,22,162,113,41,11,219,148,96,58,197,149,61,15,196,141,70,35,9,188,153,105,33,6,234,207,155,126,51,28,236,189,112,106,63,60,53,14,133,211,196,173,138,240,254,105,34,251,116,151,242,225,122,106,127,120,33,36,40,56,130,156,252,207,29,219,227,100,149,46,186,176,70,51,200,101,230,136,109,67,243,21,234,134,93,50,150,64,74,19,24,141,155,168,241,25,18,16,171,175,121,201,245,255,187,115,82,3,226,107,43,154,124,42,145,52,32,182,91,157,62,237,76,75,220,1,45,85,218,193,54,2,35,253,90,163,58,113,28,203,167,98,4,162,152,189,87,217,146,123,49,89,0,41,192,13,214,61,9,47,205,222,147,38,231,246,199,174,39,129,232,114,135,92,83,55,14,185,238,224,102,161,78,53,216,159,190,65,131,165,139,80,158,81,212,63,140,79,30,26,143,233,248,71,249,22,247,77,180,166,179,197,236,223,244,66,6,125,183,170,137,213,160,86,250,195,119,27,12,208,210,37,177,169,97,48,228,215,112,110,84,59,5,209,221,10,229,144,103,11,153,72,198,164,118,69,7,191,132,104,23,172,148,96,17,202,194,184,88,20,188,126,73,235,204,108,60,31,15,8,178,128,94,44,206,111,95,68,239,181,142,117,99,57
|
|
.section .bss.shuffled
|
|
IN: rb 65 CAND: rb 65 BLK: rb 12 RND: rb 12 SA: rb 97 SB: rb 89 SP: rb 97 KA: rb 2 KB: rb 2 PK: rb 2 DUMMY: rb 64 SF: rb 61 PASS: rb 1
|
|
.section .text
|
|
mov PASS, 0
|
|
mov sumct, 0
|
|
mov term, 0
|
|
mov i, 0
|
|
precs_i:
|
|
cmp i, FLEN
|
|
jl tradfi
|
|
jmp tradfine
|
|
tradfi:
|
|
load t0, c5d[i]
|
|
add sumct, t0
|
|
add sumct, term
|
|
add term, paX
|
|
add i, 1
|
|
jmp precs_i
|
|
tradfine:
|
|
mod sumct, 256
|
|
mov chk, sumct
|
|
xor chk, b00ts
|
|
cmp 0, chk
|
|
jl union_work
|
|
jmp checkin
|
|
union_work:
|
|
mov i, 0
|
|
fw_init:
|
|
mov t1, i
|
|
mod t1, 61
|
|
store SF[i], t1
|
|
add i, 1
|
|
cmp i, 61
|
|
jl fw_init
|
|
mov z, paX
|
|
xor z, paX mov i, 0
|
|
fw_i:
|
|
cmp i, 64
|
|
jl fw_do
|
|
jmp checkin
|
|
fw_do:
|
|
load d, DUMMY[i]
|
|
xor d, z
|
|
store DUMMY[i], d
|
|
add i, 1
|
|
jmp fw_i
|
|
checkin:
|
|
mov offset, 0
|
|
mov bidx, 0
|
|
blk_check:
|
|
cmp offset, FLEN
|
|
jl do_block
|
|
jmp compare
|
|
do_block:
|
|
mov lenb, 0
|
|
mov i, 0
|
|
drucker0:
|
|
cmp i, BLKSZ
|
|
jl cc_check_flen
|
|
jmp cc_done
|
|
cc_check_flen:
|
|
mov t1, offset
|
|
add t1, i
|
|
cmp t1, FLEN
|
|
jl cc_copy
|
|
jmp cc_done
|
|
cc_copy:
|
|
add lenb, 1
|
|
add i, 1
|
|
jmp drucker0
|
|
cc_done:
|
|
mov i, 0
|
|
blk_copy:
|
|
cmp i, lenb
|
|
jl blk_copy_do
|
|
jmp stackfault
|
|
blk_copy_do:
|
|
mov t1, offset
|
|
add t1, i
|
|
load t2, IN[t1]
|
|
store BLK[i], t2
|
|
add i, 1
|
|
jmp blk_copy
|
|
stackfault:
|
|
mov flags, paX
|
|
mov t3, bidx
|
|
add t3, bidx
|
|
add t3, bidx
|
|
add flags, t3
|
|
add flags, 0x5A
|
|
mov t4, flags
|
|
mod t4, 2
|
|
mov use_billy, t4
|
|
mov t5, flags
|
|
mod t5, 4
|
|
mov use_roll, 0
|
|
cmp 1, t5
|
|
jl set_roll
|
|
jmp steuerfahndung
|
|
set_roll:
|
|
mov use_roll, 1
|
|
steuerfahndung:
|
|
mov billy_id, paX
|
|
mov t6, bidx
|
|
add t6, bidx
|
|
add t6, bidx
|
|
add billy_id, t6
|
|
mod billy_id, 32
|
|
load billy_idx, kallax[billy_id]
|
|
mov t0, 0
|
|
mov i7, 0
|
|
ka_i7:
|
|
cmp i7, 7
|
|
jl selfservice
|
|
jmp r8none7
|
|
selfservice:
|
|
add t0, bidx
|
|
add i7, 1
|
|
jmp ka_i7
|
|
r8none7:
|
|
mov t0b, paX
|
|
add t0b, t0
|
|
add t0b, 11
|
|
store KA[0], t0b
|
|
mov t1b, paX
|
|
xor t1b, 0xA5
|
|
store KA[1], t1b
|
|
mov t2b, 0
|
|
mov i9, 0
|
|
kb_i9:
|
|
cmp i9, 9
|
|
jl kb_add
|
|
jmp kb_done9
|
|
kb_add:
|
|
add t2b, bidx
|
|
add i9, 1
|
|
jmp kb_i9
|
|
kb_done9:
|
|
mov t2b2, paX
|
|
add t2b2, t2b
|
|
add t2b2, 23
|
|
store KB[0], t2b2
|
|
mov t3b, paX
|
|
add t3b, paX
|
|
add t3b, paX
|
|
add t3b, paX
|
|
add t3b, paX
|
|
add t3b, 0x3D
|
|
store KB[1], t3b
|
|
mov b13, 0
|
|
mov i13, 0
|
|
pk_i13:
|
|
cmp i13, 13
|
|
jl pk_add13
|
|
jmp pk_done13
|
|
pk_add13:
|
|
add b13, bidx
|
|
add i13, 1
|
|
jmp pk_i13
|
|
pk_done13:
|
|
mov pk0, paX
|
|
add pk0, b13
|
|
add pk0, 57
|
|
store PK[0], pk0
|
|
mov b17, 0
|
|
mov i17, 0
|
|
pk_i17:
|
|
cmp i17, 17
|
|
jl pk_add17
|
|
jmp pk_done17
|
|
pk_add17:
|
|
add b17, bidx
|
|
add i17, 1
|
|
jmp pk_i17
|
|
pk_done17:
|
|
mov pk1, paX
|
|
add pk1, b17
|
|
add pk1, 91
|
|
store PK[1], pk1
|
|
mov i, 0
|
|
init_SA:
|
|
mov t0, i
|
|
store SA[i], t0
|
|
add i, 1
|
|
cmp i, 97
|
|
jl init_SA
|
|
mov i, 0
|
|
mov j, 0
|
|
ksa_a:
|
|
load t0, SA[i]
|
|
load kbyte, KA[i]
|
|
add j, t0
|
|
add j, kbyte
|
|
mod j, 97
|
|
load t1, SA[j]
|
|
store SA[j], t0
|
|
store SA[i], t1
|
|
add i, 1
|
|
cmp i, 97
|
|
jl ksa_a
|
|
mov i, 0
|
|
init_SB:
|
|
mov t0, i
|
|
store SB[i], t0
|
|
add i, 1
|
|
cmp i, 89
|
|
jl init_SB
|
|
mov i, 0
|
|
mov j, 0
|
|
cult:
|
|
load t0, SB[i]
|
|
load kbyte, KB[i]
|
|
add j, t0
|
|
add j, kbyte
|
|
mod j, 89
|
|
load t1, SB[j]
|
|
store SB[j], t0
|
|
store SB[i], t1
|
|
add i, 1
|
|
cmp i, 89
|
|
jl cult
|
|
mov i, 0
|
|
mov jA, 0
|
|
mov iB, 0
|
|
mov jB, 0
|
|
mov k, 0
|
|
prga_mask:
|
|
cmp k, lenb
|
|
jl nackt
|
|
jmp stage_billy
|
|
nackt:
|
|
add i, 1
|
|
mod i, 97
|
|
load t0, SA[i]
|
|
add jA, t0
|
|
mod jA, 97
|
|
load t1, SA[jA]
|
|
store SA[jA], t0
|
|
store SA[i], t1
|
|
load t2, SA[i]
|
|
load t3, SA[jA]
|
|
add t2, t3
|
|
mod t2, 97
|
|
load kAbyte, SA[t2]
|
|
add iB, 1
|
|
mod iB, 89
|
|
load u0, SB[iB]
|
|
add jB, u0
|
|
mod jB, 89
|
|
load u1, SB[jB]
|
|
store SB[jB], u0
|
|
store SB[iB], u1
|
|
load u2, SB[iB]
|
|
load u3, SB[jB]
|
|
add u2, u3
|
|
mod u2, 89
|
|
load kBbyte, SB[u2]
|
|
load x, BLK[k]
|
|
xor x, kAbyte
|
|
xor x, kBbyte
|
|
store BLK[k], x
|
|
add k, 1
|
|
jmp prga_mask
|
|
stage_billy:
|
|
cmp 0, use_billy
|
|
jl do_billy
|
|
jmp tombola
|
|
do_billy:
|
|
mov base, 0
|
|
mov i, 0
|
|
knut:
|
|
cmp i, billy_idx
|
|
jl knut_add
|
|
jmp billy_i
|
|
knut_add:
|
|
add base, 256
|
|
add i, 1
|
|
jmp knut
|
|
billy_i:
|
|
mov i, 0
|
|
billy_do:
|
|
cmp i, lenb
|
|
jl billy_apply
|
|
jmp tombola
|
|
billy_apply:
|
|
load byte, BLK[i]
|
|
mov t0, base
|
|
add t0, byte
|
|
load t1, billy[t0]
|
|
store BLK[i], t1
|
|
add i, 1
|
|
jmp billy_do
|
|
tombola:
|
|
cmp 0, use_roll
|
|
jl do_roll
|
|
jmp stage_perm
|
|
do_roll:
|
|
mov acc, paX
|
|
mov t0, bidx
|
|
add t0, bidx
|
|
add t0, bidx
|
|
add acc, t0
|
|
add acc, 17
|
|
mov step, paX
|
|
mov t5b, bidx
|
|
add t5b, bidx
|
|
add t5b, bidx
|
|
add t5b, bidx
|
|
add t5b, bidx
|
|
add step, t5b
|
|
add step, 1
|
|
mov i, 0
|
|
roll_i:
|
|
cmp i, lenb
|
|
jl imbus
|
|
jmp stage_perm
|
|
imbus:
|
|
load x, BLK[i]
|
|
mov y, x
|
|
xor y, acc
|
|
store BLK[i], y
|
|
add acc, x
|
|
add acc, step
|
|
mod acc, 256
|
|
add i, 1
|
|
jmp roll_i
|
|
stage_perm:
|
|
mov i, 0
|
|
init_SP:
|
|
mov t0, i
|
|
store SP[i], t0
|
|
add i, 1
|
|
cmp i, 97
|
|
jl init_SP
|
|
mov i, 0
|
|
mov j, 0
|
|
ksa_sp:
|
|
load t0, SP[i]
|
|
load kbyte, PK[i]
|
|
add j, t0
|
|
add j, kbyte
|
|
mod j, 97
|
|
load t1, SP[j]
|
|
store SP[j], t0
|
|
store SP[i], t1
|
|
add i, 1
|
|
cmp i, 97
|
|
jl ksa_sp
|
|
mov i, 0
|
|
mov j, 0
|
|
mov k, 0
|
|
prga_sp:
|
|
cmp k, lenb
|
|
jl prga_sp_do
|
|
jmp permute
|
|
prga_sp_do:
|
|
add i, 1
|
|
mod i, 97
|
|
load t0, SP[i]
|
|
add j, t0
|
|
mod j, 97
|
|
load t1, SP[j]
|
|
store SP[j], t0
|
|
store SP[i], t1
|
|
load t2, SP[i]
|
|
load t3, SP[j]
|
|
add t2, t3
|
|
mod t2, 97
|
|
load t4, SP[t2]
|
|
store RND[k], t4
|
|
add k, 1
|
|
jmp prga_sp
|
|
permute:
|
|
mov idx, lenb
|
|
perm_i:
|
|
add idx, -1
|
|
cmp 0, idx
|
|
jl BADRING
|
|
jmp store_block
|
|
BADRING:
|
|
load t0, RND[idx]
|
|
mov t1, idx
|
|
add t1, 1
|
|
mod t0, t1
|
|
load a, BLK[idx]
|
|
load b, BLK[t0]
|
|
store BLK[idx], b
|
|
store BLK[t0], a
|
|
jmp perm_i
|
|
store_block:
|
|
mov i, 0
|
|
wb_i:
|
|
cmp i, lenb
|
|
jl wb_do
|
|
jmp hotdogs
|
|
wb_do:
|
|
mov t1, offset
|
|
add t1, i
|
|
load t2, BLK[i]
|
|
store CAND[t1], t2
|
|
add i, 1
|
|
jmp wb_i
|
|
hotdogs:
|
|
add offset, lenb
|
|
add bidx, 1
|
|
jmp blk_check
|
|
compare:
|
|
mov i, 0
|
|
cmp_i:
|
|
cmp i, FLEN
|
|
jl cmp_do
|
|
jmp ingrid
|
|
cmp_do:
|
|
load a, CAND[i]
|
|
load b, c5d[i]
|
|
cmp a, b
|
|
jl fail
|
|
cmp b, a
|
|
jl fail
|
|
add i, 1
|
|
jmp cmp_i
|
|
ingrid:
|
|
mov PASS, 1
|
|
jmp done
|
|
fail:
|
|
mov PASS, 0
|
|
mov z2, paX
|
|
xor z2, paX
|
|
mov pass2, 0
|
|
pn_outer:
|
|
cmp pass2, 2
|
|
jl pn_begin
|
|
jmp done
|
|
pn_begin:
|
|
mov i, 0
|
|
pn_i:
|
|
cmp i, FLEN
|
|
jl pn_do
|
|
add pass2, 1
|
|
jmp pn_outer
|
|
pn_do:
|
|
load v, CAND[i]
|
|
xor v, z2
|
|
store CAND[i], v
|
|
add i, 1
|
|
jmp pn_i
|
|
done:
|
|
halt
|