无邪 发表于 2014-5-22 21:56

关于领空的概念

本帖最后由 无邪 于 2014-5-22 22:01 编辑

在吾爱待了刚刚好6个月的时间了从一开始的完全看不懂到现在已经能够熟悉的运用OD了
转过头来看看自己在吾爱的历程,
很少在论坛分享一些个人的经验和教程之类的..
老脸已红...
小菜的文笔实在不是太好..
每次想写点东西,写着写着语言就完全表达不清楚..描述也跟不上了..
今天还是给大家写点东西,也为自己写一点记录吧..
{:301_1002:}拿表情割一下吧..

带一下小盆友们...
@YsGer @liuchang121206 @Shark恒

static/image/hrline/3.gif

关于领空的概念
最近看到有一些朋友在为爆破程序后保存的文件类型不是exe文件而苦恼..
于是写点关于这种情况的分析吧..
领空的话大概就是分为程序的领空和系统的领空
一般对程序进行爆破都是在程序的领空中进行的,
我个人对程序领空和系统领空分辨的办法
1,根据经验来判断
    一般的易语言程序,程序的基址一般都是00400000,所以只要你看地址是属于00400000~00500000之间的地址基本上都是程序的领空
2,保存判断
    在当前领空随便改点东西,然后右击保存,看看保存的是什么类型的文件,什么名称的动态链接库
   
    像在此领空随便NOP掉一条代码,然后右击保存就会提示你保存为user32.dll,而保存的路径则是系统的目录下
    一般user32.dll文件都是程序经常调用的一个系统DLL,碰到这种情况很明显判断出这里是系统的领空了..
    如果碰到自己拿不准的DLL就可以上百度搜一下这个DLL的文件名,如果不是系统的DLL,就很有可能是软件的一个提供注册功能的DLL了!

static/image/hrline/3.gif



总之在爆破软件的时候发现了"关键跳"的时候先爆破掉试试,一般如果是系统领空的DLL,你爆破掉之后是没作用的,提示错误还是提示错误,当然也有可能导致程序的崩溃情况..


当然,如果你只是不想让程序的对话框,或者信息框载入的话,你改掉系统领空的跳有的时候也会成功,不过是无法保存的...

你改了系统的动态链接库之后并保存之后,轻微一点的情况就是其他程序调用这个DLL的时候功能不正常了,
严重一点的就是系统崩溃...

如果爆破掉关键跳之后你发现提示你注册成功了,
right!
就算不是程序的领空也极有可能是程序的注册DLL的领空
这就表示你可以正常的保存!

static/image/hrline/3.gif



下面给大家带来一个自己写的程序的爆破

利用调用DLL来判断注册码是否正确,

首先这个程序是绝对无法通过修改主程序来达到成功的效果的,

因为主程序只有一个调用DLL内子程序的功能

static/image/hrline/3.gif

先把程序的下载链接放出来吧..
链接:http://pan.baidu.com/s/1eQFwCfS 密码:ibw8


static/image/hrline/3.gif

1,软件无壳,OD直接载入了

2,搜索字符串


没有有效的字符串信息留给我们..

3,F12暂停法

发现程序点击登录按钮后会出现信息框的提示,
果断使用暂停法!

首先运行程序,点击登录按钮
出现了提示错误的信息框
我们可以点击图中暂停的按钮,也可以按F12键(暂停的快捷键,所以这种方法称为F12暂停法)



暂停后可以点击图中K按钮,也可以按Alt+K键查看调用堆栈窗口





选择显示调用之后会在反汇编窗口中显示调用这个CALL的代码



我们能从图中发现,这个CALL下面一直到段尾都没有能够跳过这个CALL的跳转
可以知道这个CALL从段首开始完成的就只是一个弹出信息框的功能
并没有跳转之类的逻辑判断..
于是我们F2在这个CALL下断,F9运行!

再次点击程序的登录按钮会在这个CALL断下,


F2取消这个CALL的断点
F8单步走下去
一直单步到段尾retn处继续单步
返回到调用这个CALL的CALL
...有点绕人,用恒大的话说,
就是让我们看看外面的世界吧!



这个CALL没有任何的跳转..
继续往下走..
看看更大的世界...


可以看到我们出来的这个CALL上面有一个je的跳转,
F9运行程序,并在je处下断吧

然后我们再次点击登录按钮..会在je处断下


我们可以发现这个je可以跳过提示注册码错误的CALL
并且可以跳过CALL下面的JMP

把je改为jmp..


F9运行一下程序..
OK!提示密码正确了!


接着就是保存文件


我们会发现保存的文件不像平时碰到的情况,
文件类型不是exe文件,而是DLL文件了!



这里就是领空的概念了,
有过编程经验的朋友们都应该知道,
很多大型软件不可能把程序的所有功能都写到主程序里面的,
这样会导致主程序变得特别大,运行速度特别慢,
所以一般大型软件都会把大部分功能用动态链接库(DLL)或者exe程序封装起来
然后软件使用主程序运行,
当软件需要什么功能的时候,
主程序就会通过调用动态链接库或者子程序的方法来实现功能
就如本帖中的例子一样
我的关键跳转不在主程序中,随便你怎么修改我的主程序,
注册功能你完全影响不了我,
关键的爆破方法就是修改他的动态链接库,
所以有的时候大家在爆破商业软件的时候会碰到这种情况,
在平时破解一些公司开发的软件的时候,
这种情况出现的特别多...
碰到这种情况,多仔细看看他的主程序文件夹下有没有register,reg这些注册字样的动态链接库或者exe文件
像本帖的程序就可以直接OD载入reg.dll,字符串什么的都没有加密,一眼就能扫出关键跳在哪里了,

本帖的这个程序爆破后直接保存,替换掉reg.dll就能够达到爆破的目的了!
本文到此结束,相信看完本帖的小盆友们对领空的概念应该理解了吧!

static/image/hrline/3.gif




无邪 发表于 2014-5-28 18:42

guoqiang5277 发表于 2014-5-28 15:24
@无邪

我这里在弹出的错误框上,按F12,然后Alt + K,出现的内容,少了点程序的调用,如下图。

在13F47CUSER32.MessageBoxExA
这行代码上右击显示调用也可以的
OD不一样

Kido 发表于 2014-5-22 22:24

本帖最后由 Kido 于 2014-5-22 22:27 编辑

OD的标题上一般会有他现在所属的是哪个模块 例如主题例子中的 test.exe 改一下设置就可以显示出来的
所谓的系统领空就是该地址所属模块不属于程序所有而已

逆袭撸破 发表于 2014-5-22 21:59

闹够了没有 发表于 2014-5-22 22:03

必须支持{:301_975:}

那痛,谁懂 发表于 2014-5-22 22:03

必顶顶起~

agbcd 发表于 2014-5-22 22:04

必须支持

闹够了没有 发表于 2014-5-22 22:05

必须支持{:301_997:}

fengh 发表于 2014-5-22 22:08

支持一下,很好

l66666688 发表于 2014-5-22 22:13

支持一下

jer9y 发表于 2014-5-22 22:16

谢谢大大分享

浪子修罗 发表于 2014-5-22 22:19

感谢分享。学习了。
页: [1] 2 3 4
查看完整版本: 关于领空的概念