OllyDbg笔记-寄存器以及各种关键指令解析(含简单程序破解)
发布日期:2021-06-30 10:40:58 浏览次数:2 分类:技术文章

本文共 1033 字,大约阅读时间需要 3 分钟。

目录

 

 


 

基本概念

CPU中的9个寄存器:

EAX:扩展累加寄存器

EBX:扩展基址寄存器
ECX:扩展计数寄存器
EDX:扩展数据寄存器
ESI:扩展来源寄存器
EDI:扩展目标寄存器
EBP:扩展基址指针寄存器
ESP:扩展堆栈指针寄存器
EIP:扩展的指令指针寄存器

 

处理EBP、ESP、EIP,其他寄存器都能随意使用。

EBP:主要用于栈和栈针;

ESP:指向当前进程的栈空间地址;
EIP:总是指向下一条要被执行的指明;

 

call有以下几种方式:

call xxxxxxxxxh     	#直接跳到函数或过程的地址;call xxxx	    	#等同于 push eip;jmp xxx;call eax	    	#函数或过程地址直接存放在eax;call dword ptr [eax]	#eax中存的是地址,[]这个是取地址中的值,dword大小call dword ptr [<&API>]	#执行一个系统API

下面是关于Windows操作系统相关的知识:

从内到外:

Ring 0:优先级最高,用于操作系统内核;
Ring 1:不使用;
Ring 2:不使用;
Ring 3:最先级最低,用于应用程序;

 

下面是关于在条件判断跳转中关键:

 

代码与实例

这里破解:

这里有2个破解方法,一个是暴力破解,把if判断后的结果修改为正确。

还有一个是破解算法。

下面来演示下,首先是暴力破解:

这里有个关键,程序首先是在看有没有存在Keyfile.dat文件,如果没有,就直接跳转了

JNE是当ZF=0的时候跳转,此时把ZF改为0

往下走看到一个JNZ,现在程序给出的默认是不跳转,也就是ZF此时为0,在往下看是JMP是无条件跳转。跳到004010F7的位置,先看看这段004010F7是什么代码:

发现是给出密钥不对。此时我们让其跳转吧:

此处我们可以看到跳到一个算法里面:

这里我们分析下:这里首先是对比DS:[402173]的值是不是为10.这个目测是,通过JL可以看出小于或不大于时跳转。所以密钥估计是10位以上。然后就是读取东西。读取了后和ASCII 47也就是G做对比。如果不是G就跳转,如果是就回去在循环,所以可以知道密钥估计是>10个G(这个10是16进制的10进制为16)。这里先暴力破解下,

进行修改尝试后:

最后就来到了这个地方:

填出:

这里创建:Keyfile.dat文件,里面输入大于10个的G。看看结果:

打开程序:直接成功

转载地址:https://it1995.blog.csdn.net/article/details/103440275 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:前端笔记-freemarker模板获取后端数据及提交数据
下一篇:C++|Linux工作笔记-C++获取Linux中shell命令结果

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月30日 07时55分19秒