攻防世界—刷题(4)

一.hackme

1,查壳

无壳,64位。

2.IDA反编译。

逻辑:对flag进行异或后与byte_6B4270比较。异或的值为while循环后的值,由于比较时,是对应比较,所以while循环在那儿都可以。

3.exp

x=[0x5f,0xf2,0x5e,0x8b,0x4e,0xe,0xa3,0xaa,0xc7,0x93,0x81,0x3d,0x5f,0x74,0xa3,0x9,
   0x91,0x2b,0x49,0x28,0x93,0x67]

flag=""
for i in range(len(x)):
    a=i+1
    c,b=0,0
    while b < a:
        b=b+1
        c=1828812941*c+12345
    flag+=chr((x[i]^c)&0xff)
print(flag)

4.get flag

flag{d826e6926098ef46}

二.BABYRE

1.查壳,

无壳,64位。

2.IDA反编译。

可以看出flag长度为14,关键是judge函数, 但是前面有judge[i]^0xc(这个东西给我整迷了。),跟进judge报错。

直接动调看汇编代码。

这个汇编逻辑还是比较简单的 :看到计算操错有一个xor看edx和ecx的值,

edx就是之前存的14个值,ecx是从0开始依次加一,(也就是对存入的14个值与其下表异或。)
3.exp

x=[0x66,0x6d,0x63,0x64,0x7f,0x6b,0x37,0x64,0x3b,0x56,0x60,0x3b,0x6e,0x70]


flag=""
for i in range(len(x)):
    flag+=chr(x[i]^i)
print(flag)

4.get flag

flag{n1c3_j0b}

三.android-app-100

1.jadx 反编译。

找到关键函数a:分析逻辑可知editable为输入的flag,分别结果经过processObjectArrayFromNative和IsCorrect两个方法从MainActivity中得知这两个为native关键字(native:Java语言和其他语言进行梦幻联动的标志。)

2.改.apk后缀名为.zip 解压。在android-app-100\lib\armeabi中找到.so文件IDA反编译。

 找到两个加密文件。都是一些比较操作。得到字符串ef57f3fe3cf603c03890ee588878c0ec

 3,用夜神模拟器打开apk文件输入ef57f3fe3cf603c03890ee588878c0ec

4.get flag

Sharif_CTF(833489ef285e6fa80690099efc5d9c9d)

四.reverse-for-the-holy-grail-350

1.查壳:无壳,46位。

2.IDA反编译

关键函数在stringMod:

 逻辑:开始的if是flag的0,3,6,9,12,15,18的值为firstchar的值。

然后对flag执行异或循环,异或的值为v7 (v7+=v7%5,起始为666),

之后就是比较,异或后的flag的2,5,8,11,14,17为thirdcher。然后是第二个if可以用爆破得到flag其余位置的值

3.exp

 4.get flag

tuctf{AfricanOrEuropean?}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值