当前位置:网站首页>【逆向中级】跃跃欲试
【逆向中级】跃跃欲试
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 新知识
- 通过地址递增计算字符串长度
- ASPack 堆栈法 脱壳
- importREC IAT修复工具
- LordPE Dump工具
- 无后缀的文件可以先通过PEiD查询以下EP
边栏推荐
- Activit fragmented deadly pit
- 8086 CPU 内部结构
- 数据传送指令
- Wu Jun trilogy insight (IV) everyone's wisdom
- Activiti directory (III) deployment process and initiation process
- After the subscript is used to assign a value to the string type, the cout output variable is empty.
- 字节跳动春招攻略:学长学姐笔经面经,还有出题人「锦囊」
- Set up the flutter environment pit collection
- MySQL字符串函数
- 唯有學C不負眾望 TOP5 S1E8|S1E9:字符和字符串&&算術運算符
猜你喜欢
Interpretation of Flink source code (III): Interpretation of executiongraph source code
Activiti directory (IV) inquiry agency / done, approved
JVM运行时数据区之程序计数器
Data transfer instruction
Introduction to spring trick of ByteDance: senior students, senior students, senior students, and the author "brocade bag"
ByteDance overseas technical team won the championship again: HD video coding has won the first place in 17 items
MySQL string function
Flink 解析(七):时间窗口
Ruoyi-Cloud 踩坑的BUG
Fdog series (4): use the QT framework to imitate QQ to realize the login interface, interface chapter.
随机推荐
手把手带你做强化学习实验--敲级详细
[graduation project] QT from introduction to practice: realize imitation of QQ communication, which is also the last blog post in school.
连接局域网MySql
Activit fragmented deadly pit
Ruoyi-Cloud 踩坑的BUG
JVM垃圾回收概述
Only learning C can live up to expectations TOP4 S1E6: data type
Flink 解析(四):恢复机制
搭建flutter环境入坑集合
Koa Middleware
Typescript basic operations
8086 CPU internal structure
Assembly language segment definition
Prototype chain inheritance
8086 分段技术
Activiti directory (V) reject, restart and cancel process
唯有學C不負眾望 TOP5 S1E8|S1E9:字符和字符串&&算術運算符
Learn the wisdom of investment Masters
After the subscript is used to assign a value to the string type, the cout output variable is empty.
TypeScript基本操作