0%

分析

这题,开门有惊喜

overflow

整个题就一个read,也只有这有一个溢出点,然后,啥都没了。

Read more »

挖坑待填

从指定目录加载动态链接库

只需要设置 LD_LIBRARY_PATH 这个环境变量即可

若是希望后面的程序都优先从该目录加载,可以执行下面的命令

1
export LD_LIBRARY_PATH=/home/plusls/Desktop:$LD_LIBRARY_PATH
Read more »

ida作为工业级的逆向分析工具,尤其是其F5这个让人增寿的东西,若是正确使用,则可以为分析者节省下大把时间。

注 :本文默认IDA版本均为IDA7.0以及以上

Read more »

原理

众所周知,任何数据在内存中都是以Byte为单位进行存储的,每个Byte包含了8个二进制位,因此本文不区分二进制数据与文本,而是将其作为一个整体进行讨论。

编码

base64编码包括以下几个步骤

  1. 将每个BYTE转为8位二进制
  2. 若二进制位不是6的倍数则在其后面补0直到其变为6的倍数
  3. 将每6个二进制位作为整体转换为10进制
  4. 通过查表将十进制转为字符
  5. 若转出的长度不为4的倍数,则在其后补’=’

注: 转换表见附录

若是以编码 CNSS 为例,则整个过程为

base64encode

Read more »

不用{}<>写一个Hello World程序,本方法基于gcc的编译器

C语言中的函数

在C语言中,一个函数其实可以看做一个变量,假设如今定义了如下函数

1
2
3
4
int fun()
{
return 0;
}

&fun 将会像普通变量一样取得这个函数所在的地址

gcc下main函数调用机制

一个程序,其实并不是以main为开始,而是以start函数为开始

随便将一个ELF文件拖入ida可以看见

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.text:00000000004006E0 _start          proc near               ; DATA XREF: LOAD:0000000000400018↑o
.text:00000000004006E0 ; __unwind {
.text:00000000004006E0 xor ebp, ebp
.text:00000000004006E2 mov r9, rdx ; rtld_fini
.text:00000000004006E5 pop rsi ; argc
.text:00000000004006E6 mov rdx, rsp ; ubp_av
.text:00000000004006E9 and rsp, 0FFFFFFFFFFFFFFF0h
.text:00000000004006ED push rax
.text:00000000004006EE push rsp ; stack_end
.text:00000000004006EF mov r8, offset __libc_csu_fini ; fini
.text:00000000004006F6 mov rcx, offset __libc_csu_init ; init
.text:00000000004006FD mov rdi, offset main ; main
.text:0000000000400704 call ___libc_start_main
.text:0000000000400709 hlt
.text:0000000000400709 ; } // starts at 4006E0
.text:0000000000400709 _start endp
Read more »