当前位置:网站首页>【逆向中级】跃跃欲试

【逆向中级】跃跃欲试

2022-07-06 09:33:00 TiggerRun

跃跃欲试

题干

下载下来后,题目说找到 Serial
在这里插入图片描述
我先用PEiD查壳,看看是不是可执行文件,发现是加了壳的可执行文件。
然后我修改后缀为exe,发现可以打开。
在这里插入图片描述
在这里插入图片描述

0x1 脱壳

这题分类在中级,因为在初级就做过一个通过调试加密算法去分析注册码,以为这题是要先脱壳。

OD加载后暂停在 pushad,保存寄存器状态
在这里插入图片描述
我使用esp法 + HR 断点,来追溯popad
在这里插入图片描述
但是很奇怪,这壳retn到一个CALL,然后进入这个CALL后才是 push ebp等操作,我猜测CALL里的才是OEP,使用插件Dump后程序运行就报错,查了下资料说是修复IAT,我又下载了importREC,最后通过查询资料才知道win7不适合脱壳,需要安装XP虚拟机,我就没继续脱壳了。

这个后续脱壳成功后会发过程,这个壳应该有其他的保护处理。

0x2 OD调试

我随便输入一个邮箱,随便输入了下面的SerialNumber,然后点击确定
通过上次的注册机的学习,我这次使用了API断点,因为最后跳出一个信息框提示,我 ctrl + G 来到 MessageBoxA的函数头,对其函数头下了个普通断点。

然后再次点击确定,通过堆栈可以返回到调用MessageBoxA函数的代码段

在这里插入图片描述
在这里插入图片描述
这样就跟进了yyyx模块中

然后就是分析这些参数哪里来的
在这里插入图片描述
其中传入了4个参数,其中的eax是信息框的text内容,来自 lecal.80

在这里插入图片描述
然后往上分析,是从哪里跳转来的
上面出现一个jmp直接到这个信息框提示,跳过了中间的一段代码,然后我就去查看了中间这段代码被跳过了哪些内容

在这里插入图片描述
local.16存放了 Success的提示文本,说明这段代码很可能是注册成功执行的代码,那么从上往下执行上面一行是jmp,这个jmp直接跳到了弹出信息框,说明这段代码不是按顺序执行下来的,而是某个地址跳转而来,通过OD的提示网上找这个跳转。
在这里插入图片描述
找到这个跳转je,如果未实现跳转,lea eax,[local.7],local.7中存放了Registration Failure,然后进行push压栈调用下面的一个CALL,然后直接跳转到弹出信息框,说明这段代码是用来处理注册失败的。

把光标定位到这行代码,发现来自很多地址
在这里插入图片描述
这说明一点,上面就是验证的算法,有一大片的jnz

JNZ : jump if not zero 结果不为零则转移

然后我就往上拉,看到两个GetDialogText函数
在这里插入图片描述
通过下断点的方式验证这里是取出编辑框中的内容
我们找到了程序处理事件的最开始位置,就可以进行正向的分析了
在这里插入图片描述
我发现这个jmp跨度很大,直接跳到了之前分析的
在这里插入图片描述
处理错误事件的地方。
而且上面的ASCII字符串中写的“E-mail address is not valid”邮箱地址无法通过验证,说明前面的几个CALL是在做邮箱地址的格式正确判断操作。

在这里插入图片描述
这一段代码有必要琢磨,这功能是取字符串长度,方法和上次题目的不一样,上次题目通过scas遍历字符串,然后寄存器递减后取反 + 1

这里是通过地址递增,拿到结束符的地址后减去首地址从而计算出长度

通过这个cmp和jnz可以知道,serial的长度为 0x10 即 16位

在这里插入图片描述
然后后面的一些jnz我觉得是挺呆的,应该放在初级题中…
最后serial是个静态的值
在这里插入图片描述

0x3 新知识

  1. 通过地址递增计算字符串长度
  2. ASPack 堆栈法 脱壳
  3. importREC IAT修复工具
  4. LordPE Dump工具
  5. 无后缀的文件可以先通过PEiD查询以下EP
原网站

版权声明
本文为[TiggerRun]所创,转载请带上原文链接,感谢
https://blog.csdn.net/shipsail/article/details/104675825