逆向_root_me_3
ELF x86 - No software breakpoints
看反汇编,大致了解过程
这是众所周知的反调试
技术,它不能在应用程序本身中放置任何软件断点
。因为当我们在用户模式
应用程序中遇到断点
时,代码中将放入0xCC(int3)
,因此计算将是错误的,并将生成错误的校验和
.
这是在ecx中计算一种散列值,它基于入口点的整个代码。如果我们对函数进行任何更改,值将不再相同,从而阻止我们编辑二进制文件.
计算整个text 指令的和
,所以放入0xCC
会 报错,也就是改变的指令。
移位运算符
a<<3a的内容不改变
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