本帖最后由 风车 于 2016-5-21 10:23 编辑
嘻嘻,第一次在论坛上发正式帖子,想想还有点小激动呢,嘿嘿,先说好了,我就是个小白,所以分析的程序也是...所以,大神们请略过,只因不想一直做伸手党,所以分享一个自己分析的NAG哈...
分析一个耍心机的NAG,有点小虐心 一、程序运行 1、运行界面 出现一个NAG窗口,提示需要去除它 2、点击“确定” 3、查壳 查证是 MASM32写的程序,并没有加壳
二、载入OD分析 (1)NAG初探 咦,这不是一下子就看到了,NAG窗口提示信息了呀,那我直接NOP掉不就完事儿了,简单...真的这样子吗?试一试: 事实是并没有达到想象的效果,NAG、依然出现了
(2)NAG再探 1、重新载入OD,点击”分析代码”,遇到第一个CALL 进入看看 进入看看写了什么 这里显然的几行代码,看看是在和从地址401000处,XOR操作,我们先看看401000出的代码 大概就是这个样子的,执行完那个CALL会不会发生变化呢?
那就试试看: 可以看到EAX = 00401218,也就是说从00401000 - 00401218处代码或者数据做了处理了,查看此时的00401000处的代码【PS:数据肯定是改变了的】 好吧,果然真的代码变了,也就是说,这里是对00401000 - 00401218处的代码重写了呀 2、从上一个CALL中跳出来以后,下面还有一个CALL呢,进入 执行分析这段代码,好像和上一段代码类似哎,在修改指令或代码呢?先执行看看啊 可以看到此处竟然是对该CALL函数入口处做修改???往下执行看看 确实修改了此处指令,可以看到有一个MessageBoxA被解析出来了,但是参数看不到,比较看到此处修改范围:401011 - 401025
3、看到指令在CALL EDI(从右边的注释可以看到是调用的是刚才第一个CALL修改的指令),进入看看 这数据 和 MessageBoxA的参数有什么关系?都是文字,是不是此处会修改数据了?
真的是这样的,好吧
再往下走,就会执行这个MessageBoxA 输出NAG窗口了
三、去除NAG 解决方案一 修改MessageBoxA 调用参数父句柄值为1: 1.修改MessageBoxA第一个参数,即将代码位置40101D处00改为01.但是该位置代码是前面第二阶段代码自修改后写入的值,因此,应该在代码自修指令中对40101D修改的值改为0x5B(即01 XOR 0x5A),即将代码位置为401038处修改为0x5B 这里是子句柄的值为0 ,要修改为1,就不会显示NAG窗口了
思路:应该去到修改40101D处的代码地方,刚才好像MessgeBoxA被解析出来是在第二个CALL呢 就是在此处修改的: 00401035 ? 66:C707 6A00 mov word ptr ds:[edi],0x6A 可以数一下,此处写入的是6A,但是这是修改过的值,所以在此修改达不到目的,应该找是哪里修改的6A对应指令地址,即:00401038
2.使用Ctrl+G跳到401038处,选中该处数据,右键选择二进制->编辑->填入5B,确定退出;选中修改过的数据,右键“复制到可执行文件”->在弹出的可执行文件窗口中,右键保存文件
OK,执行文件,已经没有NAG窗口了
解决方案二 直接jmp跳过nag窗口调用: 1.401011处汇编(空格),填入指令jmp 0040106A,即MessageBoxA 调用返回后的下一条指令,查看机器码为EB 57,重新加载程序,F7跟进修改自身代码调用CALL 401011,发现在地址00401013处指令对401011的指令进行了修改,查找到该指令在00401016处为写入代码 2.使用Ctrl+G跳到401016处,依次选中该处数据,右键选择二进制->编辑->填入 B1 0D,确定退出;选中修改过的数据,右键“复制到可执行文件”->在弹出的可执行文件窗口中,右键保存文件 EB XOR 5A = B1 57 XOR 5A = 0D
OK了,程序同样不会弹出NAG窗口了
嘿嘿,补上附件哈...
ReverseMe.zip
(19.04 KB, 下载次数: 0)
|