逆向分析题
nag.exe
1.去除nag.exe启动时弹出的对话框
2.将主窗口的背景图替换成其他任意图片
3.修改exe文件,使得点击exit按钮后,弹出启动时弹出的对话框
先利用IDA分析一下程序,找到两个弹窗的函数位置
然后按照教员上课讲的方式,修改的时候不能只是修改push的参数值,将79改成65虽然能使第一个弹窗消失,但其他的按钮也会失效,必须将属性一块替换
分别将这两个地方互相替换,这样的话,就会先启动第二个弹窗,较好的使第一个对话框消失
由于任务要求点击exit还得回到第一个对话框,这时就将最后的call函数返回至第一个对话框的位置,即004010D9
最后需要替换后面的照片,先百度一下利用什么工具
一开始试了试exescope
发现不知道为啥替换不了,换成reshacker
试试,成功
实验成功
TraceMe.exe
给出序列号计算算法,并编译成工具,使得输入任意的用户名,都可以得到正确的序列号。(提示:静态分析加动态调试,从lstrcmpA函数入手)
首先先运行下程序看下情况
发现会有两个提示,也就是说这个程序会先匹配一下用户名,当用户名长度>5时会进行相应序列号的匹配
使用OD动态调试
会发现会在00401469
处打开界面,这时在这里下一个断点,并进入,本来想一直跟下去,发现比较麻烦。
突然想到这个是让你输入用户名与序列号,也就是说他有一个API的调用函数,那先找到相应的调用
发现调用是GetDlgItemTextA
,直接ctrl+G
来定位其并下断点,然后直接F9运行,会弹窗
点击check后会进入,然后就单步下去
返回后会发现有两个,分析可知第一个是用户名的获取,第二个是序列号的获取
可知先赋值并验证是否为0,这个明显就是来验证用户名是否为空的情况,并且可知00401248
就是弹窗失败的地方
然后下面的cmp ebx,5
是用来验证用户名长度是否大于5,同样返回失败的地方
当过滤后才是真正将用户名,序列号获取
然后经过验证会发现在004011E5
处的call地方会对两部分进行操作
会发现出现了一个4位数字,猜测这个是真正的序列号
为了验证这个函数的功能,下个断点,进去
然后一直单步调试,会发现里面会对输入的字符串进行变换与匹配
利用IDA静态调试一下,发现关键的变换
写一个脚本跑序列号
代码
import string
table = [0xC,0xA,0x13,0x9,0xC,0xB,0xA,0x8]
name = raw_input("input the name:")
#print name
len_n = len(name)
#print len_n
i = 3
j = 0
flag = 0
while i < len_n:
if j > 7:
j =0
flag += ord(name[i])*table[j]
j += 1
i += 1
print flag
发现与之前的一致,在尝试几次,都成功
实验收获
通过本次实验,初步理解了逆向的过程,懂得如何去使用OD以及IDA两种工具,静态与动态相结合的分析一个程序。并且,通过这次弹窗的实验,实践的掌握关于跳转的理解能力,在序列号的实验,懂得如何将程序逆向,写出逆程序,跑出结果。
由于接触逆向的时间比较少,还不能很熟练的分析一个程序,在以后的实验与学习中,会加大学习与理解,增强逆向能力
来源:CSDN
作者:Ni9htMar3
链接:https://blog.csdn.net/Ni9htMar3/article/details/72835620