2018年强网杯初赛 逆向题目 hide writeup (超详细)

这道题有壳,strings搜索是upx3.91。但是不能用upx -d。只好手动脱壳了。

难点在于本题目有反调试,有些函数不能步过。

首先研究壳。


第一句call必须步入。

Sub_44f1c5必须步入。

 

Sub_44F1C5中,


0x44f214的rep指令把0x400000到0x44f248复制到0x800000位置。

0x44f22c处,rbp是0x84efb5。这句话是start处的第二条指令。这里不必步入。如果步入,

在44EFCB处的call    sub_44F020,再步过就会卡死(不知道为什么,奇怪!如果卡死,按ctrl+c可以只是终止而不退出gdb);步入之后可以使用finish命令运行到函数外,即0x44F22E处pop     rcx。

在0x44f22f retn之后,到达0x84f248:  call   0x84f2ac。

0x84f2ac是一开始没有复制的地址,可以考虑是0x84efb5的代码形成的新代码。此处内存开辟是在系统调用mmap处,刚开辟后此处全为0.

此时可以dump出来0x800000处的内存,见dump2.(我修改了ep,va,filesize)

接着运行到0x84f31c:  call   0x84f782,可以步过。

在0x84f339:  jmp    QWORD PTR [r15],跳转到0x40000c

此时可以dump处0x400000处的内存,见文件bindump.so。这就是脱壳后的文件了,但是不能运行,不清楚原因。可以看到ep是0x400890。

 

0x40000c:     syscall(调用号11,sys_mun

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值