逆向调试入门-设置API函数断点

Posted 最爱大苹果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向调试入门-设置API函数断点相关的知识,希望对你有一定的参考价值。

API函数:


英文全称Application Programming Interface,翻译为“应用程序编程接口”。 是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。


逆向调试入门-设置API函数断点_逆向调试



使用工具:


Ollydebug:一跨调试工具。

Stud_PE:一款查看PE头文件的工具

exeinfope:一款查编写语言的工具

TraceMe软件:一个小程序。


逆向调试入门-设置API函数断点_逆向调试_02


思路:


1、先运行程序,观察程序

2、大致判断程序的流程

3、进行调试,寻找函数调用地方


我们打开程序


逆向调试入门-设置API函数断点_逆向调试_03


程序图标


逆向调试入门-设置API函数断点_逆向调试_04


这个程序有一个主窗口,两个窗口

1、用户名,用来填写信息

2、序列号,用户填写信息


逆向调试入门-设置API函数断点_od爆破_05


我们输入信息,点击check


逆向调试入门-设置API函数断点_od爆破_06


提示字符数量不对


逆向调试入门-设置API函数断点_逆向调试_07


重新输入


逆向调试入门-设置API函数断点_逆向调试_08


提示序列号错误,再来一次


大致的流程我们知道


逆向调试入门-设置API函数断点_od爆破_09



到目前为止,我们进行了小程序的运行。

大致的运行流程也知道了。


逆向调试入门-设置API函数断点_逆向调试_10


我们复制一份副本


使用exeinfope 工具


逆向调试入门-设置API函数断点_od爆破_11


将程序副本放入


逆向调试入门-设置API函数断点_od爆破_12


可以看到,这个程序大概率是C语言编写

我们再来使用Stud_PE工具进行查看


逆向调试入门-设置API函数断点_逆向调试_13


拖入文件副本


逆向调试入门-设置API函数断点_od爆破_14


我们不看PE结构


逆向调试入门-设置API函数断点_逆向调试_15


我们看函数部分


逆向调试入门-设置API函数断点_od爆破_16


我们看user32的dll库


逆向调试入门-设置API函数断点_od爆破_17


如果有编程经验的小伙伴,可以猜测使用了哪几个函数。


下面我们通过OD工具打开文件副本


逆向调试入门-设置API函数断点_逆向调试_18


看到熟悉的文件入口点。55-8B-EC


有小伙伴会好奇,为什么OD每次打开程序都是这个位置呢?


在OD工具中的选项,选择调试选项,事件。

选择第一次暂停于:winMain(诺位置已知)


逆向调试入门-设置API函数断点_逆向调试_19


按照老规矩,我们F8跑一遍。


逆向调试入门-设置API函数断点_od爆破_20


在一个函数来看,一般都是push/push/push/,然后call

这里我们下一个断点。F2

我们重新加载程序,进入


逆向调试入门-设置API函数断点_逆向调试_21


在这里我们看到熟悉的API函数


逆向调试入门-设置API函数断点_od爆破_22


当运行到这里的时候,程序运行出来了

我们尝试输入信息


逆向调试入门-设置API函数断点_逆向调试_23


然而程序没有动,说明这个call完成了判断


逆向调试入门-设置API函数断点_od爆破_24


一进来就弹出窗口,有意思

仔细看旁边的内存地址,是755DE730,是一个大的地址

说明是DLL的程序领空了


逆向调试入门-设置API函数断点_od爆破_25


在这里看到有个test指令,上次我们学习到test指令的作用是进行标志位。

我们下一个断点

我们盲猜是进行判断(因为标志位的作用,很大是做判断使用)


逆向调试入门-设置API函数断点_od爆破_26


未执行指令的值


逆向调试入门-设置API函数断点_逆向调试_27


执行test eax , eax之后的值

影响到Z标志位

我们赶紧查询手册,看下Z标志位和JE指令


逆向调试入门-设置API函数断点_逆向调试_28


结果为0,则转移


逆向调试入门-设置API函数断点_od爆破_29


跳转未实现


逆向调试入门-设置API函数断点_od爆破_30


我们将其Z标志改为1,让程序跳转

可以看到已经跑完这个条件判断。


逆向调试入门-设置API函数断点_od爆破_31


流程往下走


逆向调试入门-设置API函数断点_逆向调试_32


在这里会有绕来绕去的逻辑

需要耐心

耐心


使用CTRL+F9可以回到DLL库调用的位置。


逆向调试入门-设置API函数断点_逆向调试_33


在第二个断点中


逆向调试入门-设置API函数断点_逆向调试_34


我们发现,至少需要20分钟分析完整个程序。

在爆破的过程中,我们需要进行下断点。


逆向调试入门-设置API函数断点_od爆破_35


我们使用NOP来进行填充,把JE进行覆盖。


逆向调试入门-设置API函数断点_逆向调试_36


将修改后的文件进行保存


小程序爆破完成。

以上是关于逆向调试入门-设置API函数断点的主要内容,如果未能解决你的问题,请参考以下文章

利用IDAPython给Windows API下条件断点

Android 逆向代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

GDB调试指南-单步调试

Windows 逆向OD 调试器工具 ( OD 调试数据时硬件断点对应的关键代码 | 删除硬件端点恢复运行 )

Android 逆向使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

OD常用断点之CC断点