逆向_root_me_3

ELF x86 - No software breakpoints

看反汇编,大致了解过程

这是众所周知的反调试技术,它不能在应用程序本身中放置任何软件断点。因为当我们在用户模式应用程序中遇到断点时,代码中将放入0xCC(int3),因此计算将是错误的,并将生成错误的校验和.

这是在ecx中计算一种散列值,它基于入口点的整个代码。如果我们对函数进行任何更改,值将不再相同,从而阻止我们编辑二进制文件.

计算整个text 指令的和,所以放入0xCC会 报错,也就是改变的指令。


移位运算符

a<<3
a的内容不改变

edx & 0xff
取最后8位


g++

g++主要用来编译c++文件,g++编译c++文件是会连接libc++。
gcc主要用来编译c文件,也可编译c++,但gcc编译c++文件默认不连接libc++。

移位

移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移有关。如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部为0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)


命名空间

引入了命名空间这个概念,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围

可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。


ELF x86 - CrackPass

gdb-peda$ help x
Examine memory: x/FMT ADDRESS.


gdb-peda$ print/t $ebx
二进制打印寄存器


set $ZF = 6
set $eflags |= (1 << $ZF)

设定ZF值为1


show


where
显示当前位置


MOVZX 指令(进行全零扩展并传送)将源操作数复制到目的操作数,并把目的操作数 扩展到 16 位或 32 位。


r2 图形模式下,如何跳转和返回函数

图形模式下,按o进行跳转
u返回上一个函数


ff07031d6fb052490149f44b1d5e94f1592b6bac93c06ca9

25260060504_VE_T25_t_


Usage: jump LOCATION
Give as argument either LINENUM or *ADDR, where ADDR is an express