CM: 工具: 环境:windows xp首先我们简单观察一下此软件的使用方法:我们双击后显示如下: 当我们点击确定后:
至此,我们不需要管这里的文字显示的是什么,我们需要做的就将我们打开软件的第一个窗口(nag,即:烦人的窗口)去掉,使我们双击后可以直接进入软件的主界面。
下面将开始介绍具体的实现方法:一、首先我们先将此软件导入我们的第二个工具exdec(此工具实际相当于一个解释器,将pcode反编译为可视化的操作码)最上面标注两个箭头分别指操作码和参数,分析pcode能看懂这些相当要。在开始的时候我们分析出此软件会弹出两个窗口。我们需要删掉第一个窗口,我们在此窗口中也可以看到一个API函数_rtcMsgBox(VB专属),它的作用也就相当于我们平时见到的MessageBox,它的操作码为0a.
二、载入OD,在数据窗口中跟随0a,并设置内存访问断点,运行。程序断在了我们设置断点的地方,我们接下来F8单步执行,这些反汇编代码对应的都是刚才解析出来的操作码,读者有时间可以自行跟一下(很有必要),这里我们直接F8,找到我们认为有用可疑的地方。我们跟到了call EAX 处,EAX = 00401000 ,我们也Enter跟过去,发现此处调用的就是窗口函数,看来确实是我们所需要的。
三、找到了函数的调用地方,但是我们也同时发现程序正处于系统领空,如果我们强行将call eax 改为 nop 命令,这样会很危险。我们不说对我们的程序自身会有影响,而且对其他调用此函数的程序也有影响,所以这种方法是不可取的,感兴趣的同学可以尝试用nop修改一下,看会产生什么样的结果,这里不做演示。我们执行这条call语句:正如我们所想的,它确实是调用了我们需要删除的窗口函数。
四、既然我们不能使用nop掉这种暴力的方法,我们可以使用其他方法,修改操作码,这也是这里最核心的思想。首先我们先看一下这些操作码的说明:由于篇幅有限,我只在这展示部分操作码的说明,但是对于我们的分析已经做够了。我们可以看一下0a的说明,它的作用是调用函数,四字节大小,有两个参数,每个参数的大小都是两字节,这也就是上面 4 2 2 2 的含义。系统调用了0a,产生了我们不需要的窗口,那么我们可以修改它。那么也存在一个问题,拿什么替换,而不会影响程序的正常运行,也能达到我们的目的。假如我们用0B去替换0A,但是我们也发现虽然它的大小和参数个数及参数大小都是一样的,但是它本身也是一个调用函数,我们这样修改的话,就会影响到程序的其他功能。所以,基于此分析,我们应该找一个并没有什么功能也不会影响我们程序正常运行的操作码,并且字节大小要完全吻合。我们可以在这张图中寻找,我们可以用07去替换,07 作用是push 两个参数 ,且每个参数都是俩字节,正好符合我们的需求,那么我们就可以决定使用它,并把它的参数改为0,这样就相当于无效的指令。修改之后我们运行此程序。直接跳过了nag.
五、将修改保存到可执行文件,命名为 nagok.这是我们可以使用exdec这个工具在对修改后的可执行程序就行分析,发现原来的0A变为了07.
至此,我们算是分析完了。初学逆向,写一点学习总结与心得,内容不难,希望能帮助到跟我一样的初学者,大家一起交流,注意一定要多动手分析一下,收获良多。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)