解密系列之OD使用教程1
使用例子程序为Hello.exe
OD基本快捷键及功能
从系统DLL领空返回到程序领空,Alt+F9
通过OD将程序的标题“Hello world”改为“OD Class 01”
直接单步执行法
按F8单步执行,找到MessageBox传参的地方,直接在数据窗口修改即可。如下图:
解密系列之OD使用教程2
使用例子程序为TraceMe.exe
获取编辑框输入内容的API断点法
1、在反汇编窗口中按下Ctrl+G,输入GetDlgItemTextA,发现存在这个API函数,点击OK,并按F2下断点;
2、按F9运行程序,输入用户名和序列号,点check,程序断下;
3、单步执行程序,共断下两次,依次用Ctrl+F9执行到返回,继续向下执行,则可看到
004011D7 . 8D5424 4C lea edx,dword ptr ss:[esp+0x4C]
004011DB . 53 push ebx
004011DC . 8D8424 A00000>lea eax,dword ptr ss:[esp+0xA0]
004011E3 . 52 push edx
004011E4 . 50 push eax
004011E5 . E8 56010000 call TraceMe.00401340 ; 验证程序
004011EA . 8B3D BC404000 mov edi,dword ptr ds:[<&USER32.GetDlgIte>; user32.GetDlgItem
004011F0 . 83C4 0C add esp,0xC
004011F3 . 85C0 test eax,eax
004011F5 . /74 37 je short TraceMe.0040122E
00401340这个call就是验证程序
爆破方法:
①将测试其返回值后的跳转Nop掉;
②将test eax,eax改为mov al,1
右键=>复制到可执行文件=>选择;右键=>备份=>保存数据到文件,命名为TraceMe1.exe,运行之,输入用户名和密码,点check,提示成功。
此外,另一个读取编辑框函数:GetWindowText
;还可通过Ctrl+N
打开应用程序的导入表,查看程序总共导入了哪些API函数。
解密系列之OD使用教程3
程序:reverseMe.exe
- EAX:扩展累加寄存器
- EBX:扩展基址寄存器
- ECX:扩展计数寄存器
- EDX:扩展数据寄存器
- ESI:扩展来源寄存器
- EDI:扩展目标寄存器
- EBP:扩展基址指针寄存器
- ESP:扩展堆栈指针寄存器
- EIP:扩展的指令指针寄存器
除了以下三个寄存器,其他我们都可以随意使用:
- EBP:主要是用于栈和栈帧;
- ESP:指向当前进程的栈空间地址。
- EIP:总是指向下一条要被执行的指令。
call XXX;
等价于 push eip; + jmp XXX;
真正需要关心的标志位只有三个,也就是cmp指令能修改的那三个:Z/O/C
。
- Z标志位(0标志),这个标志位是最常用的,运算结果为0时候,Z标志位置1,否则置0。
- O标志位(溢出标志),在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0。
- C标志位(进位标志),记录运算时从最高有效位产生的进位值。
①方法一:找到每次陷阱跳转,并jmp跳过或者nop掉即可
②方法二:找到验证算法,需要一个名为Keyfile.dat的验证文件,其内容包含16个G即可。