Jche
qwqqqqqq

多个ELF文件分析处理与自解密IDApython使用

2021-12-15 归纳

starts

这篇其实是对normal11的wp的一个复现,因为学习到了很多没接触过的东西所以想做一个归纳,以后查看的时候也比较方便。wp写的比较简略,只是给了一个大致的思路,需要搞懂还是要手操一遍才会发现自己哪里不会。

多可执行文件的分析处理

首先是关键代码不在main里面,main函数里有很复杂的代码,看起来并不像关键代码。这里可以在start开始下断点然后跟进看会先走哪里。跟着wp查看init(main)函数前调用的函数,点进去看调用了一个可疑函数sub_400976,然后通过问和查资料了解了一下这段代码的意思。

就是从结尾开始读取12936个字节,当作文件运行。也就是这个文件里有两个可执行文件(ELF).可以使用winhex来把第二个ELF文件抠出来,单独分析。把文件拖进winhex里,从ELF头选中整个文件,右击编辑另存为到新的文件里。

SMC自解密与IDApython的使用

重新使用ida查看新生成的文件的关键代码这时候就能看到一个SMC自解密,即为这个encrypt。

上网查了一下什么是SMC自解密。即自修改代码,简而言之就是程序中的部分代码在运行前是被加密成一段数据,不可反编译,通过程序运行后执行相关解码代功能,对加密的代码数据进行解密,让其恢复正常功能。这里使用idapython来进行解密。wp里的idapython指令是ida7.5以前的指令版本,我这里使用的是ida7.6,所以不能使用旧版的指令,顺带学习了一下idapython的使用。

1
2
3
4
5
addr = 0xAF0 #encrypt的地址
for i in range(310):
ida_bytes.patch_byte(addr+i+20,idc.get_wide_byte(addr+i+20)^i)
#idc.get_wide_byte(addr):以字节为单位获取地址处的值,旧版中为Byte(addr)
#修改指令的值:ida_bytes.patch_byte(addr,value)(addr,value):修改addr地址的值为value.每次修改一个字节

详细了解idapython这些的用法可以看看这一篇

https://www.cnblogs.com/iBinary/p/14642662.html

IDApython run后查看汇编,这里还有一个字节(地址:B14)影响了反编译,把这个字节nop掉。

对encrypt函数按P从当前地址处解析成函数,再按U解析成未定义的内容。就可以成功反编译代码了,就是一个rc4加密,密文和密钥都给清楚了,还是比较容易分析的。但离谱的是wp的脚本竟然是用c写的,这时候一定要用py整个脚本自己写出来。

RC4解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
key = 'hgame!@#'
T = [key[i%len(key)] for i in range(256)]
S = [i for i in range(256)]
text_lenth = 27
key_list = []
text = [67,36,-27,-95,-59,29,114,-46,40,-17,-66,-22,-91,-105,68,96,-39,15,44,111,94,38,-77,10,-4,-44,-77]

j = 0
for i in range(256):
j = (j + S[i] + ord(T[i])) % 256
temp = S[j]
S[j] = S[i]
S[i] = temp

i=0
j=0
for k in range(text_lenth):
i = (i+1) % 256
j = (j+S[i]) % 256
temp = S[j]
S[j] = S[i]
S[i] = temp
t = (S[i]+S[j]) % 256
key_list.append(S[t])

ciphertext = [text[i]^key_list[i] for i in range(27)]
for i in range(27):
ciphertext[i] &= 0xff #因为这里计算出的ciphertext明文是负数,想要转化成chr必须进行高位清零,不然会报错
ciphertext = [chr(i) for i in ciphertext]
print(''.join(ciphertext))

flag:hgame{th1s_f4ke_re4l_w0rld}

END

知识在题目里会越来越综合着去使用,每次都要把东西搞清楚记下来捏。

< PreviousPost
csapp-pra1
NextPost >
Z3约束求解器
CATALOG
  1. 1. starts
  2. 2. 多可执行文件的分析处理
  3. 3. SMC自解密与IDApython的使用
  4. 4. RC4解密
  5. 5. END