CTF | 逆向入门第二篇
逆向入门第二篇 hide strings 查看到有壳upx 3.91 脱壳 不能使用upx -d 直接脱。 运行起来相当于脱壳看,因此可以用 dd 把data和text两段dump下来之后拼在一起,可以在IDA里面看。但实际上文件结构会被破坏,因为是运行时镜像,动态脱壳都有这样的问题。所以动态调试还是使用有壳的。dd cat /proc/(pid hide)/maps 可以查看进程的内存映射 脱壳命令,其中的地址就是各段的地址,因为是静态的,因此都是不变的,可以直接复制: sudo dd if=/proc/$(pidof hide)/mem of=hide_dump1 skip=4194304 bs=1c count=827392 sudo dd if=/proc/$(pidof hide)/mem of=hide_dump2 skip=7110656 bs=1c count=20480 cat hide_dump1 hide_dump2 >hide_dump 看到别人说gdb dump binary 更方便,不过没试过(不会) ptrace反调试 ptrace介绍: ptrace提供了一种使父进程得以监视和控制其它进程的方式,它还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。使用ptrace,你可以在用户层拦截和修改系统调用(sys call),修改它的参数,插入代码给正在运行的程序以及偷窥和篡改进程的寄存器和数据段。 使用strace ptrace 相关的反调试 需要把反调试过掉 gdb 中 catch syscall ptrace 设置断点 可以发现程序在cmp eax,0 处断下,此时通过set $eax=0,使程序可以往下执行。 c ,再修改一次,就可以成功过掉反调试了>< 队友说,ptrace 大概就是看eax有没有改变?一般就是cmp eax,0的地方了 附gdb 操作 hb *0x start地址 下硬件断点 record full (只有在静态执行时有用) 之后可以倒着执行也可以正着执行 rsi ni si reverse-continue 倒着执行回到上一个断点 ELF:init区,在main 执行前会执行 字符串交叉引用 enter flag 看到哪些地方引用,找到藏起来的代码 p 出来F5有问题,算是IDA的bug吧。...