逆向分享 – Reversing.Kr (3-final-ing)

这是最后一篇了,涉及到除Windows之外的很多平台,写完这三篇还是有很大的收获,感觉把自己已有的逆向相关知识好好地总结了一下,前面的两篇

逆向分享 – Reversing.Kr (1)

逆向分享 – Reversing.Kr (2)

Linux

0x00 Easy ELF

这题的校验在8048451函数中

1

拿到flag

2(1)

flag:L1NUX

0x01 SimpleVM

这题用边信道攻击来做,这里是统计执行的指令数,思想是如果最后是一个一个字符进行校验,那么执行指令数最多的那个就是正确的字符了,可以用ptrace,也可以用一个现成的工具pintool,下面是爆破的脚本(摘自网上)

3

字符一个个地爆破

2

flag:id3*ndh

Mac

0x00 HateIntel

这题是ARM指令,对输入的字符串做了四次相同的处理

5

每次的处理是

6

最后与一串值对比

7

写脚本拿到flag

list1 = [0x44, 0xF6, 0xF5, 0x57, 0xF5, 0xC6, 0x96, 0xB6, 0x56, 0xF5, 0x14, 0x25, 0xD4, 0xF5, 0x96, 0xE6, 0x37, 0x47, 0x27, 0x57, 0x36, 0x47, 0x96, 0x03, 0xE6, 0xF3, 0xA3, 0x92]

key = ''

for result in list1:
 for i in xrange(32, 127):
 ch = i
 for j in xrange(4):
 temp = ch * 2
 if temp & 0x100:
 temp |= 1
 ch = temp & 0xFF
 if ch == result:
 key += chr(i)

print key

flag:Do_u_like_ARM_instructi0n?:)

Flash

0x00 Flash Encrypt

用ffdec反编译,在设置中选上自动反混淆,然后选择工具中时间轴查看第一帧的按钮是哪个

8

之后查看该按钮的代码

9

判断的那个值就是需要我们输入的正确值,这样一帧一帧地往下看就可以拿到flag,其实就是对这些数做了一个运算

10

flag:16876

Java

0x00 Multiplicative

先用Jad反编译,得到如下代码

11

通过分析知道是需要溢出,由此写个脚本爆破

from ctypes import *

i = 1L
while True:
 temp = ((2 ** 64) * i + 0xeaaeb43e477b8487L) / 26729
 if ((temp * 26729) % (2 ** 64)) == 0xeaaeb43e477b8487L:
 print c_int64(temp)
 break
 i += 1

flag:-8978084842198767761

未完待续。。。

 

*作者: bird@Hurricane Security  Mottoin授权发布

原创文章,作者:Moto,如若转载,请注明出处:http://www.mottoin.com/article/reverse/88716.html

发表评论

登录后才能评论

联系我们

021-62666911

在线咨询:点击这里给我发消息

邮件:root@mottoin.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code