鱼C论坛

 找回密码
 立即注册
查看: 3235|回复: 0

[学习笔记] 《解密系列-调试篇》第四讲:OD使用教程4

[复制链接]
发表于 2018-1-5 11:34:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-1-8 10:11 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢
一、去除NAG窗口
(1)nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。一般nag在程序启动或退出的时候弹出来,或者在程序运行的某个时刻突然蹦出来吓你一跳。

(2)一般情况下,一个注册后的软件,他是不会弹出NAG窗口的。所以,一般在程序启动的时候,他会有一段代码检查改程序是否已经被注册,我们可以先把这个程序的注册破解掉,NAG窗口即会自动消失。

(3)把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的。
如图所示(红框里的),运行这两个call后都会弹出NAG窗口,所以我们判断NAG窗口就在这里面,那么我们就可以使用前面学到的方法破解咯 可以把这两个call给NOP掉或者在call前面使je跳转实现,还有在call前面添加一个jmp跳转跳过这NAG窗口的call。方法多种多样,我就不一一展示了,大家自己去摸索吧
两个call.PNG
(4)GetModuleHandleA(A表示ASCII,W表示unicode宽字符)这个API函数用于获取程序的ImageBase(基址)。(关于什么是基址?就是段地址+偏移地址,中的段地址。具体可以看”零基础入门学习汇编语言“)

(5)小甲鱼的新奇去除NAG窗口方法:添加一个不存在的父窗口句柄:
首先我们要了解MessageBox函数:也就是我们现在的这个NAG窗口调用的函数,它使用这个函数创建了一个窗口。里面有四个参数(自己看帮助文档了解去 ),其中第一个参数是父窗口(对于什么是父窗口,小甲鱼在视频里面已经讲得很清楚了)的句柄,我们了解到只要父窗口进程结束子窗口(NAG窗口)也会结束(简单的例子:没有你老爸就没有你 );而看回来,在OD中我们看到NAG窗口它的父窗口是0(也就是没有父窗口),那么我们就可以创造一个不存在的父窗口给NAG窗口。比如为NAG窗口添加一个句柄为1的父窗口,本来句柄1的父窗口就不存在(也就是相当于关闭了),那么NAG窗口也就不存在了,那么我们就达到了去除NAG窗口目的 看图:
父窗口句柄.PNG

二、PE文件结构
(1)PE(PortableExecutable)可执行文件结构是一样规范,发明这个主要用来指导系统如何执行你所设计的程序。

(2)平常为什么不需要用到这个PE文件结构?因为编译器已经为你将代码按照PE结构的形式编译链接为可执行文件,这过程只是它默默的完成,所以我们没有察觉。

(3)PE文件结构有一个非常优势的地方就是它在硬盘上的存储结构跟载入内存(这就是虚拟地址的由来)时候的存储结构是一样的。所以,只要你了解如何在PE文件结构里边找出某样你想要的东西,那么当这个文件映射到内存后,你也可以很容易的找到它。

(4)关于模块:内存中的一个模块代表一个可执行文件进程所需要的所有代码、数据、资源的集合。(其实就是这个文件)

(5)PE文件结构(我们还是直接看图吧):
PE文件结构.jpg
本质上,最下边的节区(有些人也叫区块)是运行一个程序真正需要的内容。
上边所有的“头”都仅仅是帮助Windows加载器定位和寻找下边的节区的内容。

(6)名词注释:
把程序载入OD,可以看到
AddressOfEntryPoint(入口地址)
ImageBase(基址)
VA(VirtualAddress,虚拟地址)
RVA(RelativeVirtualAddress,相对虚拟地址)
EP(EntryPoint,程序入口点)

三、实战修改PE文件的入口地址
(1)把程序载入OD,可以看到AddressOfEntryPoint(入口地址)为00401000,但是我们程序的真正内容是在:00401024.前面的是我们要去掉的去除NAG窗口,那么我们如果把程序入口改为:00401024 不就完美的去掉了第一个NAG窗口了吗
(2)说干就干,点击快捷栏的“m”键,在弹出窗口中双击PE 文件头,我们就来到内存中文件头的位置了。在这个窗口中,第一栏为地址,第二栏为地址上的二进制数据,第三栏为方便人类阅读的代码(因为内存中的二进制数据是高地址放后面,底地址放前面,阅读很不方便),第四栏为注释。
(3)找到真正的PE头的偏移地址(000000C0),如图:
1.PNG
(4)根据偏移地址找到真正的PE头(004000C0,PE头会以ASCII的"PE"开头,也就是50 45),然后就找到程序的入口地址(AddressOfEntryPoint)咯
2.PNG
(5)根据(4)中得到的程序入口地址在内存中的地址(004000E8),那么我们就可以修改入口地址为00401024啦。在数据窗口按Ctrl+G输入004000E8,修改之:
3.PNG
(6)保存修改程序,重新载入OD发现入口地址成功改为00401024了:
4.PNG
(7)关于课后作业:RegisterMe.Oops.exe,为什么是一样的,我两个窗口都被我除掉了。。。难道我下载了一个假的


PS
:由于发现调试篇需要用到系统篇的知识,所以后面我会先去学习系统篇的知识

谢谢小甲鱼带来的视频教程,感谢!!
本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 06:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表