CISCN2021 部分逆向WP

本文探讨了加密技术,使用ARC4算法进行数据混淆,并通过动调分析发现解密规律。此外,还介绍了数独游戏的解决过程,包括找到有效的数独解决方案和利用数学规律推导解密模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

glass

image-20210519014709796

调用了native-lib

libnative.so拖入ida

image-20210515220609878

image-20210515220632511

第二次变化

写脚本

from Crypto.Cipher import ARC4

data = [0xA3, 0x1A, 0xE3, 0x69, 0x2F, 0xBB, 0x1A, 0x84, 0x65, 0xC2, 
  0xAD, 0xAD, 0x9E, 0x96, 0x05, 0x02, 0x1F, 0x8E, 0x36, 0x4F, 
  0xE1, 0xEB, 0xAF, 0xF0, 0xEA, 0xC4, 0xA8, 0x2D, 0x42, 0xC7, 
  0x6E, 0x3F, 0xB0, 0xD3, 0xCC, 0x78, 0xF9, 0x98, 0x3F, 0x00]

arr = []

key = b'12345678'*32
cipher = ARC4.new(key)


for i, v in enumerate(data):
    arr.append(v ^ (0x31 + (i % 8)))

print(arr)

arr2 = [arr[i*3:i*3+3] for i in range(len(arr)//3)]


myarrrr = []

for i in arr2:
    myarr = i
    myarr[1] = myarr[1] ^ myarr[0]
    myarr[2] = myarr[2] ^ myarr[1]
    myarr[0] = myarr[0] ^ myarr[2]
    print(myarr)
    myarrrr = myarrrr + myarr

print(myarrrr)


bb = bytes(myarrrr)

print(cipher.decrypt(bb))

baby.bc

clang baby.bc

得到的文件拖入ida

image-20210515220913481

动调下来发现fillnumber是要有两位为0

docheck

image-20210515221011056

image-20210515221024931

行列不重复,数独游戏

image-20210515221100847

image-20210515221109419

得到的数独图

IMG_0784

数独求解

14253

53142

35421

21534

42315

4,3改0

md5得到flag

gift

ida 7.6支持go语言
在DIE检查下发现是go语言写的
这里用idafree7.6打开
出来了这玩意

image-20210521015415737
main_main函数

image-20210521015729353

off_228230的值

image-20210521015758741

v16的值

image-20210521020354535

main_wtf函数

image-20210521015935144

动调下来,猜测是指数增长,至于函数是什么,不知道

先分析wtf

a1==a4-1是是否进入wtf循环的判断

这个nnn的算术式经动调发现只是不断+1,且0x10+1=0,即nnn在0-0x10之间取值,一共17个数

goooo函数是判断是否nnn变量要+1

把call wtf函数patch掉发现只会输出2222222222

main_main函数

v14经过函数传参发现肯定和wtf指数增长有关,同时数值的不断变大,也很好验证这点

byte_2239c0里面是ascii码表

动调下来发现参数为1 3 6 9 0A 0B 0C 0D 0E时对应的nnn值为2 3 2 2 6 3 4 0 2

猜测规律:(4(i-1)+2(i-1))%17

写脚本

data = [0x54, 0x5E, 0x52, 0x4, 0x55, 5, 0x53, 0x5F, 0x50, 7, 0x54, 0x56, 0x51, 2, 3, 0]
d = [1,3,6,9,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x14,0x19,0x1E,0x28,0x42,0x66,0x0A0, 0x936,0x3D21,0x149A7,0x243AC,
0x0CB5BE,0x47DC61,0x16C0F46,0x262C432,0x4ACE299,0x10FBC92A,0x329ECDFD,0x370D7470]
flag=''
for j in d:
    flag+=chr(data[(4**(j-1)+2**(j-1))%17]^0x66)

print(flag)
#4b445b3247c45344c54c44734445452c
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值