逆向分析题

六眼飞鱼酱① 提交于 2019-12-04 15:56:26

逆向分析题

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两种工具,静态与动态相结合的分析一个程序。并且,通过这次弹窗的实验,实践的掌握关于跳转的理解能力,在序列号的实验,懂得如何将程序逆向,写出逆程序,跑出结果。
  由于接触逆向的时间比较少,还不能很熟练的分析一个程序,在以后的实验与学习中,会加大学习与理解,增强逆向能力

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!