二进制数字密码的破译
1,注册:
寄存器就像CPU上的口袋,让CPU可以随时拿出需要的东西来使用。通常涉及的九个寄存器:
EAX:扩展累积登记册;EBX:扩展基地址寄存器;ECX:扩展计数寄存器;
EDX:扩展数据寄存器;ESI:扩展源寄存器;扩展目标寄存器;
EBP:扩展基址指针寄存器;ESP:扩展堆栈指针寄存器;EIP:扩展指令指针寄存器;
这些寄存器的大小为32位(4字节),可以保存从0到0-FFFFFFFF(无符号数)的数据。除了以下三个寄存器,我们可以随意使用它们:
EBP:主要用于书库和书库框架。ESP:指向当前进程的堆栈空间地址。EIP:总是指向下一条要执行的指令。
2.堆栈:堆栈是内存的一部分,它有两个特殊的属性:
费罗(先进先出);地址反向增长(大地址在栈底,小地址在栈顶)。
3、调用指令,调用有以下几种方式:
拨打call404000h直接跳转到函数或过程的地址;calleax函数或过程的地址存储在eax,calldwordptr[eax]]中。
4.系统API:Windows应用程序运行在Ring3级别,API函数也称为系统提供的接口。因为系统只信任自己提供的函数,所以我们只能通过API来操作内核。
5.mov指令mov指令格式:movdest,src。
这是一个容易理解的指令。mov指令将src的内容复制到dest。mov指令有以下扩展名:MOVS/MOVSB/MOVSW/movsdei,
Esi:这些变体以字符串/字节/字/双字为单位,将esi寄存器指向的数据复制到edi寄存器指向的空间。Movsx符号位扩展,byte->;单词,单词-& gt;dword?(扩展的高位全部用符号位填充)。
然后实现mov。Movzx零扩展,byte-& gt;单词,单词-& gt;Dword(扩展后所有高位都填充0),然后实现mov。
6.cmp指令,cmp指令格式:cmpdest,src。
Cmp指令比较两个操作数dest和src,并通过比较结果设置C/O/Z标志位。
Cmp指令具有以下格式:
cmpeax,ebx如果相等,则Z标记位置为1,否则为0。cmpeax,[404000];比较eax和404000地址的dword数据并设置cmp[404000]],eax;同上。
7.标志位:在破解中起重要作用。
反过来,你真正需要关心的标志只有三个,也就是cmp指令可以修改的三个:Z/O/C。
z标志位(0标志),这个标志位是最常用的。当运算结果为0时,Z标志位置为1,否则设置为0。
o标志位(overflow flag),在运算过程中,如果操作数超出了机器所能表示的范围,则称为溢出,此时的位置为1,否则设置为0。
c标志位(进位标志),记录运行期间最高有效位产生的进位值。例如,当执行加法指令时,最高有效位的进位时间设置为1,否则设置为0。
掌握了这些指令后,就可以用ReverseMe来破译二进制数字密码了。
扩展数据:
在数学和数字电路中,二进制数是指用二进制记数制表示的数,即以2为基数的记数制。在这个系统中,数字通常用两个不同的符号0(代表零)和1(代表一)来表示。
基数2表示系统是二进制的。在数字电子电路中,二进制被直接应用于逻辑门的实现,所以二进制被用于现代计算机和依赖于计算机的设备中。每个数称为一位(二进制位)。
二进制转换成八进制也很容易,因为八进制的基数是8,8是2的幂(8 = 2),所以八进制的一位正好需要三个二进制位来表示。八进制数和二进制数的对应关系是上表中的前八个十六进制数。二进制数000是八进制数0,二进制数111是八进制数7,以此类推。
参考资料:
百度百科-二进制代码