解密调试笔记2
调试技巧总结:1.F2下断点,Alt+b打开断电编译器,可编译所有下过的断点,空格键可快速切换断点状态。
2.当位于某个CALL中,这时想返回到调用这个CALL的地方时,可以按“Ctrl+F9”快捷键执行返回功能。这样OD就会停在遇到的第一个返回命令(如RET、RETF或ITRE)。
3.如果跟进系统DLL提供的API函数中,此时想返回到应用程序领空里,可以按快捷键“Alt+F9”执行返回到用户代码命令。
4.所谓领空,实际上就是指在某一时刻,CPU执行的指令所在的某段代码的所有者。
5. 如004013F7这类地址一般是可执行文件领空,7C8114AB这类大地之一般是系统DLL所在的地址空间。
6.程序通常读取文本框内容的字符串用的是以下两个函数:
- GetDlgItemTextA(GetDlgItemTextW)
- GetWindowTextA(GetWindowTextW)
7.一般我们要结合经验通过猜测的方式多尝试几遍设陷阱,找出相关的函数。
8.按“Ctrl+G”键打开跟随表达式的窗口。
9.也可以通过“Ctrl+N”键打开应用程序的导入表(输入表),然后查看应用程序总共导入了哪些函数来一次退服安需要在哪里挖坑下陷阱!
10.关于返回值,汇编代码的返回值约定是存放在eax这个寄存器里边的,如果32为的eax不够存放返回值,系统会将返回值放在内存某个位置并把该位置的地址放在eax返回。
个人总结:
1.利用windows系统DLL提供的API函数为主要实现的步骤,而程序通常读取文本框内容的字符串用的是以下两个函数:
- GetDlgItemTextA(GetDlgItemTextW)
- GetWindowTextA(GetWindowTextW)
2.通过Ctrl+G快捷键搜索GetDlgItemTextA(GetDlgItemTextW)获得该读取文本的地址位置进行设置断点;
3.然后再重新运行程序,输入账号密码,即可跳转到该断点位置;
4.在这步需要慢慢的跟踪,查看我们所输入的账号密码所在的位置,需要观察下方的内容地址以及寄存器所显示的内容是否是我们输入的账号内容,得知账号密码所在的位置以及存值后继续单步跟踪;
5.从反汇编窗口中可以观察到eax为存储我们账号密码的变量名,以及观察到将这些值存到堆栈中,再进行判断其返回值是否为0,为0的话标志寄存器Z就会置1,就会执行je跳转;
6.那我们在je这一段中把标志寄存器Z改为0,执行下去就可以通过认证。
7.在我们想要修改完成后保存其破解的软件出来,最好就将je段代码改为nop,然后选中修改过的代码右键选择赋值可执行文件->选择->右键备份->保存数据文件,即可。
8.修改NOP后,说明没有这个跳转,即输入任何数都能认证成功。
页:
[1]