2022年HGAME中REVERSE的easyasm

2022年HGAME中REVERSE的easyasm

在这里插入图片描述
.
.
照例下载附件,是一个DOS文件:
在这里插入图片描述
.
.
根据题目中文含义,简单的 ASM 汇编,照例扔入 IDA 中查看反汇编:
在这里插入图片描述
.
.
没办法,只能理解汇编代码了,由于对段寄存器段偏移地址不太熟悉,所以栽了很多跟头:
在这里插入图片描述
在这里插入图片描述
.
.
其实爆破逻辑和那个段都没关系,但是由于我不理解对应哪个段,加上不熟悉没有 F5 ,所以我脚本逻辑一直写错,然后又没法验证,所以就一直揪着 si 的段想了很久:
在这里插入图片描述

常用快捷键
Alt+Enter //切换全屏
Alt+Pause //暂停模拟
Ctrl+F1 //改变键盘映射
Ctrl+Alt+F5 //开始/停止录制视频
Ctrl+F4 //交换挂载的磁盘映像,也就是更新磁盘文件
Ctrl+F5 //截图
Ctrl+F6> //开始/停止录制声音
Ctrl+F7 //减少跳帧在这里插入代码片
Ctrl+F8 //增加跳帧
Ctrl+F9 //关闭DOSBOX
Ctrl+F10 //捕捉/释放鼠标
Ctrl+F11 //模拟减速
Ctrl+F12 //加速模拟
Alt+F12 //不锁定速度
.
.
常用DEBUG指令
1.显示内存单元内容的命令D
格式1: D [地址]
格式2: D [始地址] [未地址]
.
2.修改存储单元内容的命令E
格式1: E [地址] [单元内容表]
-E DS:100 AA BB CC DD
将AAH、BBH、CCH及DDH依次送DS:100H开始的4个单元。
格式2: E [地址]
.
3.填充存储单元内容的命令F
格式:F [地址] [单元内容表]
.
4.检查和修改寄存器内容的命令R
格式1: R
格式2: R [寄存器名]
格式3: R F
.
5.汇编命令A 格式:
A [地址]
.
6.运行命令G
格式1: G[=始地址] [断点] [断点]
格式2: G
格式3: G[=地址]
.
7.跟踪命令T
格式1: T [=地址]
格式2: T [=地址] N
.
8.反汇编命令U
格式1: U [起始地址]
格式2: U[开始地址] [结束地址]
.
9. 退出DEBUG命令
Q
.
调试过程
文件名: XXX.asm
编辑: EDIT XXX.asm
编译: MASM XXX.asm
链接: LINK XXX.obj
调试: DEBUG XXX.exe
运行 : XXX.exe
.
简单附上DOSBOX大致用法:
下载网址(这里面还含有SOURCE工具):https://www.dosbox.com/download.php?main=1
第一步:挂载本地磁盘文件 mount d d:\1\ ;这里第一个d是盘符,第二个是具体文件夹
.
第二步:输入 d: > ;这时已经转到该位置了,里面应该要有你要运行的DOS程序。
.
第三步:直接 1.exe 或 dubug.exe 1.exe > ;第一个是直接运行程序,第二个是运行不了的话还可以调试和反汇编。所以debug.exe要放入目标文件夹下。(debug.exe是测试和调试
MS-DOS> 可执行文件的程序,当运行软件或游戏时,系统提示“没有找到debug.exe”、“缺少debug.exe”等类似错误信息,就要下载debug.exe)
.
.
标志位含义如下:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
.
.
所以我之前脚本一直都是位数限制出了问题啊,还是经验不足啊,太菜了~。由于移位操作我不懂怎么逆向逻辑,所以附上爆破脚本如下:

'''
a=[  0x68, 0x67, 0x61, 0x6D, 0x65, 0x7B, 0x46, 0x69, 0x6C, 0x6C, 
  0x5F, 0x69, 0x6E, 0x5F, 0x79, 0x6F, 0x75, 0x72, 0x5F, 0x66, 
  0x6C, 0x61, 0x67, 0x7D]
'''
b=[  0x91, 0x61, 0x01, 0xC1, 0x41, 0xA0, 0x60, 0x41, 0xD1, 0x21, 
  0x14, 0xC1, 0x41, 0xE2, 0x50, 0xE1, 0xE2, 0x54, 0x20, 0xC1, 
  0xE2, 0x60, 0x14, 0x30, 0xD1, 0x51, 0xC0, 0x17]
c=[]
for d in b:
	for i in range(32,127):
	#print(hex((i<<4)&0xff))
	#print(hex((i>>4)&0xff))
		if (((((i<<4)&0xff)+((i>>4)&0xff))^23)&0xff)== d:
			c.append(i)
			
	#print((0^0x17)&0xff)
print(''.join([chr(i) for i in c]))

在这里插入图片描述
.
.
逆向逻辑脚本(待补充):

~~~~~~~~~~~~^~^

.
.
解毕!
敬礼!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐一 · 林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值