小甲鱼解密系列调试篇——OD使用教程笔记(持续更新中)

article/2025/10/2 2:27:27

 

目录

一点铺垫:基础知识

1.汇编语言

2.NAG窗口

3.SEH

4.断点类型

一、MessageBox.exe修改程序标题内容——修改函数传入值

二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方

三、reverseMe.exe暴力破解/打补丁实现注册——分析文件结构 逆向注册文件

修改跳转条件暴力破解:

注册打补丁:

四、reverseMe.exe去除NAG窗口——修改跳转条件跳过对话框,使得MessageBox失效:父句柄设为空白,修改文件PE结构入口AddressOfEntryPoint

1.修改跳转条件跳过对话框

2.使得MessageBox失效:父句柄设为空白

3.修改文件PE结构入口AddressOfEntryPoint

五、reverseMe.Oops.exe——PE文件头!

六、pixtopianbook破解功能限制——定位至引用弹出NAG窗口的地址、搜索字符串改变值

1.定位NAG窗口

2.搜索字符串改变UNREGISTERED VERSION字符串

七、pcsurgeon.exe搜索字符串找到调用

1.搜索字符串改变<>

2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997


一点铺垫:基础知识

1.汇编语言

EBP:主要是用于栈和栈帧。

ESP:指向当前进程的栈空间地址。

EIP:总是指向下一条要被执行的指令。

2.NAG窗口

       nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。一般nag在程序启动或退出的时候弹出来,或者在程序运行的某个时刻突然蹦出来吓你一跳。

3.SEH

SEH(Structured Exception Handling),即结构化异常处理。

SEH是Windows操作系统提供的功能,跟开发工具无关。  

Windows程序设计中最重要的理念就是消息传递,事件驱动。 当GUI应用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找并调用窗体的消息处理函数(CALLBACK),传递的参数当然就是这个消息。  

我们同样可以把异常也当作是一种消息,应用程序发生异常时就触发了该消息并告知系统。

系统接收后同样会找它的“回调函数”,也就是我们的异常处理例程。  

当然,如果我们在程序中没有做异常处理的话,系统也不会置之不理,它将弹出我们常见的应用程序错误框,然后结束该程序。 所以,当我们改变思维方式,以CALLBACK 的思想来看待SEH,SEH 将不再神秘。  

4.断点类型

软件断点只能断点程序领空,不能断点动态链接库如果需要断点动态链接库,就需要用到硬件断点。


一、MessageBox.exe修改程序标题内容——修改函数传入值

int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

      1.找到MessageBox的传入值

      2.修改传入的lpText


二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方

      1使用OD加载程序,搜索分别搜索GetDlgItemTextA、GetDlgItemTextW、GetWindowTextA、GetWindowTextW,搜索到的都下断点。

      (2)运行程序,在程序弹出对话框时,输入用户名和系列号,然后按F8单步,在消息窗口观察哪条语句有我们刚刚输入的用户名和系列号。如下图:

      (3找到后,就在这条语句的附件会有校验和跳转(那个test就是效验,je就是跳转),我们可以修改效验结果,或者直接NOP掉跳转。(我这里直接NOP掉了跳转)


三、reverseMe.exe暴力破解/打补丁实现注册——分析文件结构 逆向注册文件

首先分析代码结构:

修改跳转条件暴力破解:

直接将弹出还未注册的窗口判断语句(je,jle,jnz等)更改为nop(不希望它执行)或jmp(希望它执行),即可实现。

注册打补丁:

确认程序的逻辑结构。

下了断点的是程序的大致算法模块。


四、reverseMe.exe去除NAG窗口——修改跳转条件跳过对话框,使得MessageBox失效:父句柄设为空白,修改文件PE结构入口AddressOfEntryPoint

定位NAG窗口

1.修改跳转条件跳过对话框

(2把程序跑一遍之后我们发现程序有两个NAG,一个是在程序界面启动前出现,另一个是在程序关闭后出现的。如图所示(红框里的),运行这两个call后都会弹出NAG窗口,所以我们判断NAG窗口就在这里面。如第三讲,可以把这两个call给NOP掉或者在call前面使je跳转实现,还有在call前面添加一个jmp跳转跳过这NAG窗口的call。

2.使得MessageBox失效:父句柄设为空白

我们看到NAG窗口它的父窗口是0(也就是没有父窗口),那么我们就可以创造一个不存在的父窗口给NAG窗口。比如为NAG窗口添加一个句柄为1的父窗口,本来句柄1的父窗口就不存在(也就是相当于关闭了),那么NAG窗口也就不存在了,那么我们就达到了去除NAG窗口目的。

3.修改文件PE结构入口AddressOfEntryPoint

1把程序载入OD,可以看到AddressOfEntryPoint(入口地址)为00401000,但是我们程序的真正内容是在:00401024.前面的是我们要去掉的去除NAG窗口,那么我们如果把程序入口改为:00401024 就完美的去掉了第一个NAG窗口了。

2说干就干,点击快捷栏的“m”键,在弹出窗口中双击PE 文件头,我们就来到内存中文件头的位置了。在这个窗口中,第一栏为地址,第二栏为地址上的二进制数据,第三栏为方便人类阅读的代码(因为内存中的二进制数据是高地址放后面,底地址放前面,阅读很不方便),第四栏为注释。

3找到真正的PE头的偏移地址(000000C0),如图:

4根据偏移地址找到真正的PE头(004000C0,PE头会以ASCII的"PE"开头,也就是50 45),然后就找到程序的入口地址(AddressOfEntryPoint)

5根据(4)中得到的程序入口地址在内存中的地址(004000E8),那么我们就可以修改入口地址为00401024啦。在数据窗口按Ctrl+G输入004000E8,修改之:

6保存修改程序,重新载入OD发现入口地址成功改为00401024了:

五、reverseMe.Oops.exe——PE文件头!

不知道为什么小甲鱼不能在编译器里运行但我却可以,这里跳过,以后有机会再来看

清理下OD的UDD文件夹,不行的话试试用视频中演示的OD。

你是开了OD后从OD打开程序,我是右键程序直接用OD打开程序的 我这样没你那个提示哦 |

 

六、pixtopianbook破解功能限制——定位至引用弹出NAG窗口的地址、搜索字符串改变值

1.定位NAG窗口

(1)在OD运行弹出的软件界面试图添加第5个人,出现错误提示box,如下图

(2)此时在OD中按下暂停(暂停后OD中的地址跳至动态链接库,即系统领空处),然后按ALT+F9返回到用户,在用户界面点击确定后,OD中就返回到程序接管,地址跳转到下图的位置:

(3)图中的MessageBoxA就应该是刚才的错误提示框了,F8到retn,返回到函数(函数调用之后碰到ret返回),如下图:

注意:ret返回后,在上方又有一个call,说明在此处是间接地调用messagebox。

2.搜索字符串改变UNREGISTERED VERSION字符串

接下来将几处”unregistered version”字符查找并修改:

方法1:查找所有参考文本字串→查找文本“unregistered version”→跟随到代码处,找到在内存中的地址→在数据窗口中修改保存。

方法2:直接点击Memory→Ctrl+B查找→修改后记住字符串在内存中的地址,到OD的数据窗口保存。【建议用这种方法】

注意:修改时记得【保持大小】,不然会出错。

七、VisualSite Designer——定位、硬件断点

1.次数耗尽之前——定位修改跳转条件

一路F8,遇到弹窗就在此处F2下断,然后重新载入,F9运行到断点处,消除断点,继续执行。

F8,出现弹窗,计数减一完成,点击进入程序发现程序执行下一条语句

在这里插入图片描述

所以该函数的作用是显示欢迎界面,计数器减一并返回eax==1,

此时我们修改该指令
在这里插入图片描述

保存修改,运行,发现已经没有次数限制

2.次数耗尽之后——标志找不同

我们用OD载入观察所有的条件跳转语句,并标志出跳转结果,等到次数耗尽之后观察跳转结果与是否发生改变,找到关键跳转点nop。

八、pcsurgeon.exe——搜索字符串找到调用

1.搜索字符串改变<UNREGISTER

我们要从红笔圈出的地方入手。将软件载入OllyDBG,在代码界面右键——查找——所有参考文本字串,在第一行右键——查找文本,查找一部分比如“<unregistered”,

在这里插入图片描述

找到后双击进入代码的位置,可以看到代码的上方有两个jnz跳转,未注册过的源代码是不会跳转的,将这个jnz改为jmp,右键——复制到可执行文件——右键——保存文件为pcsurgeon1.exe,这样NAG窗口就去掉了

2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997

来到代码处。鼠标向上滑几行,可以看到这样的代码:

mov eax,dword ptr [60ebe8]
cmp byte ptr [eax],0
jnz 005cc935

显然,将地址60ebe8的值送到eax里,然后将eax的值作为地址,将这个地址中的值和0比较(其实是两数相减),结果不为零就跳转,但是ds:[0060eb8c]=00610c4a
右键点击mov eax,dword ptr [60ebe8]这一行——查找参考——地址常量,将所有的都设置断点。

在这里插入图片描述

重新运行程序,来到第一个断点处,有这样的代码:

mov edx,dword ptr [60ebe8]
mov byte ptr [edx],al

在上面我们知道ds:[0060eb8c]=00610c4a,所以:
这两段代码执行后,ds:[00610c4a]的值就是al的值,不幸的是,我们从OD右边的寄存器中看到al=0,所以
ds:[00610c4a]=00,所以cmp byte ptr [eax],0的结果就是0,所以jnz 005cc935就不能跳转,所以。
我们直接将mov byte ptr [edx],al 改为mov byte ptr [edx],1,复制到可执行文件,保存文件就破解成功了,但是这样改会出现这样的问题:

这个软件这样改是没有问题,但比较大的软件这样改,就可能会影响程序,因为要重定位的东西很多,所以也可以这样改:
将 cmp byte ptr [eax],0改为 mov byte ptr [eax],1
将 jnz short 005c2c15 改为  jmp short 005c2c15

九、MrBills.exe——不断进入找到判断注册的地方

1.使用搜尋字串找關鍵字。

You have entered an invalid email address or license number.Please try again.

2.尝试跳过。

  • 斷點在004299B9 | 75 36 | jne mrbills.4299F1 |跳轉未實現

  • jne跳轉未實現為ZF=1,我們將其修改為ZF=0

  • F9執行程式

  • 彈出視窗顯示Thank you for registering! (感謝你註冊!)

  • 按下確定

  • 發現程式並沒有真正被註冊

  • 在此可以確認單存跳過只是修改顯示的彈出訊息內容3.

3.

  • 斷點在0040714C | 55 | push ebp |

  • F8一步一步過,並持續觀察eax的變化

    0040714C | 55                    | push ebp                                 |
    0040714D | 8BEC                  | mov ebp,esp                              |
    0040714F | FF75 0C               | push dword ptr ss:[ebp+C]                |
    00407152 | FF75 08               | push dword ptr ss:[ebp+8]                |
    00407155 | E8 77FEFFFF           | call mrbills.406FD1                      |
    0040715A | 84C0                  | test al,al                               |
    0040715C | 59                    | pop ecx                                  |
    0040715D | 59                    | pop ecx                                  |
    0040715E | A2 A0765000           | mov byte ptr ds:[5076A0],al              |
    00407163 | 75 1B                 | jne mrbills.407180                       |
    00407165 | FF75 0C               | push dword ptr ss:[ebp+C]                |
    00407168 | FF75 08               | push dword ptr ss:[ebp+8]                |
    0040716B | E8 ADFEFFFF           | call mrbills.40701D                      |
    00407170 | 84C0                  | test al,al                               |
    00407172 | 59                    | pop ecx                                  |
    00407173 | 59                    | pop ecx                                  |
    00407174 | A2 A0765000           | mov byte ptr ds:[5076A0],al              |
    00407179 | A2 A2765000           | mov byte ptr ds:[5076A2],al              |
    0040717E | 74 0D                 | je mrbills.40718D                        |
    
  • 004071550040716Bcall回傳eax的值,故這兩個需要在F7步入觀察

  • 004071550040716B設定中斷點

  • 移除其他中斷點

4.继续分析。

直接将00406FC5 | mov al,bl 改为 mov al,1 即可变为永久注册!

十、pc2am2p.exe VB语言编写的程序的特点

 

 

十一、查看调用——追根溯源

 

十二、Delphi程序编写的特点

PUSH XXX

RETN

达到 CALL XXX的效果

 

面向事件的编程语言,很多CALL指令

 

-号返回CALL处

 

十三/十四、搜索关键函数

1.查找-》所有模块间的调用

2.Alt+N 搜索


http://chatgpt.dhexx.cn/article/XVsAInRe.shtml

相关文章

第52篇:OD使用教程2-设置API函数断点去除软件对话框及过期校验

Part1 前言 大家好&#xff0c;我是ABC_123。之前分享过一篇Ollydbg逆向分析入门教程《第50篇&#xff1a;使用OD逆向破解流光Fluxay扫描器各种限制》&#xff0c;这篇文章主要讲解了在使用OD逆向分析时&#xff0c;如何按照编程人员的思维去解除软件的各种限制。方法有点麻烦…

od的简单使用--(1)

od的简单使用——&#xff08;1&#xff09; 一&#xff0c;本教程需要的工具OllyDBG 下载&#xff1a; OllyDBG 中各个窗口的功能如上图。简单解释一下各个窗口的功能&#xff0c;更详细的内容可以参考 TT 小组翻译的中文帮助&#xff1a;反汇编窗口&#xff1a;显示被调试程…

PyCharm 社区版(Community)能不能商用?

其实官方博客已经给出了答案&#xff0c;截图如下&#xff1a; PyCharm社区版是专业版的阉割版&#xff0c;PYcharm专业版增加了Web开发、Python We框架、Python分析器、远程开发、支持数据库与SQL等更多高级功能。两者区分如下&#xff1a; 所以&#xff0c;大胆放心的用PyC…

Pycharm社区版下载及安装教程

下载&#xff1a; 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 安装&#xff1a; 打开你下载的路径&#xff0c;双击.exe文件&#xff0c;点击运行 默认点击next之后&#xff0c;选择路径&#xff0c;尽量不要选择在C盘&#xff0c;然后…

Pycharm社区版安装教程(永久免费,随时升级)

首先进入JetBrain的官网(国内正常访问): https://www.jetbrains.com/ 第一眼看到的界面如下图所示: 然后找到我们的Pycharm专题页: 进入Pycharm的专题页面之后,点击下载按钮(这里有两个按钮,点任何一个都行): 然后进入到真正的下载页面你会发现有两个版本的Pycharm,一个…

pycharm安装-社区版

下载地址 Download PyCharm: Python IDE for Professional Developers by JetBrains https://www.jetbrains.com/pycharm/download/#sectionwindows 下载社区版 安装过程 双击安装包 开始安装 安装过程 首次启动 双击桌面图标 选风格 深色保护视力 新建项目 新建文件

如何用Pycharm社区版连接数据库

用Pycharm社区版连接数据库 Pycharm 社区版安装过程 Pycharm 社区版 Pycharm社区版是比专业少了一些功能&#xff0c;直接并没有连接数据库的工具&#xff0c;所以需要自行下载安装。 安装过程 1.file->settings 2.在Plugins中搜索database 3.点击搜素 4.选中要下载的…

pycharm社区版安装及使用教程(win10系统)

1.下载 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 2.双击安装程序&#xff0c;直接next 3.选择安装路径&#xff08;安装路径最好不要带中文和空格&#xff09; 4.勾选配置&#xff0c;然后next 没有框起来的那一项不用勾选&#xf…

Pycharm的安装并且连接已有的Python环境实现自由编译(附中文配置)|并通过Pycharm实现增加网站访问

&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d; &#x1f947;博主昵称&#xff1a;Jovy. &#x1f35f;博客主页…

使用Pycharm连接服务器,实现代码同步

Table of Contents 一.目标 二.本地环境 三.步骤 四.同步代码 五. 配置远程Python解释器 六. 使用远程解释器运行本地Python程序 一.目标 Pycharm软件连接服务器&#xff0c;同步本地代码到服务器 二.本地环境 Pycharm专业版&#xff08;社区版没有该功能&#xff09;…

linux下pycharm专业版和社区版的安装

一.社区版的安装 1.在官网下载pycharm的源码安装包(https://www.jetbrains.com/pycharm/&#xff09; 进入官网&#xff0c;选择toolsx下的pycharm&#xff0c;再点击右上角的download&#xff0c;进去后选择想要的版本即可。 当然安装包也可以通过别人的分享获得&#xff0…

Pycharm社区版下载安装教程+图文教程

Pycharm下载网址&#xff1a;Download PyCharm: Python IDE for Professional Developers by JetBrains 下载后双击运行安装&#xff1a; 选择安装路径&#xff1a; 然后选择install安装即可 选择同意。 打开pycharm后新建项目&#xff0c;选择项目的路径&#xff0c;选择Pytho…

手把手教学安装pycharm(社区版)

1.首先我们要进入pycharm社区版的下载地址 下载&#xff1a;https://www.jetbrains.com/pycharm/ 官网中下载windows社区版&#xff08;免费&#xff09; 2.点击右边的社区版“COMMUNTY”下面的"DOWNLOAD"进行下载 3.下载完成后双击安装包进行安装 4.下一步&#…

Pycharm-community-2020.2.3 社区版安装教程

Pycharm-community-2020.2.3 社区版安装教程 1.安装 step1 step 2 首先是更改安装地址&#xff0c;推荐安装在D盘&#xff0c;如果和我一样C盘容量大的话&#xff0c;也可以不改&#xff0c;直接点击【Next】&#x1f604; step3 勾选所有即可&#xff0c;点击【Next】 step4…

PyCharm社区版下载和安装 2022_12_11

下载 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 安装 pycharm-community-2022.3.exe

pycharm 社区版2022 如何安装第三方库(Mac版 有手就行)

Hi&#xff0c;希望这篇文章对mac book pro新手学python&#xff0c;起到用途哦&#xff01;&#xff01;&#xff01; 一.安装pycharm 打开官网下载 Download PyCharm: Python IDE for Professional Developers by JetBrains 二.安装第三方库 第一步&#xff1a;打开pycha…

PyCharm 2020.3.2社区版的下载安装及使用入门教程

1.从官网下载: http://www.jetbrains.com/pycharm/download/#sectionwindows 打开后如下图所示&#xff0c;再根据自己电脑的系统选择&#xff0c;我这里选择的是Windows系统下的社区版&#xff08;纯Python开发&#xff0c;免费使用&#xff09; 2.PyCharm的安装&#xff1…

PyCharm 社区版 安装 教程(Windows)

注&#xff1a;如果已经安装过python 3.5 及以上版本的解释执行器则跳过此步骤 下载 PyCharm 社区版 软件 PyCharm windows 版本 安装包如下:Thank you for downloading PyCharm!https://www.jetbrains.com/pycharm/download/download-thanks.html?platformwindows&codeP…

Pycharm 社区版安装

一、Pycharm介绍 二、Pycharm社区版安装 三、Pycharm使用 一、Pycharm介绍 PyCharm是一种Python IDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#x…

Pycharm直接连接Github

Pycharm直接连接Github Pycharm可以说是使用Python语言开发者的必备利器。高校学生有学生邮箱就可以免费使用&#xff0c;着实省了我不少银两。附个license图&#xff1a;Git是一个开源的分布式版本控制系统&#xff0c;用以有效、高速的处理从很小到非常大的项目版本管理。代码…