发现王:发现生活点滴!

软件应用

当前位置:首页 > 文苑资讯 > 软件应用

.Net零基础逆向教程 第六课(必须跳过去)

        Shark 恒在他的这节课上讲的是汇编,教大家用 OD 折腾关键跳。

        要说对应的话其实我应该写 IL 代码的,因为好多 .Net 的教程都认为 IL 是 .Net 逆向的基础。

        但我想了想,dnSpy 还有很多技巧没教给大家,直接上手 IL 是不是太难了?

        毕竟我和 Shark 恒在基础课程上的想法是一致的,在我的课上,不会让你感到有那么枯燥就能学到知识。

        所以从这节课开始我基本要脱离 Shark 恒的文案来写教程了,但愿我能写出很优秀的文案。

        以下进入正题。

        今天要学的内容,是"调用堆栈",首先介绍下什么是"调用堆栈"

        假设我们有几个函数,分别是 function1 , function2 , function3 , funtion4 ,且 function1 调用 function2 , function2 调用 function3 , function3 调用 function4。在 function4 运行过程中,我们可以从线程当前堆栈中了解到调用他的那几个函数分别是谁。把函数的顺序关系看,function4、function3、function2、function1呈现出一种"堆栈"的特征,最后被调用的函数出现在最上方。因此称呼这种关系为调用堆栈。

        简单的来说,我们能从调用堆栈里找出函数的执行过程。

        下面我们结合一个小程序具体看看怎么用:

        介绍一下软件,这个软件启动后 3 秒会自动关闭。

        为了让零基础人群更容易掌握,于是我在关闭的时候加入了一个弹窗提示,如图。


 .Net零基础逆向教程 第六课(必须跳过去)


        将软件拖入 dnSpy,按 F5 跑起来


 .Net零基础逆向教程 第六课(必须跳过去)


        等弹窗出现以后,中断它。


 .Net零基础逆向教程 第六课(必须跳过去)


        然后你可以在调用堆栈选项卡里看到这个弹窗的来源,如果你没有调用堆栈选项卡,你可以在调试 -> 窗口 -> 调用堆栈里找到它。


 .Net零基础逆向教程 第六课(必须跳过去)


        在我框起来的上下,均有一些带 System 、 Windows 的 dll 调用,这些都是系统的 dll,自然不是我们要找的目标,因此我可以快速的找到框起来的这一行是我要找的目标。双击它进行跳转。


 .Net零基础逆向教程 第六课(必须跳过去)


        如图,dnSpy 定位到了弹窗的来源。

        阅读一下,发现这里定义了,当窗口关闭时,弹出信息框。

        那么问题来了,谁导致窗口关闭的?

        那么我们继续看堆栈。


 .Net零基础逆向教程 第六课(必须跳过去)


        第一处我们已经看过了,接下来我们看 Timer 事件,双击跟进。


 .Net零基础逆向教程 第六课(必须跳过去)


        看到这里有个Timer,结束了进程。

        那么右键,编辑方法,注释掉它即可。


 .Net零基础逆向教程 第六课(必须跳过去)


        把程序保存一下看看,这下是不是不会再自动退出啦?

        通过这一节课,我们学习到了调用堆栈的基础用法,这对我们今后爆破软件和分析执行流程提供了很大的帮助。


        本章课件第六课:https://www.lanzous.com/i3qo5ra 


        感谢本文作者:慕若曦


文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

评论排行榜