GFSJ1100-【easyre-xctf】
UPX
脱壳后打开
int __fastcall main(int argc, const char **argv, const char **envp)
{
_main();
puts_0("Very easy upx!");
puts_0("Then flag?");
system_0("pause");
return 0;
}
查看字符串 能看到
d_0n3_4nd_tw0}
看到这个 是part2 那有2就有1
f_part2 db 'd_0n3_4nd_tw0}',0
__int64 __fastcall part1()
{
return 6363680261978287206LL;
}
__int64 __fastcall part1()
{
return 'XPU{galf';
}
看看汇编有没有落下的
.text:0000000000401530 ; =============== S U B R O U T I N E =======================================
.text:0000000000401530
.text:0000000000401530 ; Attributes: bp-based frame
.text:0000000000401530
.text:0000000000401530 ; __int64 __fastcall part1()
.text:0000000000401530 public _Z5part1v
.text:0000000000401530 _Z5part1v proc near
.text:0000000000401530
.text:0000000000401530 var_10 = qword ptr -10h
.text:0000000000401530 var_8 = dword ptr -8
.text:0000000000401530
.text:0000000000401530 push rbp
.text:0000000000401531 mov rbp, rsp
.text:0000000000401534 sub rsp, 10h
.text:0000000000401538 mov rax, 'XPU{galf'
.text:0000000000401542 mov [rbp+var_10], rax
.text:0000000000401546 mov [rbp+var_8], 'n4_'
.text:000000000040154D add rsp, 10h
.text:0000000000401551 pop rbp
.text:0000000000401552 retn
.text:0000000000401552 _Z5part1v endp
能看到还真有但是提取出来的这个怎么感觉不太对
XPU{galfn4_d_0n3_4nd_tw0}
原来是被倒过来了 再倒过来就可以了
原理 x86架构 采用小端方式存储 最低有效字节放在低地址
flag
flag{UPX_4nd_0n3_4nd_tw0}
评论