RE入门

Author Avatar
Aryb1n 8月 02, 2017

学习计划

脱壳

http://bbs.pediy.com/thread-20366.htm
这个看了还是一头雾水…在网上down了一份pdf,叫做脱壳的艺术,正在读(百度随便搜)

反静态 反调试 壳

http://bbs.pediy.com/thread-66575.htm
这个很不错,感觉,讲的,emmmmm,开心

如果反静态 + 反调试 + 壳, 这个时候不能脱壳的话,岂不是GG了, 如果能脱壳,应该就能把反调试patch掉吧,之后动态调试…
其实壳好多就算是反静态的吧, 脱壳并且dump就能对抗反静态是这个意思吗

花指令

http://blog.csdn.net/yangbostar/article/details/6194159
这个作者有一系列文章, 比如病毒编写
花指令思想:
把垃圾数据填充在不会执行到的地方…如何保证这些地方不被执行
作者提到

  1. 通过jz + jnz 这样子的来替代jmp
  2. 利用某些运算(如xor..)间接控制标志位 + 条件跳转
  3. 利用API函数操作返回特定返回值

在没有找到相关的文章,暂时就这样子

ELF

http://zke1ev3n.me/2015/12/15/ELF%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E8%A7%A3%E6%9E%90/

具体还自己看程序员的自我修养 很重要待办事项

反调试

http://www.freebuf.com/sectool/83509.html
这一篇,赞,棒

  1. 开始就讲到ptrace反调试,想起来上次HBCTF也有这样子一个题目,要patch掉ptrace

  2. 之后讲到如果是gdb <TARGET>的时候可以检测父进程名称

  3. 如果是attach方式, 可以检查TracerPid

  4. alarm定时,这个我确实在CTF里遇到…当时不知道怎么办…,定时很短时间,到时间就退出,原问提到可以通过设置gdb对signal的处理方式来bypass.

(gdb) i handle SIGALRM // 查看SIGALRM信号处理方式
Signal        Stop    Print    Pass to program        Description
SIGALRM       No    Yes        Yes                    Alarm clock

(gdb) handle SIGALRM nopass // 设置不传递
Signal        Stop    Print    Pass to program        Description
SIGALRM       No    Yes        No                    Alarm clock

参考 http://www.cppblog.com/fwxjj/archive/2011/12/06/161621.html

objdump & readelf

readelf

readelf 主要是看一些相关信息, 报名哟反汇编的功能, 常用的就是-S

readelf -h filename elf头部,主要是好看
readelf -S filename 主要是看某一段(sections)的偏移和权限
readelf -l filename 主要是看某一节(segments)的信息

这个sectionssegments,emmmmmm~,是传说中的链接视图和执行视图里的概念

通常,在ELF在加载到内存里时候,系统会将权限相同的Sections合并成一个Segments

objdump

我用这个objdump主要用来看汇编代码

objdump -d pwn100 反汇编

如果当时编译的时候用了-g,这个时候就能更详细的显示反汇编(掺杂源代码)

objdump -S [-l] pwn100

这个时候加上-l还能把原来行号显示出来

-j .text 可以只反汇编指定的section

另外记得加上这个…-M intel,默认是AT&T的..看的我

最后一点

-d, --disassemble        Display assembler contents of executable sections
-D, --disassemble-all    Display assembler contents of all sections

另外,objdump -h查看ELF的各个段(Sections)的时候,只是把关键的段显示出来了,而忽略了其他辅助的段,要查看所有的段,就要用readelf -S

段(Sections)的名字对于编译器,链接器是有意义的,对于操作系统其实只是段的属性和权限有用