当前位置: 代码迷 >> 综合 >> xctf(ddctf) Windows_Reverse2 脱壳
  详细解决方案

xctf(ddctf) Windows_Reverse2 脱壳

热度:18   发布时间:2023-10-19 20:33:12.0

1.星期天闲着没事做做这个

od直接开trace

然后写个脚本化简下文件

import re
def isdigit(a):try:	int(a,10)return 1except Exception as e:try:	int(a,16)return 1except Exception as e1:return 0
f1=open("ddctf-1.txt","rb")
f2=open("ddctf-3.txt","a+")
line=f1.readline()
while line:line=f1.readline().replace('\r\n','\n')if isdigit(line[:5])!=0:if re.match( r'00AF(.*) main', line, re.M|re.I)==None:#print(line)a=1else:#print(list(line))f2.write(line)else:#print(list(line))f2.write(line)
f1.close()
f2.close()

直接翻了翻

xctf(ddctf) Windows_Reverse2 脱壳

看这地址跳这么远,就猜是oep了

od插件直接dump出来,

xctf(ddctf) Windows_Reverse2 脱壳

dump出来就像下面的鬼样子xctf(ddctf) Windows_Reverse2 脱壳

用了下ImportRec 去修复IAT,并没有什么鸟用,看来还得手工修复

在od中main里面去找iat

xctf(ddctf) Windows_Reverse2 脱壳

就在0x2000这么个地方

结果dump出来不对就往后面翻了翻

xctf(ddctf) Windows_Reverse2 脱壳

结果0x2320那么个地方就是

所以直接把0x2320位置的数据copy过去

xctf(ddctf) Windows_Reverse2 脱壳

再选个位置建import表

xctf(ddctf) Windows_Reverse2 脱壳

xctf(ddctf) Windows_Reverse2 脱壳

最后NT结构里面去改下偏移和size

xctf(ddctf) Windows_Reverse2 脱壳

结果改完了,它还要给我日怪

xctf(ddctf) Windows_Reverse2 脱壳

发现运行不成功,还得把重定位去掉。

xctf(ddctf) Windows_Reverse2 脱壳

xctf(ddctf) Windows_Reverse2 脱壳

很明显base64的标志,只是变了下把输入的转成hex,然后在base64编了他么的一下

xctf(ddctf) Windows_Reverse2 脱壳

xctf(ddctf) Windows_Reverse2 脱壳

2.总结一下

import 表

xctf(ddctf) Windows_Reverse2 脱壳

指向的

xctf(ddctf) Windows_Reverse2 脱壳

这个地方是rva,在010中看得(rva-对应得offset+ 物理对应得offset)

OrginalFirstThunck和FirstThunk都可以指向同一个地方