怎么判断系统领空 程序领空

所谓领空,实际上是指:在某一时刻,CPU 的 CS:IP(EIP) 所指向的某一段代码的所有者所在的区域。

程序里经常要调用函数,有的函数属于dll或其他,比如Windows系统自带的函数MessageBoxA,当单步步入这个函数时(就是进入到MessageBoxA)函数里面进行跟踪时,就进入了非程序领空(不是你当前程序自己写的函数,而是调用其它人的(这里是Win32系统的))或者说系统领空,当跳出MessageBoxA函数后,就又回到了你在调试的程序中,那么当前CPU将执行你要调试的程序的指令,此时领空就是你要调试的程序。

OD里进入非程序领空后,Alt+F9返回程序领空。

 

-+-----------------------------------

 

OD中的系统领空和程序领空(个人理解)

系统领空:载入OD的程序在编写时会调用一些系统函数,OD动态调试时遇到这些调用语句,就会跳转到系统中相应的函数所在位置即系统领空。

程序领空:程序载入OD后,执行程序每一个语句的地址区域。

如何区分程序领空和系统领空:

1、看地址:地址特别大的属于系统领空,地址比较小的(一般以00开头)属于程序领空。

上图中,地址都是以76开头,地址十分大,那反汇编窗口这部分就是系统领空。

上图中,地址都是以00开头,地址比较小,那反汇编窗口这部分就是程序领空。

2、看标题:OD标题栏后有类似于kernel32,user32的字样,那么就是在系统领空,如下图:

相反的,如果OD标题栏后显示的是和程序名相关的字符,那么就是在程序领空。

3、尝试搜索字符串:在系统领空下搜索字符串是不能够查找到程序的字符串的,得到的字符串都是系统中的字符串。

最后需要注意的是,程序领空的内容在OD中是不可以修改的,而程序领空可以由使用者任意修改。

下面进入正题,今天所用到的示例程序仍然是《Shark恒零基础百集VIP破解教程》中的示例程序:

打开后发现是一个重启验证的程序:

在同一路径下发现该程序还有附带的几个文件:

这其中有ini的配置文件,猜测可能该程序是一个ini重启验证的程序,首先打开config.ini,发现其中有程序中的机器码:

那么其中的Regcode后面的值就可能是注册码,先打开程序,输入假码试试:

发现Regcode后面的值就是刚刚输入的假码,证明这个程序是一个ini重启验证的程序。

接下来对程序分析,先查壳:

程序无壳(Delphi语言),载入OD,因为是ini重启验证,所以设置针对ini的api断点:

这里设置的是针对INI断点的第一个:GetPrivateProfileStringA断点。

F9运行程序发现来到了系统领空,堆栈窗口显示调用了GetPrivateProfileStringA,这时候程序读取ini文件里的机器码和注册码:

接下来选择调试-执行到用户代码(快捷键是Alt+F9),这里也可以步调试至程序领空:

进入程序领空后继续单步调试,一系列单步调试之后到达这一句,发现EAX寄存器中出现可以字符串,可能就是我们需要找的注册码,继续单步运行,观察堆栈窗口以及寄存器窗口的变化。

在堆栈窗口发现了之前输入的假码以及机器码还有两个可以字符串,复制下来,可能就是注册码:

通过测试,发现acdb9da597f5276c6e4aae7dd29b7524是注册码

下载说明: 帮助教程
1.资源失效请联系QQ:1138166071补发;寻课加QQ联系
2.资源均为网络收集,仅供参考研究,请在下载后24小时内删除。不要商用和非法用途,否则后果自己承担。
3.默认解压密码:blog.qdql.net
4.购买本站资源即代表同意本站免责协议
5.提示:本站资源属虚拟商品,购买后恕不退款。
6.特别声明本站资源部分来源于网络,如有侵权,请联系站长进行删除处理!
本文地址:http://blog.qdql.net/5896/

评论已关闭!